zur*_*fyx 5 deployment continuous-deployment docker docker-compose
我正在寻找一种方法将docker-compose图像和/或构建部署到远程服务器,特别是但不限于DigitalOcean VPS.
docker-compose目前正在开展CircleCI持续集成服务,它会自动验证测试是否通过.但是,它应该在成功时自动部署.
我docker-compose.yml看起来像这样:
version: '2'
services:
web:
image: name/repo:latest
ports:
- "3000:3000"
volumes:
- /app/node_modules
- .:/app
depends_on:
- mongo
- redis
mongo:
image: mongo
command: --smallfiles
volumes:
- ./data/mongodb:/data/db
redis:
image: redis
volumes:
- ./data/redis:/data
Run Code Online (Sandbox Code Playgroud)
docker-compose.override.yml:
version: '2'
services:
web:
build: .
Run Code Online (Sandbox Code Playgroud)
circle.yml 相关部分:
deployment:
latest:
branch: master
commands:
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker push name/repo:$CIRCLE_SHA1
- docker push name/repo:latest
Run Code Online (Sandbox Code Playgroud)
你docker-compose和circle配置已经看起来很不错了.
您docker-compose.yml已经设置好从Docker Hub收集图像,该图像在测试通过后上传.我们将在远程服务器上使用此图像,而不是每次都建立图像(这需要很长时间),我们将使用这个已经准备好的图像.
你做的很好进入分离build: .成一个docker-compose.override.yml文件,作为优先问题可能会出现,如果我们使用一个docker-compose.prod.yml文件.
有多种方法可以完成部署.最受欢迎的可能是SSH和Webhooks.
我们将使用SSH.
编辑您的circle.yml配置以执行额外步骤,以加载我们的.scripts/deploy.shbash文件:
deployment:
latest:
branch: master
commands:
- docker login -e $DOCKER_EMAIL -u $DOCKER_USER -p $DOCKER_PASS
- docker push name/repo:$CIRCLE_SHA1
- docker push name/repo:latest
- .scripts/deploy.sh
Run Code Online (Sandbox Code Playgroud)
deploy.sh 将包含一些通过SSH连接到我们的远程服务器的指令,并更新存储库和Docker镜像并重新加载Docker Compose服务.
在执行之前,您应该有一个包含项目文件夹(即git clone https://github.com/zurfyx/my-project)的远程服务器,并且安装了Docker和Docker Compose.
deploy.sh
#!/bin/bash
DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"
(
cd "$DIR/.." # Go to project dir.
ssh $SSH_USERNAME@$SSH_HOSTNAME -o StrictHostKeyChecking=no <<-EOF
cd $SSH_PROJECT_FOLDER
git pull
docker-compose pull
docker-compose stop
docker-compose rm -f
docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d
EOF
)
Run Code Online (Sandbox Code Playgroud)
注意:最后一个EOF没有缩进.这就是HEREDOC的工作方式.
deploy.sh步骤说明:
ssh $SSH_USERNAME@$SSH_HOSTNAME:通过SSH连接到远程主机.-o StrictHostChecking=no避免SSH询问我们是否信任服务器.cd $SSH_PROJECT_FOLDER:浏览项目文件夹(你收集的文件夹git clone ...)git pull:更新项目文件夹.保持docker-compose/Dockerfile更新以及依赖于某些源代码文件的任何共享卷非常重要.docker-compose stop:我们刚刚下载了远程依赖项.停止当前正在运行的docker-compose服务.docker-compose rm -f:删除docker-compose服务.这一步非常重要,否则我们将重用旧卷.docker-compose -f docker-compose.yml -f docker-compose.prod.yml up -d.执行你在分离模式下docker-compose.prod.yml扩展的docker-compose.yml.在CI上,您需要填写以下环境变量(部署脚本使用):
$SSH_USERNAME:您的SSH用户名(即root)$SSH_HOSTNAME:您的SSH主机名(即stackoverflow.com)$SSH_PROJECT_FOLDER:存储项目的文件夹(相对或绝对$SSH_USERNAME登录的位置.(即my-project /)SSH密码怎么样?在这种情况下,CircleCI提供了一种存储SSH密钥的方法,因此在通过SSH登录时不再需要密码.
否则只需编辑deploy.shSSH连接,如下所示:
sshpass -p your_password ssh user@hostname
Run Code Online (Sandbox Code Playgroud)
更多关于SSH密码的信息.
总之,我们所要做的就是创建一个与远程服务器连接的脚本,让它知道源代码已经更新.好吧,并执行适当的升级步骤.
仅供参考,这与替代Webhooks方法的工作方式类似.
| 归档时间: |
|
| 查看次数: |
2327 次 |
| 最近记录: |