我正在设置一个带有Docker、nginx和gunicorn的Django 2.0应用程序。
它正在运行服务器,但静态文件不工作。
下面是settings.py内容
STATIC_URL = '/static/'
STATICFILES_DIRS = [
os.path.join(BASE_DIR, 'static_my_project')
]
STATIC_ROOT = os.path.join(BASE_DIR, 'static_cdn', 'static_root')在开发过程中,我将静态文件放在static_my_project中,在运行collectstatic时将其复制到static_cdn/static_root中
目录结构类似于
app
|- myapp
|- settings.py
|- static_my_project
|- static_cdn
|- static_root
|- config
|- nginx
|- nginx.conf
|- manage.py
|- Docker
|- docker-compose.yml关于跑步
docker-compose up --build在运行collectstatic时,它提供了静态文件将被复制到的路径
koober-dev | --:运行集合静态
koober-dev |
koober-dev |您已请求在目标位置收集静态文件
myapp-dev |设置中指定的位置:
myapp-dev |
myapp-dev | /app/static_cdn/static_root
myapp-dev |
myapp-dev |这将覆盖现有文件!
myapp-dev |确定要执行此操作吗?
myapp-dev |
myapp-dev |键入“yes”继续,或键入“no”取消:
myapp-dev |0静态文件已复制到'/app/ static _cdn/static_root',210个未修改。
config/nginx/nginx.conf文件包含以下设置
upstream web {
ip_hash;
server web:9010;
}
server {
location /static {
autoindex on;
alias /static/;
}
location / {
proxy_pass http://web;
}
listen 10080;
server_name localhost;
}docker-compose.yml
version: '3'
services:
nginx:
image: nginx:latest
container_name: "koober-nginx"
ports:
- "10080:80"
- "10443:43"
volumes:
- .:/app
- ./config/nginx:/etc/nginx/conf.d
- ./static_cdn/static_root/:/static
depends_on:
- web
web:
build: .
container_name: "koober-dev"
command: ./start.sh
volumes:
- .:/app
- ./static_cdn/static_root/:/app/static_cdn/static_root
ports:
- "9010:9010"
depends_on:
- db
db:
image: postgres
container_name: "koober-postgres-db"文档文件
FROM ubuntu:18.04
# -- Install Pipenv:
FROM python:3
ENV PYTHONUNBUFFERED 1
ENV LC_ALL C.UTF-8
ENV LANG C.UTF-8
# -- Install Application into container:
RUN set -ex && mkdir /app
WORKDIR /app
ADD requirements.txt /app/
RUN pip install -r requirements.txt
# -- Adding dependencies:
ADD . /app/,但它不加载静态文件。
发布于 2018-06-05 03:19:16
您需要拥有STATIC_ROOT目录的共享卷,以便您的nginx容器可以反向代理web服务器和web服务器生成的静态文件。
在docker-compose.yml中
services:
nginx:
image: nginx:alpine
volumes:
- ./static_cdn/static_root/:/static
ports:
- 80:80
web:
build: .
volumes:
- ./static_cdn/static_root/:/app/static_cdn/static_root现在,在您的nginx.conf中添加:
location /static/ {
alias /static/;
}发布于 2022-02-10 16:47:15
Nginx Dockerfile:
FROM nginx:stable-alpine
COPY default.conf /etc/nginx
COPY default.conf /etc/nginx/conf.d
EXPOSE 80以上Dockerfile文件中引用的default.conf:
server {
listen 80 default_server;
server_name _;
location / {
proxy_pass http://web:8000;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $host;
proxy_redirect off;
}
location /static/ {
alias /app/static/;
}
location /media/ {
alias /app/static/;
}
}注意:上面提到的default.conf和docker文件在同一个文件夹下,构建该镜像,并在下面的docker-compose文件中使用它作为Nginx镜像。
docker-compose文件将如下所示:
version: '3.8'
services:
web:
image: <django-image-name>
command: gunicorn --bind 0.0.0.0:8000 licensing_platform.wsgi --workers=4
volumes:
- static_volume:/app/static
- media_volume:/app/media
expose:
- "8000"
networks:
- django-network
nginx:
image: <nginx-image-name>
restart: always
volumes:
- static_volume:/app/static
- media_volume:/app/media
ports:
- "80:80"
depends_on:
- web
networks:
- django-network
networks:
django-network:
name: django-network
volumes:
media_volume:
static_volume:引用的app/路径取决于工作目录: django应用程序Dockerfile文件的开头为:
FROM ubuntu:20.04
ADD . /app
WORKDIR /app
EXPOSE 8000代码参考:https://github.com/addu390/licensing-as-a-platform
上面提到的代码参考是我正在开发的一个开源项目,没有商业利益。
https://stackoverflow.com/questions/50685775
复制相似问题