Django-fr

Forum

#1 22-10-2014 23:39:41

Doline
Membre
Inscription : 06-08-2014
Messages : 22

Nginx : chargement des fichiers statiques

Bonsoir à tous,

Il y a quelques semaines je cherchais à faire tourner mon site Django sur un serveur de production en local histoire de me faire un peu la main. Après beaucoup de recherche et d'aides (notamment de la mailing list), j'avais réussi à faire ce que je souhaitais.
J'ai donc pu reprendre sereinement le développement du site.

Voici le moment de mettre en ligne... et là plus moyen de faire fonctionner Nginx correctement, c'est à dire que mes fichiers statiques ne sont pas chargés.

Voici ma conf de Nginx (qui est celle que j'avais il y a quelques semaines) :

worker_processes  1;
events {
    worker_connections  1024;
}
http {
    include       mime.types;
    default_type  application/octet-stream;
    sendfile        on;
    keepalive_timeout  65;
    server {
        listen       80;
        server_name  localhost;

    location / {
               proxy_pass http://127.0.0.1:8000/[1];
               proxy_read_timeout 300;
               proxy_redirect off;
               proxy_buffering off;
               proxy_store off;
               proxy_set_header Host $host;
               proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
     }

     location /static {
                alias /home/dev/www/static;
           }
}
}


Et l'arborescence de mon projet :

/home/dev/www :
----|static
----|manage.py
----|mainSite
--------|settings.py
--------|(autres fichiers)
----|mes_differentes_apps


J'utilise la commande suivante pour lancer gunicorn :
gunicorn mainSite.wsgi:application --bind=127.0.0.1 --daemon


Le contenu du site est bien là, mais les images, css & co ne sont pas du tout pris en compte.
Je précise qu'en serveur de développement tout fonctionne à merveille.

Si une âme charitable pouvait me dire à coté de quoi je passe ça serait très gentil, surtout pour mes cheveux qui disparaissent à vue d'oeil sad

D'avance merci à tous.

Charlie.

--------
[1] http://127.0.0.1:8000/

Hors ligne

#2 23-10-2014 05:12:16

doddo
Membre
Inscription : 29-12-2010
Messages : 20

Re : Nginx : chargement des fichiers statiques

Bonjour,

À tout hasard, tu as bien lancé la commande et/ou mis le STATIC_ROOT ?

  python manage.py collectstatic


https://docs.djangoproject.com/en/dev/howto/static-files/


Si c'est ça tant mieux, ce sera vite résolu wink

bon courage,



On 2014-10-23 00:39, Charlie Gentil wrote:
> Bonsoir à tous,
>
> Il y a quelques semaines je cherchais à faire tourner mon site Django
> sur un serveur de production en local histoire de me faire un peu la
> main. Après beaucoup de recherche et d'aides (notamment de la mailing
> list), j'avais réussi à faire ce que je souhaitais.
>
> J'ai donc pu reprendre sereinement le développement du site.
>
> Voici le moment de mettre en ligne... et là plus moyen de faire
> fonctionner Nginx correctement, c'est à dire que mes fichiers
> statiques ne sont pas chargés.
>
> Voici ma conf de Nginx (qui est celle que j'avais il y a quelques
> semaines) :
>
> worker_processes 1;
>
> events {
>
>  worker_connections 1024;
>
> }
>
> http {
>
>  include mime.types;
>
>  default_type application/octet-stream;
>
>  sendfile on;
>
>  keepalive_timeout 65;
>
>  server {
>
>  listen 80;
>
>  server_name localhost;
>
>  location / {
>
>  proxy_pass http://127.0.0.1:8000/ [1];
>
>  proxy_read_timeout 300;
>
>  proxy_redirect off;
>
>  proxy_buffering off;
>
>  proxy_store off;
>
>  proxy_set_header Host $host;
>
>  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
>
>  }
>
>  location /static {
>
>  alias /home/dev/www/static;
>
>  }
>
>  }
>
> }
>
> Et l'arborescence de mon projet :
>
> /home/dev/www :
>
> ----|static
>
> ----|manage.py
>
> ----|mainSite
>
> --------|settings.py
>
> --------|(autres fichiers)
>
> ----|mes_differentes_apps
>
> J'utilise la commande suivante pour lancer gunicorn :
>
> gunicorn mainSite.wsgi:application --bind=127.0.0.1 --daemon
>
> Le contenu du site est bien là, mais les images, css & co ne sont pas
> du tout pris en compte.
>
> Je précise qu'en serveur de développement tout fonctionne à
> merveille.
>
> Si une âme charitable pouvait me dire à coté de quoi je passe ça
> serait très gentil, surtout pour mes cheveux qui disparaissent à vue
> d'oeil sad
>
> D'avance merci à tous.
>
> Charlie.
>
> Links:
> ------
> [1] http://127.0.0.1:8000/
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#3 23-10-2014 10:24:42

Doline
Membre
Inscription : 06-08-2014
Messages : 22

Re : Nginx : chargement des fichiers statiques

Salut,

Je te confirme que j'avais bien fait ceci. N'arrivant toujours pas à faire ce que je souhaite, j'ai pris le problème dans un autre sens : partir d'une "feuille vierge".

*1ère étape : création d'un nouveau projet*
Dans mon répertoire /home/dev j'ai lancé la commande :
python-admin3.py startproject siteTest.

Dans ma conf nginx j'ai fait pointer l'alias /static/ sur :
/home/dev/siteTest/static

Dans /home/dev/siteTest/siteTest/settings.py j'ai renseigné mes statics ainsi :
STATIC_URL = '/static/'
STATIC_ROOT = '/home/dev/siteTest/static/'

Je lance la commande : python manage.py collectstatic (ce qui m'importe à ce stade le dossier admin dans /home/dev/siteTest/static)

Je lance la commande : python manage.py syncdb

Je lance nginx puis gunicorn : j'arrive sur la page Django works. Si je vais sur la page d'admin j'ai bien la bonne présentation... donc à priori ça fonctionne ...

*2ème étape : Ajout de mon app.*
Je fais un copier-coller du dossier de mon app /home/dev/siteTest/.
Je fais un copier-coller de mon dossier templates dans /home/dev/siteTest/ et je prends soins de définir les templates comme suit dans settings.py :
TEMPLATE_DIRS = ['/home/dev/siteTest/templates/']

J'ajoute dans /home/dev/siteTest/static un dossier app qui contient les fichiers statics de mon app.

Je relance nginx et gunicorn.

La page d'admin est toujours bonne.
Les pages de mon app ne sont pas mise en forme comme souhaité.

J'ai regardé le code source de la page d'admin, et en voici un extrait :
<!DOCTYPE html>
<html lang="en-us" >
<head>
<title>Site administration | site admin</title>
<link rel="stylesheet" type="text/css" href="/static/admin/css/base.css[1]" />

Je précise que base.css est bien dans /home/dev/siteTest/static/admin/css.


En comparaison voici le code source de ma page d'accueil :
<!DOCTYPE html>
<html lang="en-us" >

  <head>
    <meta http-equiv="content-type" content="text/html; charset=ISO-8859-1" />
    <link rel="stylesheet" type="text/css" href="/static/app/form.css[2]" />


Je précise que form.css est bien dans /home/dev/siteTest/static/app.

Là je n'y comprends plus rien et je ne vois pas vraiment où je peux faire une erreur ...


Merci pour votre aide future.

Charlie.



>
> Bonjour,
>
> À tout hasard, tu as bien lancé la commande et/ou mis le STATIC_ROOT ?
>
>   python manage.py collectstatic
>
>
> https://docs.djangoproject.com/en/dev/howto/static-files/
>
>
> Si c'est ça tant mieux, ce sera vite résolu wink
>
> bon courage,
>
>
>
> On 2014-10-23 00:39, Charlie Gentil wrote:
> > Bonsoir à tous,
> >
> > Il y a quelques semaines je cherchais à faire tourner mon site Django
> > sur un serveur de production en local histoire de me faire un peu la
> > main. Après beaucoup de recherche et d'aides (notamment de la mailing
> > list), j'avais réussi à faire ce que je souhaitais.
> >
> > J'ai donc pu reprendre sereinement le développement du site.
> >
> > Voici le moment de mettre en ligne... et là plus moyen de faire
> > fonctionner Nginx correctement, c'est à dire que mes fichiers
> > statiques ne sont pas chargés.
> >
> > Voici ma conf de Nginx (qui est celle que j'avais il y a quelques
> > semaines) :
> >
> > worker_processes 1;
> >
> > events {
> >
> >  worker_connections 1024;
> >
> > }
> >
> > http {
> >
> >  include mime.types;
> >
> >  default_type application/octet-stream;
> >
> >  sendfile on;
> >
> >  keepalive_timeout 65;
> >
> >  server {
> >
> >  listen 80;
> >
> >  server_name localhost;
> >
> >  location / {
> >
> >  proxy_pass http://127.0.0.1:8000/ [1];
> >
> >  proxy_read_timeout 300;
> >
> >  proxy_redirect off;
> >
> >  proxy_buffering off;
> >
> >  proxy_store off;
> >
> >  proxy_set_header Host $host;
> >
> >  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
> >
> >  }
> >
> >  location /static {
> >
> >  alias /home/dev/www/static;
> >
> >  }
> >
> >  }
> >
> > }
> >
> > Et l'arborescence de mon projet :
> >
> > /home/dev/www :
> >
> > ----|static
> >
> > ----|manage.py
> >
> > ----|mainSite
> >
> > --------|settings.py
> >
> > --------|(autres fichiers)
> >
> > ----|mes_differentes_apps
> >
> > J'utilise la commande suivante pour lancer gunicorn :
> >
> > gunicorn mainSite.wsgi:application --bind=127.0.0.1 --daemon
> >
> > Le contenu du site est bien là, mais les images, css & co ne sont pas
> > du tout pris en compte.
> >
> > Je précise qu'en serveur de développement tout fonctionne à
> > merveille.
> >
> > Si une âme charitable pouvait me dire à coté de quoi je passe ça
> > serait très gentil, surtout pour mes cheveux qui disparaissent à vue
> > d'oeil sad
> >
> > D'avance merci à tous.
> >
> > Charlie.
> >
> > Links:
> > ------
> > [1] http://127.0.0.1:8000/
> >
> > _______________________________________________
> > django mailing list
> > django _AT_ lists.afpy.org
> > http://lists.afpy.org/mailman/listinfo/django
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django


--------
[1] view-source:http://127.0.0.1/static/admin/css/base.css
[2] view-source:http://127.0.0.1/static/envitronic/form.css

Hors ligne

#4 23-10-2014 10:33:35

Xavier Ordoquy
Administrateur
Lieu : Puteaux, France
Inscription : 12-10-2011
Messages : 312
Site Web

Re : Nginx : chargement des fichiers statiques

Bonjour,
>
> J'ajoute dans /home/dev/siteTest/static un dossier app qui contient les fichiers statics de mon app.
>

Il ne faut pas faire ça. Ce répertoire (STATIC_ROOT) doit être géré par le collectstatic et uniquement par lui. Il n'est donc pas souhaitable d'y mettre du contenu directement.

Tu peux ajouter tes fichiers statiques, soit dans le répertoire static dans ton application, soit en renseignant STATICFILES_DIRS.

Cordialement,
Xavier Ordoquy.

Hors ligne

#5 23-10-2014 10:43:19

Olivier
Membre
Inscription : 21-07-2016
Messages : 8

Re : Nginx : chargement des fichiers statiques

Bonjour,

pour reprendre votre exemple initial, on remplace "alias" par "root" que
vous aviez avant et on ote "static" du path, soit

location /static/ {

root /home/dev/www/;

}

un exemple tout frais
http://sametmax.com/servir-des-fichiers-statiques-avec-nginx/

Cordialement

>>>
>
>>> location /static {
>
>>>
>
>>> alias /home/dev/www/static;
>
>>>
>
>>> }
>
>>> > >
>
>>> Et l'arborescence de mon projet :
>
>>>
>
>>> /home/dev/www :
>
>>>
>
>>> ----|static
>
>>>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django [1]


Links:
------
[1] http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#6 23-10-2014 11:04:02

Doline
Membre
Inscription : 06-08-2014
Messages : 22

Re : Nginx : chargement des fichiers statiques

Pffff.... c'est vraiment le truc à la con autour du quel on peut tourner un paquet de temps...

J'ai donc créé un dossier staticApp et ajouter le path dans STATICFILES_DIRS.
J'y ai mis mes fichiers statics propre à mon app.
J'ai relancé le collectstatic, qui m'envoie le contenu dans static, et magie ... ça fonctionne.

J'ai sûrement dû à un moment me dire "pourquoi les avoir en double ??? j'en supprime un morceau"... sauf que par la suite des copier-coller ça ne fonctionne pas ...

Merci pour ton aide.



Bonjour,


J'ajoute dans /home/dev/siteTest/static un dossier app qui contient les fichiers statics de mon app.




Il ne faut pas faire ça. Ce répertoire (STATIC_ROOT) doit être géré par le collectstatic et uniquement par lui. Il n'est donc pas souhaitable d'y mettre du contenu directement.


Tu peux ajouter tes fichiers statiques, soit dans le répertoire static dans ton application, soit en renseignant STATICFILES_DIRS.


Cordialement,
Xavier Ordoquy.

Hors ligne

#7 23-10-2014 11:05:39

Doline
Membre
Inscription : 06-08-2014
Messages : 22

Re : Nginx : chargement des fichiers statiques

Merci pour ta réponse. Une réponse précédente m'a permis de résoudre mon problème, mais je lirai avec attention ton lien.


Le jeudi 23 octobre 2014 11:43:19, vous avez écrit :


Bonjour,
pour reprendre votre exemple initial, on remplace "alias" par "root" que vous aviez avant et on ote "static" du path, soit

location /static/ {
    root /home/dev/www/;
}

un exemple tout frais http://sametmax.com/servir-des-fichiers-statiques-avec-nginx/

Cordialement

> >
> > location /static {
> >
> > alias /home/dev/www/static;
> >
> > }
> >
> >
> > Et l'arborescence de mon projet :
> >
> > /home/dev/www :
> >
> > ----|static
> >


_______________________________________________
django mailing list
django _AT_ lists.afpy.org[1]
http://lists.afpy.org/mailman/listinfo/django[2]



--------
[1] mailto:django _AT_ lists.afpy.org
[2] http://lists.afpy.org/mailman/listinfo/django

Hors ligne

Pied de page des forums