2.5 KiB
2.5 KiB
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(一次性)
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/重启;可回滚;更适合团队/正式环境。
高层流程:
- push 到
main - CI 构建镜像:
web、api - push 到腾讯云 TCR
- 服务器
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