#django #docker #nginx #amazon-ecs
#django #docker #nginx #amazon-ecs
Вопрос:
В настоящее время я развертываю контейнерное приложение Django на Amazon ECS с использованием uWSGI и nginx, но у меня возникли некоторые проблемы с тем, что мой прокси-сервер находит часть статического содержимого. Когда я тестирую развертывание локального прокси-сервера с помощью docker-compose, он работает нормально, но не тогда, когда он развернут через ECS. Вот мой settings.py
:
# Static files (CSS, JavaScript, Images)
STATIC_URL = '/static/static/'
MEDIA_URL = '/static/media/'
STATIC_ROOT = '/vol/web/static'
MEDIA_ROOT = '/vol/web/media'
STATICFILES_DIRS = [
# '/var/www/static/',
os.path.join(BASE_DIR, 'core/static'),
]
Вот моя конфигурация прокси:
server {
listen ${LISTEN_PORT};
location /static {
alias /vol/static;
}
location / {
uwsgi_pass ${APP_HOST}:${APP_PORT};
include /etc/nginx/uwsgi_params;
client_max_body_size 10M;
}
}
Определение контейнера для ECS:
[
{
"name": "app",
"image": "${app_image}",
"essential": true,
"memoryReservation": 256,
"environment": [
{"name": "DJANGO_SECRET_KEY", "value": "${django_secret_key}"},
{"name": "DB_HOST", "value": "${db_host}"},
{"name": "DB_NAME", "value": "${db_name}"},
{"name": "DB_USER", "value": "${db_user}"},
{"name": "DB_PASS", "value": "${db_pass}"},
{"name": "ALLOWED_HOSTS", "value": "${allowed_hosts}"}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "${log_group_name}",
"awslogs-region": "${log_group_region}",
"awslogs-stream-prefix": "app"
}
},
"portMappings": [
{
"containerPort": 9000,
"hostPort": 9000
}
],
"mountPoints": [
{
"readOnly": false,
"containerPath": "/vol/web",
"sourceVolume": "static"
}
]
},
{
"name": "proxy",
"image": "${proxy_image}",
"essential": true,
"portMappings": [
{
"containerPort": 8000,
"hostPort": 8000
}
],
"memoryReservation": 256,
"environment": [
{"name": "APP_HOST", "value": "127.0.0.1"},
{"name": "APP_PORT", "value": "9000"},
{"name": "LISTEN_PORT", "value": "8000"}
],
"logConfiguration": {
"logDriver": "awslogs",
"options": {
"awslogs-group": "${log_group_name}",
"awslogs-region": "${log_group_region}",
"awslogs-stream-prefix": "proxy"
}
},
"mountPoints": [
{
"readOnly": true,
"containerPath": "/vol/static",
"sourceVolume": "static"
}
]
}
]
Некоторые образцы журналов при локальном развертывании:
proxy_1 | 172.18.0.1 - - [24/Nov/2020:15:58:01 0000] "POST /reader/<removed name>-readings/S87ktUMTff8/import HTTP/1.1" 302 0 "http://127.0.0.1:8000/reader/<removed name>-readings/S87ktUMTff8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
app_1 | [pid: 14|app: 0|req: 2/10] 172.18.0.1 () {60 vars in 1830 bytes} [Tue Nov 24 15:58:01 2020] POST /reader/<removed name>-readings/S87ktUMTff8/import => generated 0 bytes in 492 msecs (HTTP/1.1 302) 7 headers in 231 bytes (1 switches on core 0)
app_1 | [pid: 13|app: 0|req: 7/11] 172.18.0.1 () {54 vars in 1591 bytes} [Tue Nov 24 15:58:01 2020] GET /reader/<removed name>-readings/S87ktUMTff8 => generated 16879 bytes in 54 msecs (HTTP/1.1 200) 7 headers in 350 bytes (1 switches on core 0)
proxy_1 | 172.18.0.1 - - [24/Nov/2020:15:58:01 0000] "GET /reader/<removed name>-readings/S87ktUMTff8 HTTP/1.1" 200 16879 "http://127.0.0.1:8000/reader/<removed name>-readings/S87ktUMTff8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
proxy_1 | 172.18.0.1 - - [24/Nov/2020:15:58:01 0000] "GET /static/static/core/css/core.css HTTP/1.1" 304 0 "http://127.0.0.1:8000/reader/<removed name>-readings/S87ktUMTff8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
proxy_1 | 172.18.0.1 - - [24/Nov/2020:15:58:02 0000] "GET /static/static/assets/css/bootstrap.min.css HTTP/1.1" 304 0 "http://127.0.0.1:8000/reader/<removed name>-readings/S87ktUMTff8" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
Примеры журналов из CloudWatch:
2020-11-23T14:45:41.920-05:00
2020/11/23 19:45:41 [error] 10#10: *224 open() "/vol/static/static/core/images/homepageLogo.png" failed (2: No such file or directory), client: <removed IP>, server: , request: "GET /static/static/core/images/homepageLogo.png HTTP/1.1", host: "<removed IP>:8000", referrer: "http://<removed IP>:8000/"
2020/11/23 19:45:41 [error] 10#10: *224 open() "/vol/static/static/core/images/homepageLogo.png" failed (2: No such file or directory), client: <removed IP>, server: , request: "GET /static/static/core/images/homepageLogo.png HTTP/1.1", host: "<removed IP>:8000", referrer: "http://<removed IP>:8000/"
2020-11-23T14:45:41.920-05:00
<removed IP> - - [23/Nov/2020:19:45:41 0000] "GET /static/static/core/images/homepageLogo.png HTTP/1.1" 404 555 "http://<removed IP>:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
<removed IP> - - [23/Nov/2020:19:45:41 0000] "GET /static/static/core/images/homepageLogo.png HTTP/1.1" 404 555 "http://<removed IP>:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
2020-11-23T14:45:41.970-05:00
2020/11/23 19:45:41 [error] 10#10: *224 open() "/vol/static/static/core/css/homepage.css" failed (2: No such file or directory), client: <removed IP>, server: , request: "GET /static/static/core/css/homepage.css HTTP/1.1", host: "<removed IP>:8000", referrer: "http://<removed IP>:8000/"
2020/11/23 19:45:41 [error] 10#10: *224 open() "/vol/static/static/core/css/homepage.css" failed (2: No such file or directory), client: <removed IP>, server: , request: "GET /static/static/core/css/homepage.css HTTP/1.1", host: "<removed IP>:8000", referrer: "http://<removed IP>:8000/"
2020-11-23T14:45:41.970-05:00
<removed IP> - - [23/Nov/2020:19:45:41 0000] "GET /static/static/core/css/homepage.css HTTP/1.1" 404 555 "http://<removed IP>:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
<removed IP> - - [23/Nov/2020:19:45:41 0000] "GET /static/static/core/css/homepage.css HTTP/1.1" 404 555 "http://<removed IP>:8000/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_14_6) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/86.0.4240.111 Safari/537.36" "-"
Дайте мне знать, если есть какая-либо дополнительная информация, которую я мог бы предоставить.
Любая помощь будет с благодарностью! Заранее спасибо 🙂
Комментарии:
1.Похоже, что настройка монтирования тома требует некоторого внимания. Если вы можете проверить, что файлы (png, css) доступны на
/vol/static/static/core/images
/vol/static/static/core/css
.
Ответ №1:
итак, я наконец понял, что было не так. Для тех, кто испытывает нечто подобное, это было потому, что я не установил в своем ALLOWED_HOSTS в Django разрешение локального IP-адреса запущенной задачи, и, следовательно, он продолжал отклонять запрос на проверку работоспособности балансировщиков нагрузки.
Я добавил это в свой settings.py
:
from socket import gethostname, gethostbyname
if os.environ.get('AWS_EXECUTION_ENV'):
ALLOWED_HOSTS.append(gethostbyname(gethostname()))