Неконтейнерный Nginx не обслуживает файлы из докер-контейнера django
Я так близок к решению этой проблемы, что это на самом деле болезненно, и поэтому любая помощь была бы потрясающей.
Новичок в Django. Новичок в Nginx. Новичок в Docker. Но люблю сложные задачи. Имею виртуальный сервер на DigitalOcean.
После ряда руководств и чтения бесконечной документации у меня получилось следующее, проблема в том, что nginx обслуживает wesbite, но не staticfiles. Я уверен, что это как-то связано с моим settings.py или nginx.conf, но не могу сказать, что именно.
settings.py
STATIC_URL = '/static/'
STATIC_ROOT = os.path.join(BASE_DIR, "devops", "staticfiles")
STATICFILES_DIRS = [
BASE_DIR / "static",
]
MEDIA_URL = "/mediafiles/"
MEDIA_ROOT = os.path.join(BASE_DIR, "devops", "mediafiles")
docker-compose
Если я все делаю правильно, мне нужно, чтобы мои статические файлы находились вне контейнера, чтобы автономный nginx мог их обслуживать. Я делаю это таким образом, поскольку, как мне кажется, я читал, что проще настроить LetsEncrypt и certbot с nginx вне контейнера, чем внутри.
version: '3.7'
services:
web:
image: <dockerimage>
container_name: <name>
command: gunicorn <site>.wsgi:application --bind 0.0.0.0:8000 --workers 5
volumes:
- $HOME/devops/staticfiles:/home/app/web/staticfiles
- $HOME/devops/mediafiles:/home/app/web/mediafiles
ports:
- 8000:8000
env_file:
- .env.docker
depends_on:
- db
labels:
- com.centurylinklabs.watchtower.enable=true
restart: "on-failure"
db:
image: index.docker.io/postgres:12.0-alpine
container_name: db
env_file:
- .env.docker
volumes:
- postgres_data:/var/lib/postgresql/data/
restart: "on-failure"
volumes:
postgres_data:
logs:
nginx.conf
Это хранится в sites-available, что, опять же, кажется способом заставить это работать.
upstream maffsguru {
server web:8000;
}
server {
listen 80;
listen [::]:80;
server_name 128.199.80.210 personalityfirst.com www.personalityfirst.com;
client_max_body_size 4G;
access_log /home/maffsguru/logs/personalityfirst/nginx-access.log;
error_log /home/maffsguru/logs/personalityfirst/nginx-error.log;
location /static/ {
alias /home/maffsguru/devops/staticfiles/;
}
location /media/ {
alias /home/maffsguru/devops/mediafiles/;
}
location / {
proxy_pass http://localhost:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
}
Заранее спасибо за подсказку в правильном направлении. Очень ценю это. Чтобы попасть сюда, мне потребовалось много часов (веселых!) обучения... но я просто не могу переступить черту.