gpt4 book ai didi

django - AWS : CodeDeploy for a Docker Compose project?

转载 作者:行者123 更新时间:2023-12-04 17:33:21 25 4
gpt4 key购买 nike

我目前的目标是让 Travis 在将拉取请求成功合并到我们的 Git 主分支后部署我们的 Django+Docker-Compose 项目。自从 Travis 内置支持以来,我已经完成了一些设置 AWS CodeDeploy 的工作。当我进入 AppSpec 和实际部署部分时,起初我尝试让 AfterInstall 脚本执行 docker-compose build然后让 ApplicationStart 脚本执行 docker-compose up .从 Web 提取图像的容器是我们的 PostgreSQL 容器(命名为 db,图像 aidanlister/postgres-hstore,它是通常的 postgres 图像加上 hstore 扩展),Redis 容器(使用 redis 图像)和Selenium 容器(图片 selenium/standalone-firefox)。其他两个容器,webworker ,分别是 Django 服务器和 Celery worker,使用相同的 Dockerfile 来构建镜像。主要命令是:

CMD paver docker_run

它使用 pavement.py文件:
from paver.easy import task
from paver.easy import sh

@task
def docker_run():
migrate()
collectStatic()
updateRequirements()
startServer()

@task
def migrate():
sh('./manage.py makemigrations --noinput')
sh('./manage.py migrate --noinput')

@task
def collectStatic():
sh('./manage.py collectstatic --noinput')

# find any updates to existing packages, install any new packages
@task
def updateRequirements():
sh('pip install --upgrade -r requirements.txt')

@task
def startServer():
sh('./manage.py runserver 0.0.0.0:8000')

这是每次合并拉取请求时我(认为我)需要做的事情:
  • 让 Travis 使用 CodeDeploy 部署更改,基于 deploy .travis.yml中的部分为我们的 CodeDeploy 设置量身定制
  • 使用我们的 docker-compose.yml 成功部署后在 AWS 上启动我们的 Docker 容器

  • 我如何让这第二步发生?我很确定 ECS 实际上不是这里需要的。我现在的状态是我可以用 sudo service docker start 启动 Docker但我无法获得 docker-compose up要成功。尽管部署报告为“成功”,但这仅仅是因为 docker-compose up命令在验证服务部分脚本的后台运行。事实上,当我尝试做 docker-compose up手动 ssh 进入 EC2 实例时,我无法在 CMD paver docker_run 之前构建一个容器Dockerfile 的一部分。

    最佳答案

    这花了很长时间才解决,但我终于找到了一种方法,可以在没有 Docker-Machine 或 ECS 的情况下使用 CodeDeploy 部署 Django+Docker-Compose 项目。

    重要的一件事是制作一个备用 docker-compose.yml排除了selenium容器——它所做的只是导致问题并且仅对本地测试有用。此外,选择可以处理构建容器的实例类型也很重要。无法从我们的 Dockerfile 构建容器的原因是实例根本没有内存来完成构建。代替 t1.micro 实例,m3.medium 是有效的。拥有足够的磁盘空间也很重要——8GB 太小了。为了安全起见,256GB 将是理想的。

    运行安装后脚本很重要 service docker start在进行必要的 Docker 安装和设置(包括安装 Docker-Compose)时。这是为了显式地开始运行 Docker 守护进程——没有这个命令,你会得到错误 Could not connect to Docker daemon .安装 Docker-Compose 时,重要的是放在 /opt/bin/以便通过 /opt/bin/docker-compose 使用二进制文件.放入/usr/local/bin有问题(我不完全记得是什么问题,但它与 Amazon Linux AMI 的特定 Linux 发行版有关)。 After Install 脚本需要以 root 身份运行(runas: rootappspec.yml AfterInstall 部分)。

    此外,部署的最后阶段是使用 docker-compose up 启动容器。 (更具体地说 /opt/bin/docker-compose -f docker-compose-aws.yml up ),需要在后台运行,标准输入和标准输出重定向到 /dev/null :

    /opt/bin/docker-compose -f docker-compose-aws.yml up -d > /dev/null 2> /dev/null < /dev/null &

    否则,一旦服务器启动,部署就会挂起,因为最终的脚本命令(在我的 appspec.yml 的 ApplicationStart 部分中)没有退出。这可能会在默认部署超时 1 小时后导致部署失败。

    如果一切顺利,那么最终可以通过实例的公共(public) DNS 和浏览器中的端口访问该站点。

    关于django - AWS : CodeDeploy for a Docker Compose project?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34662371/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com