1 votes

<img>img 404 using Nginx, Docker, Django, Digital Ocean</img>

Pour une raison quelconque, mes fichiers statiques CSS, JS et Font-Awesome sont reconnus et servent correctement, mais mes fichiers statiques img affichent des erreurs 404 dans les logs du conteneur Docker Nginx.

Tout fonctionne bien lorsque je construis ces conteneurs localement, mais dès que je construis sur Digital Ocean, les fichiers img commencent à renvoyer des erreurs 404 avec Nginx.

Je tourne en rond depuis quelques jours sans succès, toute aide serait GRANDEMENT appréciée.

Voici mes paramètres Nginx :

server {

    listen 80;
    server_name 104.236.29.80;

    access_log /dev/stdout;
    error_log /dev/stdout info;

    location /static/ {
        alias /usr/src/app/personal/static/;
    }

    location / {
        proxy_pass http://web:8000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }

}

Voici le Dockerfile pour la construction de mon Nginx :

FROM tutum/nginx
RUN rm /etc/nginx/sites-enabled/default
ADD sites-enabled/ /etc/nginx/sites-enabled

Mon fichier Docker-compose ressemble un peu à ceci :

web:
    restart: always
    build: ./web
    expose:
      - 8000
    links:
      - postgres:postgres
    volumes:
      - ./web:/usr/src/app
    env_file:
      - .env
    command: /usr/local/bin/gunicorn etandme.wsgi:application -w 2 -b :8000

 nginx:
    restart: always
    build: ./nginx
    ports:
      - 80:80
    volumes_from:
      - web
    links:
      - web:web

Les logs d'erreur ressemblent un peu à ceci :

"GET /static/js/creative.js HTTP/1.1" 200 1860 "http://104.236.29.80/" "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko)
[error] 7#0: *7 open() "/usr/src/app/personal/static/img/Monkeypod.jpg" failed (2: No such file or directory), client: 98.151.113.208, server: 159.203.166.130, request: "GET /static/img/Monkeypod.jpg HTTP/1.1", host: "104.236.29.80", referrer: "http://104.236.29.80/"

Je confirme avoir exécuté 'collectstatic' dans le conteneur web à partir de la ligne de commande, et le terminal confirme que les fichiers img ont été copiés dans la racine statique (/usr/src/app/personal/static/).

Je suis complètement perdu quant à la raison pour laquelle seule une partie des fichiers statiques serait servie, d'autant plus qu'ils sont tous situés dans le même répertoire et référencés dans le backend Django avec la même syntaxe.

Je vous remercie vivement pour votre temps et votre attention !

0voto

Taylor Parrish Points 11

Problème trouvé!

Pour une raison inconnue, lorsque j'exécute collectstatic sur le serveur de production (Digital Ocean Docker droplet), les fichiers .jpg sont copiés dans le répertoire racine static avec une extension .JPG.

Après avoir apporté quelques modifications à mes modèles Django et avoir échangé .jpg avec .JPG dans les balises de modèle, tout fonctionne correctement maintenant.

SistemesEz.com

SystemesEZ est une communauté de sysadmins où vous pouvez résoudre vos problèmes et vos doutes. Vous pouvez consulter les questions des autres sysadmins, poser vos propres questions ou résoudre celles des autres.

Powered by:

X