Warum stellt Gunicorn keine statischen Dateien bereit?

Warum stellt Gunicorn keine statischen Dateien bereit?

Ich habe Probleme mit meinem Django-, Docker-, Nginx- und Gunicorn-Setup. Ich kann die statischen Dateien nicht anzeigen, wenn ich den Server ausführe, selbst nachdem ich collectstaticsie installiert habe. Und wenn ich Nginx habe, erhalte ich entweder eine Fehlermeldung, dass der von mir verwendete Port bereits zugewiesen ist, oder wenn ich den Port ändere, erhalte ich die Meldung „Bad Gateway“, kann aber trotzdem den von Gunicorn verwendeten Port verwenden – in meinem Fall Port 8000.

Meine docker-compose.yml-Datei:

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

Meine Nginx-Konfigurationsdatei:

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;
}

Mit den beiden oben genannten Dateien erhalte ich beim Ausführen die folgende Fehlermeldung 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.

Und wenn ich dann den Nginx-Dienst aus der Datei docker-compose.yml entferne, kann ich den Gunicorn-Server zwar starten, aber er stellt die statischen Dateien nicht bereit. Ich verwende auch In-App-Vorlagen, sodass meine Django-Projektstruktur folgendermaßen aussieht:

- 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

Ich verwende auch Django 2.0.3

Bearbeiten:

Hier sind die gleichen Dateien, wenn ich Nginx entferne – dieselben, als wenn ich den Port für Nginx ändere – und Gunicorn liefert die statische Ausgabe nicht:

Meine docker-compose.yml-Datei:

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

Oh, und mein Dockerfile ist:

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/

verwandte Informationen