Gunicorn이 정적 파일을 제공하지 않는 이유는 무엇입니까?

Gunicorn이 정적 파일을 제공하지 않는 이유는 무엇입니까?

django, docker, nginx 및 gunicorn 설정에 문제가 있습니다. 서버를 실행할 때 정적 파일을 표시한 후에도 표시할 수 없습니다 collectstatic. 그리고 nginx가 있을 때 사용 중인 포트가 이미 할당되었다는 오류가 발생하거나 포트를 변경하면 "잘못된 게이트웨이"가 표시되지만 내 경우에는 gunicorn이 사용하는 포트를 계속 사용할 수 있습니다. , 포트 8000.

내 docker-compose.yml 파일:

version: '3'

services:
  db:
    image: postgres:latest
    container_name: rapid_goat_postgres_server_1
  nginx:
    image: nginx:latest
    container_name: rapid_goat_nginx_1
    ports:
      - "8000:8000"
    volumes:
      - .:/code
      - ./nginx:/etc/nginx/conf.d
      - /static:/static
    depends_on:
      - web
  web:
    build: .
    container_name: rapid_goat_django
    command: bash -c "chmod -R 755 . && cd rapidgoat_scraper_product && python3 manage.py collectstatic --noinput && python3 manage.py makemigrations && python3 manage.py migrate && gunicorn rapidgoat_scraper.wsgi -b 0.0.0.0:8000 --workers 6"
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

내 nginx 구성 파일:

upstream web {
  ip_hash;
  server web:8000;
}

server {

    location /static/ {
        autoindex on;
        root /code/static/;
    }

    location / {
        proxy_pass http://web/;
    }
    listen 8000;
    server_name localhost;
}

위의 두 파일을 그대로 사용하면 실행 시 다음 오류가 발생합니다 docker-compose up --build.

ERROR: for 693800faea42_693800faea42_693800faea42_my_nginx_docker_container Cannot start service nginx: driver failed programming external connectivity on endpoint my_nginx_docker_container (48eab4028fad0c54d8bbf5669fe746c24f293cfeb11dc57c8566d4010a995a83): Bind for 0.0.0.0:8000 failed: port is already allocated

ERROR: for nginx  Cannot start service nginx: driver failed programming external connectivity on endpoint my_nginx_docker_container (48eab4028fad0c54d8bbf5669fe746c24f293cfeb11dc57c8566d4010a995a83): Bind for 0.0.0.0:8000 failed: port is already allocated
ERROR: Encountered errors while bringing up the project.

그런 다음 docker-compose.yml 파일에서 nginx 서비스를 제거하면 gunicorn 서버를 실행할 수 있지만 정적 파일을 제공하지 않습니다. 나는 또한 앱 템플릿을 사용하고 있으므로 내 django 프로젝트 구조는 다음과 같습니다.

- project
-- __init__.py
-- settings.py
-- urls.py
-- wsgi.py

- appname
-- migrations
-- static
--- appname
... then rest of static files like js, css, images... etc
-- templates
--- appname
... then all of my html files. I am using django templating.
-- admin.py
-- apps.py
-- forms.py
-- models.py
-- tests.py
-- views.py

나는 또한 django 2.0.3을 사용하고 있습니다.

편집하다:

nginx를 제거할 때와 동일한 파일은 다음과 같습니다. nginx의 포트를 변경할 때와 동일하며 gunicorn은 정적 서비스를 제공하지 않습니다.

내 docker-compose.yml 파일:

version: '3'

services:
  db:
    image: postgres:latest
    container_name: rapid_goat_postgres_server_1
  web:
    build: .
    container_name: rapid_goat_django
    command: bash -c "chmod -R 755 . && cd rapidgoat_scraper_product && python3 manage.py collectstatic --noinput && python3 manage.py makemigrations && python3 manage.py migrate && gunicorn rapidgoat_scraper.wsgi -b 0.0.0.0:8000 --workers 6"
    volumes:
      - .:/code
    ports:
      - "8000:8000"
    depends_on:
      - db

아, 그리고 내 Dockerfile은 다음과 같습니다.

FROM python:3
ENV PYTHONUNBUFFERED 1
RUN mkdir /code
RUN mkdir /static
WORKDIR /code
ADD requirements.txt /code/
RUN pip install -r requirements.txt
ADD . /code/

관련 정보