go应用部署到阿里云完整链路

601 阅读3分钟

部署博客系统到云服务器的完整流程

1. 准备工作

连接到云服务器:
ssh root@<your-cloud-server-ip>
更新包管理器:
apt-get update -y && apt-get upgrade -y

2. 设置远程服务器环境

更新好升级系统包
sudo apt update
sudo apt upgrade -y
安装 Docker(CentOS系统用yum来安装):
yum install -y docker-ce docker-ce-cli containerd.io
启动 Docker 并设置开机自启:
systemctl start docker
sudo systemctl enable docker
验证 Docker 安装:
docker --version
登录docker
docker login
安装mysql
  1. 拉取 MySQL Docker 镜像
docker pull mysql:latest
  1. 运行 MySQL 容器
docker run --name mysql-container -e MYSQL_ROOT_PASSWORD=yourpassword -d mysql:latest

替换 yourpassword 为你设置的 MySQL 根密码

3 编写 Dockerfile

在项目根目录下创建一个 Dockerfile



# 使用官方 Golang 1.22.5镜像作为基础镜像
FROM hub.atomgit.com/amd64/golang:1.21 as builder


# 设置工作目录
WORKDIR /app

# 安装 Git
RUN apt-get update && apt-get install -y git

RUN git --version

# 设置 Go 代理
ENV GOPROXY=https://goproxy.cn,direct

# 将 go.mod 和 go.sum 复制到工作目录
COPY go.mod go.sum ./

# 清理和验证依赖项
RUN go mod tidy

# 下载依赖
RUN go mod download

# 将源代码复制到工作目录
COPY . .

# 构建 Go 应用
RUN CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o main .

# 使用 Debian 作为运行阶段的基础镜像
# FROM debian:bullseye-slim

# 使用一个更小的基础镜像
FROM hub.atomgit.com/amd64/alpine:3.15.10


# 创建配置文件目录并复制配置文件
RUN mkdir -p /root/configs
COPY configs /root/configs

# 安装必要的 ca-certificates
# RUN apk update && apk add --no-cache ca-certificates
# RUN apk add --no-cache ca-certificates

# 设置工作目录
WORKDIR /root/

# 从 builder 镜像复制构建的二进制文件
COPY --from=builder /app/main .
COPY configs/config.yaml /root/config.yaml

# 确保二进制文件可执行
RUN chmod +x ./main

# 暴露应用程序端口(可选,根据你的应用需求)
EXPOSE 8080

# 运行 Go 应用
CMD ["./main"]

ps:云服务器安装RUN apk update && apk add --no-cache ca-certificates这一步骤太慢可使用国内镜像,

云服务器是http,不需要这步骤

# 更换镜像源为阿里云,加快下载速度
RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories \
    && apk update \
    && apk add --no-cache ca-certificates

docker hub下载镜像慢的时候,可以用hub.atomgit.com国内镜像替换,如hub.atomgit.com/amd64/golang:1.21

4 将代码推送到远程服务器

使用 scp 来复制代码到远程服务器

scp -r /path/to/your/local/project user@remote_server:/path/to/remote/directory

5. 构建 Docker 镜像

在项目根目录下,运行以下命令构建 Docker 镜像:

docker build -t my-go-app:latest .

6. 运行 Docker 容器

有时候云服务器docker连接不上数据库,需要创建一个自定义Docker网络,并将相关容器连接到该网络.

  1. 创建一个自定义网络
docker network create my-network

2 启动 MySQL 容器并连接到自定义网络

docker run -d --name my-mysql --network my-network \
    -e MYSQL_ROOT_PASSWORD=123456 \
    -e MYSQL_DATABASE=blog_service \
    -p 3306:3306 \
    mysql:5.7
  1. 确认 MySQL 容器正在运行
docker ps

确保 my-mysql 容器在自定义网络 my-network 上运行。

运行以下命令启动 Docker 容器:

docker run -d --name my-go-app --network my-network -p 8080:8080 my-go-app

7 管理容器

验证服务是否正常运行

docker logs my-mysql 
docker logs my-go-app

停止容器

docker stop my-go-app-container

启动已停止的容器:

docker start my-go-app-container

删除容器:

docker rm my-go-app-container

查看所有容器(包括停止的):

docker ps -a

8 验证部署

在浏览器中访问云服务器的 IP 地址和端口 8080,例如 http://<your-cloud-server-ip>:8080,你应该会看到 "Hello, World!"。

curl http://你的服务器IP:8080

9 配置反向代理

用nginx配置反向代理