建设银行信用卡去网站,什么是网站外链,怎样下载手机app,iis 会影响 网站 速度写在前面#xff1a;使用CI/CD部署gin项目到服务器中
前端可以参考#xff1a;使用CI/CD部署nextjs项目
使用 GitHub Actions 配置后端 CI/CD#xff08;含部署到服务器#xff09;
本文档介绍如何在 GitHub 仓库中配置 CI/CD#xff0c;将 PROJECT_NAME 项目自动构建并…写在前面使用CI/CD部署gin项目到服务器中
前端可以参考使用CI/CD部署nextjs项目
使用 GitHub Actions 配置后端 CI/CD含部署到服务器
本文档介绍如何在 GitHub 仓库中配置 CI/CD将 PROJECT_NAME 项目自动构建并部署到你的服务器。文末附有经过注释的 deploy.yml 工作流示例已去除敏感信息仅引用 Secrets 名称。
前置条件
服务器已安装 Docker 与 Docker Compose插件。服务器具备 SSH 访问能力账号、密码或密钥。服务器目标目录可写例如/opt/PROJECT_NAME。域名/反向代理可选若通过 Nginx 暴露 443/80 端口需提前配置好。
仓库 Secrets 与变量配置
在 GitHub 仓库中添加以下 Secrets路径Repository → Settings → Secrets and variables → Actions → New repository secret
CONFIG_YAML_PROD生产环境配置文件内容完整的 configs/config.prod.yaml 文本。SSH_HOST服务器 IP 或域名。SSH_PORTSSH 端口通常是 22。SSH_USERSSH 用户名如 root。SSH_PASSWORDSSH 密码若使用私钥方式可改用 key 形式的 action。REMOTE_PATH服务器部署目录例如 /opt/jump3-end-v2。
说明敏感值一律存放在 Secrets 中不要提交到仓库。
工作流触发策略
示例工作流在 push 到 main 分支时触发。你也可以按需改成手动触发或仅在打 tag 时触发。
环境选择与配置文件
代码中已支持 APP_ENV 与 CONFIG_PATH 两种方式选择配置文件。本示例将容器环境固定为 APP_ENVprod并通过 Secrets 注入生成 configs/config.prod.yaml。如果你需要 Dev/Staging 环境建议为每个环境建立独立的 Environment 与 Secrets并复制一份 workflow或使用 environment: 切换。
工作流主要步骤
检出代码。设置 Buildx 并构建 Docker 镜像linux/amd64导出为 your-project-server.tar。将 CONFIG_YAML_PROD 写入 configs/config.prod.yaml同时拷贝一份到 configs/config.dev.yaml 以兜底。通过 SCP 上传 your-project-server.tar、docker-compose.yml 与配置文件到服务器的 REMOTE_PATH。通过 SSH 在服务器上执行 docker compose downdocker load jump3-server.tardocker compose up -d简单健康检查
故障排查建议
上传报错 tar: empty archive确认 SCP action 的 source 传参为逗号分隔单行并确保前面步骤确实生成了文件。权限问题确保服务器目标目录存在且可写日志目录 logs 可设为 chmod 777 logs。镜像平台若服务器为 amd64构建需加 --platform linux/amd64。端口/防火墙确认 8080 或反代端口已放行。环境变量生产强制 APP_ENVprod避免默认 dev。 deploy.yml带注释敏感信息由 Secrets 提供
name: Deployon:push:branches: [ main ] # 推送到 main 分支时触发jobs:deploy:runs-on: ubuntu-lateststeps:- name: Checkoutuses: actions/checkoutv4- name: Set up Docker Buildxuses: docker/setup-buildx-actionv3- name: Build docker image (linux/amd64)run: |docker build --platform linux/amd64 -t your-project-server:latest . # 构建镜像将 your-project 替换为你的项目名docker save your-project-server:latest your-project-server.tar # 导出镜像- name: Prepare config files from secretshell: bashrun: |mkdir -p configs# 将机密里的生产配置写入文件printf %s $CONFIG_YAML configs/config.prod.yaml# 同步一份为 dev 以兜底容器内默认 dev 时也能跑cp configs/config.prod.yaml configs/config.dev.yamlenv:CONFIG_YAML: ${{ secrets.CONFIG_YAML_PROD }} # 从 Secrets 注入完整 YAML 文本- name: Upload files to server (image, compose, configs)uses: appleboy/scp-actionv0.1.7with:host: ${{ secrets.SSH_HOST }} # 服务器地址来自 Secretsusername: ${{ secrets.SSH_USER }} # SSH 用户password: ${{ secrets.SSH_PASSWORD }} # SSH 密码port: ${{ secrets.SSH_PORT }} # SSH 端口source: your-project-server.tar,docker-compose.yml,configs/config.prod.yaml,configs/config.dev.yaml # 逗号分隔target: ${{ secrets.REMOTE_PATH }} # 服务器目录overwrite: true # 覆盖同名文件- name: Deploy on server via SSHuses: appleboy/ssh-actionv1.2.0with:host: ${{ secrets.SSH_HOST }}username: ${{ secrets.SSH_USER }}password: ${{ secrets.SSH_PASSWORD }}port: ${{ secrets.SSH_PORT }}script: |set -euo pipefailcd ${{ secrets.REMOTE_PATH }}mkdir -p configs logschmod 777 logs || true# 先下线旧容器再加载新镜像并启动docker compose down || truedocker load your-project-server.tardocker compose up -d# 简易健康检查可按需替换为 curl https://.../healthdocker compose pscurl -sf http://127.0.0.1:8080/health || true与 docker-compose.yml 的配合
当前 docker-compose.yml 中推荐包含以下内容固定生产环境并授权日志目录将镜像名、容器名替换为 PROJECT_NAME
services:api:image: your-project-server:latestcontainer_name: your-project-apiports:- 8080:8080environment:- GIN_MODErelease- APP_ENVprod # 固定使用生产配置volumes:- ./configs:/app/configs:ro # 将服务器上的配置目录挂载到容器- ./logs:/app/logsuser: 0:0restart: unless-stoppedhealthcheck:test: [CMD, curl, -f, http://localhost:8080/health]interval: 30stimeout: 10sretries: 3start_period: 40s小结
将敏感配置放入 GitHub Secrets流水线运行时再渲染成文件。通过 SCP/SSH 将镜像与配置投递到服务器并用 Docker Compose 管理生命周期。若有多环境复制工作流并切换 Secrets 或使用 GitHub Environments 管理。如要查看调试信息到github对应项目下的Actions中即可查看、排错。