Fichiers statiques Django avec nginx et unicorn
Question
J'essaie de déployer mon application Django sur mon VPS.J'ai donc suivi plusieurs tutoriels et le seul problème que j'ai est que je n'arrive pas à faire apparaître mes fichiers statiques.Vous trouverez donc ci-dessous la structure de mes fichiers sur le VPS.
- Environnement virtuel :/opt/mesapplications/
- Projet Django :/opt/mesapplications/uniprogress/
- Fichiers statiques :/opt/mesapps/uniprogress/static/
Configuration Nginx :/etc/nginx/sites-available/uniprogress
server {
server_name 188.xxx.xxx.93;
access_log off;
location /static/ {
alias /opt/myapps/uniprogress/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
et enfin dans mon django settings.py :
# Build paths inside the project like this: os.path.join(BASE_DIR, ...)
import os
BASE_DIR = os.path.dirname(os.path.dirname(__file__))
# Template Dirs
TEMPLATE_DIRS = (
os.path.join(SETTINGS_PATH, 'templates'),
)
# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/1.6/howto/static-files/
STATIC_ROOT = '/opt/myapps/uniprogress/static/'
STATIC_URL = '/static/'
J'ai aussi utilisé : python manage.py collectstatic
mais mes fichiers statiques n'apparaissent toujours pas.
MISE À JOURLe tutoriel que j'ai utilisé se trouve sur Océan numérique.
J'ai vérifié que les fichiers existent sur le serveur.
Je peux également accéder à des fichiers statiques tels que : http://188.xxx.xxx.93/static/css/bootstrap.css.
MAIS Dans mon code source http://188.xxx.xxx.93:8001/, il lie les fichiers statiques à l'aide du port.
Cela signifie: <link href="/static/css/bootstrap.css" rel="stylesheet">
Il essaie donc de trouver bootstrap.css à l'adresse http://188.xxx.xxx.93:8001/static/bootstrap.css et le fichier n'existe pas (il faut supprimer la publication pour que cela fonctionne).
La solution
Pour servir des fichiers statiques, faites-le au niveau nginx comme
server {
server_name 188.xxx.xxx.93;
access_log off;
location ~ ^/(static)/ {
# root:- you static files path
# alias /opt/myapps/uniprogress/static/;
root /opt/myapps/uniprogress/static/;
}
location / {
proxy_pass http://127.0.0.1:8001;
proxy_set_header X-Forwarded-Host $server_name;
proxy_set_header X-Real-IP $remote_addr;
add_header P3P 'CP="ALL DSP COR PSAa PSDa OUR NOR ONL UNI COM NAV"';
}
}
Désormais, tous les fichiers statiques seront diffusés depuis votre nginx.
Autres conseils
Votre STATIC_ROOT collecte des fichiers statiques à l'adresse :
/opt/myapps/uniprogress/opt/myapps/uniprogress/static/
Cela ne correspond pas à la configuration de votre serveur, qui pointe vers :
opt/myapps/uniprogress/static/
STATIC_ROOT est juste un dossier qui contient tous vos fichiers statiques (images, CSS, tout) au même endroit pour le déploiement, alors définissez-le sur quelque chose comme « /collected_static/ » et corrigez la configuration du serveur.
Vérifiez ces choses
1 Si l'ancien statique est accessible par nginx, je veux dire l'autorisation du dossier .
2 Ou fais ceci
Remplacez ceci :
STATIC_ROOT = '/opt/myapps/uniprogress/static/'
avec ça
STATIC_ROOT = ''
Et ajoutez ceci dans les paramètres
STATICFILES_DIRS = (
'/opt/myapps/uniprogress/static/',
)
J'espère que cela fonctionne.