# Ubuntu + Docker Compose(腾讯云)自动化发布方案 本项目已经支持“前端+后端+MySQL”同机 Docker Compose 部署:使用 `docker-compose.prod.yml`,对外只暴露 `80` 端口(由 Nginx 托管前端并反向代理 `/api`)。 如果你有多个服务,不想每次 SSH 登录手动执行 `git pull` / `docker compose up`,建议用下面两种自动化方案之一。 ## 方案 A(推荐):Portainer Stack(GitOps)自动更新 特点:不需要额外写 CI;适合多服务统一管理;支持“轮询仓库”或“Webhook 触发更新”。 ### 1) 服务器安装 Portainer(一次性) ```bash docker volume create portainer_data docker run -d \ --name portainer \ --restart=always \ -p 9443:9443 \ -p 9000:9000 \ -v /var/run/docker.sock:/var/run/docker.sock \ -v portainer_data:/data \ portainer/portainer-ce:latest ``` 访问:`https://<服务器IP>:9443`,首次进入创建管理员账号。 ### 2) 在 Portainer 创建 Stack(从 Git 拉取) - Stacks → Add stack - Build method 选 Git repository - Repository URL:`http://47.95.203.241:3000/ReeseLin/query-database.git` - Compose path:`docker-compose.prod.yml` - 选择分支:`main` ### 3) 开启自动更新 二选一: - 轮询更新:开启 “Auto update”,设置间隔(例如 1-5 分钟) - Webhook 更新:开启 Webhook,复制 URL。以后每次 push 后调用这个 URL,即可自动拉取并重启 ### 4) 建议的安全组 - 对外开放:`80`、`9443`(Portainer 管理台) - 如果只在内网管理 Portainer:建议把 `9443` 限制为你自己的 IP 白名单 ## 方案 B(更工程化):腾讯云 TCR + CI 构建镜像 + 服务器自动 pull 特点:构建在 CI 完成,服务器只负责 pull/重启;可回滚;更适合团队/正式环境。 高层流程: 1. push 到 `main` 2. CI 构建镜像:`web`、`api` 3. push 到腾讯云 TCR 4. 服务器 `docker compose pull && docker compose up -d` 建议: - `web`/`api` 镜像 tag 用 commit SHA - 生产 `docker-compose` 改为引用镜像(不再在服务器 build) 如果你要走这条路线,我可以把: - 生产 compose 的“镜像版”文件 - CI 配置(含 TCR 登录/构建/推送/远程重启) 直接补进仓库。 ## 方案 C(最轻量):服务器定时拉取(systemd timer) 特点:无入站端口,无 CI;缺点是“定时检查”不是严格实时。 思路:每 1 分钟执行一次: `git fetch` → 检测远端是否变化 → 变化则 `docker compose up -d --build`