gpt4 book ai didi

django - AWS ECS 使用 docker 和 nginx,如何将我的 nginx 配置放入容器中?

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

我正在尝试使用 Nginx、unicorn 和 Django 在 AWS 中设置 ECS 集群。

我已将 docker-compose.yml 转换为 ECS 任务,但想知道如何将我的 nginx 配置放入容器中?

这是我在 json 中的任务

我已经为文件创建了一些挂载点,但不确定如何在那里获取配置。
当我从本地服务器运行 docker 时,nginx 配置文件是 compose 文件的本地文件,显然在 aws 中不是?

如何通过 ecs 将 nginx 配置放入包含?

{
"containerDefinitions": [
{
"volumesFrom": null,
"memory": 300,
"extraHosts": null,
"dnsServers": null,
"disableNetworking": null,
"dnsSearchDomains": null,
"portMappings": [
{
"containerPort": 8000,
"protocol": "tcp"
}
],
"hostname": null,
"essential": true,
"entryPoint": null,
"mountPoints": [
{
"containerPath": "/static",
"sourceVolume": "_Static",
"readOnly": null
}
],
"name": "it-app",
"ulimits": null,
"dockerSecurityOptions": null,
"environment": null,
"links": null,
"workingDirectory": "/itapp",
"readonlyRootFilesystem": null,
"image": "*****.amazonaws.com/itapp",
"command": [
"bash",
"-c",
"",
"python manage.py collectstatic --noinput && python manage.py makemigrations && python manage.py migrate && gunicorn itapp.wsgi -b 0.0.0.0:8000"
],
"user": null,
"dockerLabels": null,
"logConfiguration": null,
"cpu": 0,
"privileged": null
},
{
"volumesFrom": null,
"memory": 300,
"extraHosts": null,
"dnsServers": null,
"disableNetworking": null,
"dnsSearchDomains": null,
"portMappings": [
{
"hostPort": 80,
"containerPort": 8000,
"protocol": "tcp"
}
],
"hostname": null,
"essential": true,
"entryPoint": null,
"mountPoints": [
{
"containerPath": "/etc/nginx/conf.d",
"sourceVolume": "_ConfigNginx",
"readOnly": null
},
{
"containerPath": "/static",
"sourceVolume": "_Static",
"readOnly": null
}
],
"name": "nginx",
"ulimits": null,
"dockerSecurityOptions": null,
"environment": null,
"links": [
"it-app"
],
"workingDirectory": null,
"readonlyRootFilesystem": null,
"image": "nginx:latest",
"command": null,
"user": null,
"dockerLabels": null,
"logConfiguration": null,
"cpu": 0,
"privileged": null
}
],
"placementConstraints": [],
"volumes": [
{
"host": {
"sourcePath": "./config/nginx"
},
"name": "_ConfigNginx"
},
{
"host": {
"sourcePath": "./static"
},
"name": "_Static"
}
],
"family": "it-app-task",
"networkMode": "bridge"
}

ngnix 配置
upstream web {  
ip_hash;
server web:8000;
}
server {
location /static/ {
autoindex on;
alias /static/;
}
location / {
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
proxy_pass http://web/;
}
listen 8000;
server_name localhost;
}

最佳答案

据我所知(在撰写本文时),除了使用环境变量之外,没有“直接”的方法可以将配置注入(inject) ECS 中的容器。

尽管如此,这里有一些你可以做的事情:

  • 使用 AWS CLI 从 S3 获取 nginx 配置。
  • 部署分布式键值存储,例如 etcdConsul到您的 ECS 集群,然后从中存储和检索您需要的所有配置。这些工具通常用于共享配置和服务发现。如果您打算将 ECS 用于环境中的所有内容,这可能是一个好主意。关于 nginx,例如,您可以设置 nginx + consul + registrator + consul 模板,只需在 Consul 中更新 nginx 配置,即可自动重新加载容器内的 nginx 配置。 Here是一个例子。


  • 好吧,只是说...我希望有一天 AWS 提供类似 ConfigMap 的东西和 Secrets在 Kubernetes 上可用。在 Kubernetes 中,就这么简单:
  • 将 nginx 配置添加到 Kubernetes 集群:kubectl create configmap nginx-configmap --from-file=nginx.conf
  • 在您的 Pod 定义(如您的“ECS 任务定义”)中定义您希望 Kubernetes 将配置注入(inject)您的容器:

  • volumeMounts:
    - name: nginx-config-volume
    mountPath: /etc/nginx
    ...
    volumes:
    - name: nginx-config-volume
    configMap:
    name: nginx-configmap

    就是这样!

    关于django - AWS ECS 使用 docker 和 nginx,如何将我的 nginx 配置放入容器中?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46132954/

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