【发布时间】:2020-06-17 21:00:54
【问题描述】:
在开发过程中,我喜欢在尽可能接近生产的设置中部署 Django 静态文件。为了实现这一点,我将 Django 后端包装到一个图像 (Dockerfile) 中,并将前端 JS 和后端 Django 静态文件与配置为 Web 服务器 (Dockerfile_nginx) 的 nginx 一起包装到另一个图像中。设置如下:
文件系统结构:
<projekt-repo>
/frontend
/backend
/static (generated with python manage.py collectstatic)
settings.py
manage.py
nginx.conf
Dockerfile
Dockerfile_nginx
settings.py:
STATIC_ROOT = os.path.join(BASE_DIR, "backend/static")
STATIC_URL = '/static/'
STATICFILES_DIRS = [os.path.join(BASE_DIR, "static")]
nginx.conf:
server {
listen 0.0.0.0:8080;
root /var/www;
location / {
try_files $uri $uri/ /index.html;
}
}
server {
listen 0.0.0.0:8000;
root /var/www/django;
location /static/ {
autoindex on;
alias /var/www/django/static/;
}
}
Dockerfile_nginx:
FROM nginx:1.17.8-alpine
COPY nginx.conf /etc/nginx/conf.d/nginx.conf
COPY edge_frontend/www /var/www
COPY edge_backend/static /var/www/django/static
如果我运行应用程序并尝试通过 Django 管理站点 (localhost:8000/admin) 登录,则该站点的样式不正确并且日志输出状态
backend | Not Found: /static/admin/css/base.css
backend | Not Found: /static/admin/css/login.css
backend | Not Found: /static/admin/css/responsive.css
backend | Not Found: /favicon.ico
backend | Not Found: /static/admin/css/base.css
backend | Not Found: /static/admin/css/login.css
backend | Not Found: /static/admin/css/responsive.css
backend | Not Found: /favicon.ico
显然设置中存在一些我现在无法发现的不匹配?有人可以帮忙吗?
【问题讨论】:
标签: django python-3.x nginx