项目部署
打包二进制文件
shell
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o relaxing main.go
上传至服务器
shell
scp -r /Users/fang/project/go_relaxing/relaxing/relaxing root@x.xxx.xx.xx:/project/relaxing
服务器编写 docker-compose.yaml / config.yaml /DockerFile /
docker-compose.yaml
shell
# 创建配置文件
cd project/relaxing
mkdir -p ~/config
vim ~/config/config.yaml
yaml
version: '3'
services:
relaxing:
image: relaxing:1
container_name: relaxing
restart: always
ports:
- "9999:9999"
environment:
- TZ=Asia/Shanghai
volumes:
- ./config:/app/config
config.yaml
yaml
server:
address: ":9999"
dumpRouterMap: true
routeOverWrite: true
accessLogEnabled: false
openapiPath: "/api.json"
swaggerPath: "/swagger"
database:
logger:
path: "temp/logs/sql"
level: "all"
stdout: true
ctxKeys: [ "RequestId" ]
default:
link: "mysql:root:123456@tcp(x.xxx.xx.xx:3306)/relaxing?parseTime=true&loc=Asia%2FShanghai"
debug: true
createdAt: "create_time"
updatedAt: "update_time"
deletedAt: "deleted_time"
timeMaintainDisabled: false
redis:
default:
address: x.xxx.xx.xx:6379
db: 1
pass: 123456
idleTimeout: 600
Dockerfile
Dockerfile
# 使用包含必要运行时的基础镜像
FROM alpine:3.8
# 安装基本依赖
RUN apk add --no-cache \
ca-certificates \
tzdata \
libc6-compat
###############################################################################
# INSTALLATION
###############################################################################
ENV WORKDIR /app
ADD relaxing $WORKDIR/relaxing
RUN chmod +x $WORKDIR/relaxing
###############################################################################
# START
###############################################################################
WORKDIR $WORKDIR
# 明确使用二进制方式执行
ENTRYPOINT ["./relaxing"]
docker打包成镜像
shell
# 重新构建镜像
docker build -t relaxing:1 .
# 停止并删除旧容器
docker rm -f relaxing
# 在该目录下启动容器
docker-compose up -d
# 在该目录下停止容器
docker-compose down
启动异常检查
shell
# 查看容器状态
docker ps
# 查看容器日志
docker logs relaxing
构建脚本
sh
#!/bin/bash
# 设置环境变量
REMOTE_SERVER="x.x.x.x"
REMOTE_USER="root"
REMOTE_DIR="/project/relaxing"
# 显示当前目录
echo "当前工作目录: $(pwd)"
# 检查Go环境
if ! command -v go &> /dev/null; then
echo "错误: Go未安装或不在PATH中"
exit 1
fi
echo "Go版本: $(go version)"
# 设置Go环境变量
export GOPATH=$HOME/go
export PATH=$PATH:$GOPATH/bin
# 构建Go二进制文件
echo "开始构建Go应用..."
go mod tidy
CGO_ENABLED=0 GOOS=linux GOARCH=amd64 go build -o relaxing main.go
if [ $? -ne 0 ]; then
echo "构建失败"
exit 1
fi
echo "构建成功: $(pwd)/relaxing"
# 询问是否上传到服务器
# 上传到服务器
echo "上传文件到服务器 ${REMOTE_SERVER}..."
scp -r relaxing ${REMOTE_USER}@${REMOTE_SERVER}:${REMOTE_DIR}
if [ $? -ne 0 ]; then
echo "上传失败"
exit 1
fi
# 远程执行部署命令
echo "在服务器上执行部署命令..."
ssh ${REMOTE_USER}@${REMOTE_SERVER} "cd ${REMOTE_DIR} && \
docker build -t relaxing:1 . && \
docker rm -f relaxing && \
docker-compose up -d"
if [ $? -ne 0 ]; then
echo "部署失败"
exit 1
fi
echo "部署成功!"