【发布时间】:2021-10-20 14:50:11
【问题描述】:
当涉及到 Nginx 时,我的 Django 应用程序的 dockerizing 和服务设置有点不同,所以我找到的解决方案没有帮助。
我已经对 django 应用程序进行了 docker 化,除了媒体文件外,它的工作正常。我没有在容器内使用 nginx,而是在实际服务器上使用。除媒体文件外,所有请求甚至静态文件都得到完美服务。 这是静态和媒体的设置:
STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn')
STATIC_URL = '/static/'
MEDIA_ROOT = os.path.join(BASE_DIR, 'media_cdn')
MEDIA_URL = '/media/'
STATICFILES_DIRS = (
os.path.join(BASE_DIR, 'static'),
)
这是我的 docker-compose 文件:
version: "3"
services:
backend:
image: gitrepo:latest
#image: 731d5d7e9296
ports:
- 8400:8000
links:
- database
command: bash -c "python manage.py migrate
&& python manage.py collectstatic --noinput
&& python manage.py runserver 0.0.0.0:8000"
volumes:
- media-cdn-data:/app/media_cdn
deploy:
restart_policy:
condition: on-failure
tty: true
database:
image: "postgres:12" # use latest official postgres version
env_file:
- database.env # configure postgres
volumes:
- database-data:/var/lib/postgresql/data/ # persist data even if container shuts down
volumes:
database-data: # named volumes can be managed easier using docker-compose
media-cdn-data:
这是我的 nginx 文件:
server {
server_name app.platformname.com;
location /media/ {
proxy_pass http://127.0.0.1:8400/;
alias /app/media_cdn/;
}
location / {
proxy_pass http://127.0.0.1:8400/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_read_timeout 3600;
proxy_set_header Connection '';
# these two lines here
proxy_http_version 1.1;
}
}
感谢任何帮助,过去 4 天我一直在努力解决这个问题 :)
【问题讨论】:
-
有什么原因你也没有通过 docker-compose 运行 nginx 吗?通过 nginx 直接从文件系统提供静态和媒体文件是标准方式,您需要在主机上挂载一个目录作为媒体卷,然后 nginx 可以从该目录提供媒体文件
-
嘿伊恩谢谢你的回复。我还添加了 settings.py 以防万一:)
标签: django docker nginx django-media