gpt4 book ai didi

django - 带有 Django 的 AWS Copilot 从未完成部署

转载 作者:行者123 更新时间:2023-12-04 12:36:09 26 4
gpt4 key购买 nike

我已经按照这个简短的指南使用 docker 创建了一个 django 应用程序 https://docs.docker.com/compose/django/

然后按照 copilot 指令将容器推送到 ECS: https://aws.amazon.com/blogs/containers/introducing-aws-copilot/

我还使用这个样本来测试所有内容——结果很好: https://github.com/aws-samples/aws-copilot-sample-service部署完成并输出 URL 端点。

在我的例子中,一切都已成功构建,但是一旦部署了测试环境,它就会持续构建:

72ff4719 size: 3055
⠏ Deploying load-bal:7158348 to test.

永远不会结束。我什至将我的 requirements.txt 缩小到最低限度。

我的 Dockerfile

FROM python:3.7.4
ENV PYTHONUNBUFFERED=1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
EXPOSE 80
COPY . /code/

docker-compose.yml

version: "3.8"

services:
db:
image: postgres
environment:
- POSTGRES_DB=postgres
- POSTGRES_USER=postgres
- POSTGRES_PASSWORD=postgres
web:
build: .
command: python manage.py runserver 0.0.0.0:8000
volumes:
- .:/code
ports:
- "8000:8000"
depends_on:
- db

需求.txt

Django==3.0.8
djangorestframework==3.11.0
gunicorn==20.0.4
pipenv==2020.6.2
psycopg2-binary==2.8.5
virtualenv==16.7.6

我遵循的说明:

sudo docker-compose run web django-admin startproject composeexample 。

成功创建Django App

副驾驶初始化

为应用程序和负载均衡器设置命名

选择创建测试环境

一切都成功构建,然后就坐在这里。我尝试了多种变体,但唯一可行的是在不涉及 django 的情况下进行副驾驶教学。

6f3494a64128: Pushed 
cfe650cc4def: Pushed
a477d6671cc7: Pushed
90df760355a7: Pushed
574ea6c52bdd: Pushed
d1573fad78d1: Pushed
14c1ff636882: Pushed
48ebd1638acd: Pushed
31f78d833a92: Pushed
2ea751c0f96c: Pushed
7a435d49206f: Pushed
9674e3075904: Pushed
831b66a484dc: Pushed
ini: digest: sha256:b7460876bc84b1a26e7513fa6d17b5bffd5560ae958a933984376ed2c9fe53f3 size: 3052
⠏ Deploying aiinterview-lb:ini to test.

最佳答案

tl;dr 本教程使用的 Dockerfile 对于 Copilot 的目的来说是不完整的。它需要一个额外的行包含

CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

EXPOSE 指令应更新为 8000。由于 Copilot 不识别 Docker Compose 语法并且 Dockerfile 中没有指定命令或入口点,因此镜像永远不会以 Copilot 的配置设置启动。

详情

AWS Copilot 是围绕“服务”设计的,这些“服务”包括图像、可能的 sidecar 和额外的存储资源。这意味着它的基本配置单元是 Docker 镜像和服务 list 。它本身不读取 Docker Compose 语法,因此 Copilot 知道的所有配置都是在 Dockerfile 或镜像以及每个服务的 manifest.ymladdons 中指定的配置目录。

在此示例中,专为与 Docker Compose 一起使用而设计,Dockerfile 没有任何类型的 CMDENTRYPOINT 指令,因此构建的镜像被推送到Copilot 的 Amazon ECR 永远不会启动。本教程将图像的命令 (python manage.py runserver 0.0.0.0:8000) 指定为 docker-compose.yml 中的覆盖,因此您需要更新您的Dockerfile 到以下内容:

FROM python:3.7.4
ENV PYTHONUNBUFFERED=1
RUN mkdir /code
WORKDIR /code
COPY requirements.txt /code/
RUN pip install -r requirements.txt
EXPOSE 8000
COPY . /code/
CMD ["python", "manage.py", "runserver", "0.0.0.0:8000"]

请注意,我已将 EXPOSE 指令更改为 8000 以匹配来自 docker-compose.yml 的命令,并添加了 web 中指定的命令 部分作为 CMD 指令添加到 Dockerfile。

你也想运行

copilot init --image postgres --name db --port 5432 --type "Backend Service" --deploy

这将创建在您的 docker-compose.yml 中指定的数据库服务。您可能需要先运行它,这样您的 Web 容器才不会在搜索凭据时启动失败。

一些其他注意事项:

  • 您可以通过在 db 的 list 文件中添加 variablessecrets 来指定您的数据库凭据,该 list 文件是在您的工作区 ./copilot/db/manifest.yml。有关如何向 SSM 添加 secret 并使其可供您的 Copilot 服务访问的更多信息,check out our documentation
variables: 
POSTGRES_DB: postgres
POSTGRES_USER: postgres

secrets:
POSTGRES_PASSWORD: POSTGRES_PASSWORD
  • 您的数据库端点可通过 db.$COPILOT_SERVICE_DISCOVERY_ENDPOINT 的服务发现进行访问——您可能需要更新连接到数据库的服务代码以反射(reflect)此端点而不是 localhost 或 0.0.0.0。

关于django - 带有 Django 的 AWS Copilot 从未完成部署,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64627462/

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