如何基于Drone CI部署Docker化Rails老应用(替代Capistrano)
解决方案:Drone CI 部署 Docker 化 Rails 应用到多环境
基于你的场景,完全可以用 Drone CI 配合 Docker 生态替代 Capistrano,无需自定义 Shell 脚本,以下是具体实现步骤:
1. 核心流程梳理
Drone CI 流水线分为两个核心阶段:
- 构建 Docker 镜像并推送到自有镜像仓库
- 根据代码分支触发对应环境(Staging/UAT/Production)的部署操作
2. 配置 Drone CI 镜像构建流水线
在项目根目录创建/修改 .drone.yml,首先定义镜像构建推送的基础流程:
kind: pipeline type: docker name: build-and-push-image # 触发条件:仅指定分支提交时执行 trigger: branch: - develop - uat - master steps: - name: build-push-image image: plugins/docker settings: # 替换为你的自有镜像仓库地址和应用名称 repo: your-registry-domain/rails-app # 生成镜像标签:分支名+短commit哈希,同时保留分支名作为标签 tags: - "${DRONE_BRANCH}-${DRONE_COMMIT_SHA:0:8}" - "${DRONE_BRANCH}" registry: your-registry-domain # 从Drone Secrets中读取镜像仓库的账号密码(避免硬编码) username: from_secret: docker_registry_username password: from_secret: docker_registry_password
3. 分环境部署流水线配置
为每个环境单独定义部署流水线,通过分支触发对应环境的部署操作:
3.1 Staging 环境部署
kind: pipeline type: ssh name: deploy-staging trigger: branch: - develop # Staging服务器连接信息(从Drone Secrets读取) server: host: from_secret: staging_server_host user: from_secret: staging_server_user key: from_secret: staging_server_ssh_key # 推荐用SSH密钥认证,更安全 steps: - name: update-and-restart-app commands: # 拉取对应分支的镜像 - docker pull your-registry-domain/rails-app:develop # 切换到服务器上的应用目录(提前配置好docker-compose.yml) - cd /opt/staging/rails-app # 重启服务 - docker-compose down - docker-compose up -d
3.2 UAT 环境部署
kind: pipeline type: ssh name: deploy-uat trigger: branch: - uat server: host: from_secret: uat_server_host user: from_secret: uat_server_user key: from_secret: uat_server_ssh_key steps: - name: update-and-restart-app commands: - docker pull your-registry-domain/rails-app:uat - cd /opt/uat/rails-app - docker-compose down - docker-compose up -d
3.3 Production 环境部署
生产环境建议增加触发限制(仅打Tag时部署),同时添加数据库迁移等必要步骤:
kind: pipeline type: ssh name: deploy-production trigger: branch: - master # 可选:仅当打Git Tag时触发生产部署,更严谨 event: - tag server: host: from_secret: prod_server_host user: from_secret: prod_server_user key: from_secret: prod_server_ssh_key steps: - name: backup-db # 生产环境建议先备份数据库 commands: - cd /opt/prod/rails-app - docker-compose exec db pg_dump -U your-db-user your-db-name > backup-$(date +%Y%m%d%H%M).sql - name: update-and-restart-app commands: # 用Tag作为镜像标签,避免分支标签的不确定性 - docker pull your-registry-domain/rails-app:${DRONE_TAG} - cd /opt/prod/rails-app - docker-compose down - docker-compose up -d # 执行数据库迁移(根据实际情况选择是否启用) - docker-compose exec app rails db:migrate
4. 移除 Capistrano 相关配置
完成 Drone 配置后,即可彻底移除 Capistrano:
- 删除项目中的
config/deploy目录、config/deploy.rb文件 - 从
Gemfile中移除所有 Capistrano 相关依赖(如capistrano-rails、capistrano-bundler等) - 执行
bundle install更新依赖
关键注意事项
- 环境变量管理:不同环境的敏感配置(数据库连接、Rails密钥等),建议放在服务器的
.env文件中,不要硬编码到docker-compose.yml - 镜像标签策略:生产环境优先使用 Git Tag 作为镜像标签,避免分支标签的变动风险
- Docker 权限:目标服务器的部署用户需要加入
docker组,拥有执行 Docker 命令的权限 - 健康检查:可以在
docker-compose.yml中为 Rails 服务添加健康检查,确保部署成功后服务正常
内容的提问来源于stack exchange,提问作者Mr.Muhammad Ramzan
相关产品推荐
相关产品推荐

