Django-fr

Forum

#1 25-08-2014 19:23:55

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

Déploiement en production

Bonjour à tous,

Je souhaite tester mon projet Django avec Gunicorn ou uWSGI
Pour cela, j'ai notamment suivi le tutoriel suivant : http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang/

Si pour l'utilisation de Gunicorn je n'ai aucun souci, l'utilisation de Ngnix me pose quelques soucis en particulier avec les fichiers statics qui ne sont pas pris en compte.
À titre d'exemple après la commande :
python manage.py collectstatic
j'ai bien (entre autre) le dossier /usr/lib/python3.4/site-packages/django/contrib/admin/static/ de copié dans le répertoire voulu, mais si je me connecte à l'interface d'admin c'est un peu le bazar...

Avec uWSGI ... bien rien ne se lance... donc là j'en suis totalement à zéro.

Si quelqu'un a des petits conseils pour faire ce que je cherche ça serait sacrément cool smile

Merci à tous.

CEG

Hors ligne

#2 25-08-2014 21:42:28

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

Re : Déploiement en production

Bonjour,

A priori, si le collecstatic te copie le fichier, soit il te manque le STATIC_URL dans ton template, soit ta configuration Nginx a un souci.

Cordialement,
Xavier Ordoquy,
Linovia.

Le 25 août 2014 à 20:23, Charlie Gentil <ceg _AT_ redaction-developpez.com> a écrit :

>
> Bonjour à tous,
>
> Je souhaite tester mon projet Django avec Gunicorn ou uWSGI
> Pour cela, j'ai notamment suivi le tutoriel suivant : http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang/
>
> Si pour l'utilisation de Gunicorn je n'ai aucun souci, l'utilisation de Ngnix me pose quelques soucis en particulier avec les fichiers statics qui ne sont pas pris en compte.
> À titre d'exemple après la commande :
> python manage.py collectstatic
> j'ai bien (entre autre) le dossier /usr/lib/python3.4/site-packages/django/contrib/admin/static/ de copié dans le répertoire voulu, mais si je me connecte à l'interface d'admin c'est un peu le bazar...
>
> Avec uWSGI ... bien rien ne se lance... donc là j'en suis totalement à zéro.
>
> Si quelqu'un a des petits conseils pour faire ce que je cherche ça serait sacrément cool smile
>
> Merci à tous.
>
> CEG
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#3 26-08-2014 08:17:15

Stephane Kanschine
Membre
Inscription : 11-08-2010
Messages : 18

Re : Déploiement en production

Le lun. 25 août, vers 20:23, Charlie Gentil exprimait :

> Bonjour à tous,

Salutations,

> Je souhaite tester mon projet Django avec Gunicorn ou uWSGI
> Pour cela, j'ai notamment suivi le tutoriel suivant : http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang/
>
> Si pour l'utilisation de Gunicorn je n'ai aucun souci, l'utilisation de Ngnix me pose quelques soucis en particulier avec les fichiers statics qui ne sont pas pris en compte.
> À titre d'exemple après la commande :
> python manage.py collectstatic
> j'ai bien (entre autre) le dossier /usr/lib/python3.4/site-packages/django/contrib/admin/static/ de copié dans le répertoire voulu, mais si je me connecte à l'interface d'admin c'est un peu le bazar...

Dans la conf nginx, le /static doit se trouver avant le reste. Tu
obtiens une traceback ? Juste une 404 ?

> Avec uWSGI ... bien rien ne se lance... donc là j'en suis totalement à zéro.

Quelles erreurs as tu dans le log ? Quels plugins uwsgi utilises tu ?
À quoi ressembles ton fichier de configuration ?

> Si quelqu'un a des petits conseils pour faire ce que je cherche ça
> serait sacrément cool smile

Pour ça, il faudrait que tu donnes un peu plus de détails.

Numériquement,
Stéphane alias carxwo

Hors ligne

#4 26-08-2014 09:36:39

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

Re : Déploiement en production

Bonjour
Un court billet ici http://sametmax.com/nginx-en-reverse-proxy-gunicorn-pour-vos-apps-django/ aborde cet aspect
Et un très long et complet ici http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor/
Bon courage

On 25 août 2014 20:23:55 CEST, Charlie Gentil <ceg _AT_ redaction-developpez.com> wrote:
>
>Bonjour à tous,
>
>Je souhaite tester mon projet Django avec Gunicorn ou uWSGI
>Pour cela, j'ai notamment suivi le tutoriel suivant :
>http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang/
>
>Si pour l'utilisation de Gunicorn je n'ai aucun souci, l'utilisation de
>Ngnix me pose quelques soucis en particulier avec les fichiers statics
>qui ne sont pas pris en compte.
>À titre d'exemple après la commande :
>python manage.py collectstatic
>j'ai bien (entre autre) le dossier
>/usr/lib/python3.4/site-packages/django/contrib/admin/static/ de copié
>dans le répertoire voulu, mais si je me connecte à l'interface d'admin
>c'est un peu le bazar...
>
>Avec uWSGI ... bien rien ne se lance... donc là j'en suis totalement à
>zéro.
>
>Si quelqu'un a des petits conseils pour faire ce que je cherche ça
>serait sacrément cool smile
>
>Merci à tous.
>
>CEG
>_______________________________________________
>django mailing list
>django _AT_ lists.afpy.org
>http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#5 26-08-2014 09:41:38

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

Re : Déploiement en production

Bonjour et merci pour ta réponse.

Qu'entends tu pas "STATIC_URL dans ton template" ? (c'est pas plutôt de settings.py dont tu parles ). Pour le moment j'essaye déjà avec l'interface admin c'est à dire avec les templates django de base.

En ce qui me concerne j'ai dans settings.py :
STATIC_URL = os.path.join(BASE_DIR, './staticfiles/')
STATIC_ROOT = os.path.join(BASE_DIR, './staticfiles/')


et voici ce que j'ai dans /etc/nginx/sites-enabled/myconfig
server {
    listen localhost:8000;

    location / {
        proxy_pass http://127.0.0.1:8001;
    }

    location /static/ {
        autoindex on;
        alias /home/charlie/SITE/DJANGO/site/mainSite/staticfiles;
    }
}

mainSite contenant manage.py par exemple.

Merci pour ton aide.

Charlie.


Le lundi 25 août 2014, 22:42:28 Xavier Ordoquy a écrit :
>
> Bonjour,
>
> A priori, si le collecstatic te copie le fichier, soit il te manque le STATIC_URL dans ton template, soit ta configuration Nginx a un souci.
>
> Cordialement,
> Xavier Ordoquy,
> Linovia.
>
> Le 25 août 2014 à 20:23, Charlie Gentil <ceg _AT_ redaction-developpez.com> a écrit :
>
> >
> > Bonjour à tous,
> >
> > Je souhaite tester mon projet Django avec Gunicorn ou uWSGI
> > Pour cela, j'ai notamment suivi le tutoriel suivant : http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang/
> >
> > Si pour l'utilisation de Gunicorn je n'ai aucun souci, l'utilisation de Ngnix me pose quelques soucis en particulier avec les fichiers statics qui ne sont pas pris en compte.
> > À titre d'exemple après la commande :
> > python manage.py collectstatic
> > j'ai bien (entre autre) le dossier /usr/lib/python3.4/site-packages/django/contrib/admin/static/ de copié dans le répertoire voulu, mais si je me connecte à l'interface d'admin c'est un peu le bazar...
> >
> > Avec uWSGI ... bien rien ne se lance... donc là j'en suis totalement à zéro.
> >
> > Si quelqu'un a des petits conseils pour faire ce que je cherche ça serait sacrément cool smile
> >
> > Merci à tous.
> >
> > CEG
> > _______________________________________________
> > 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

Hors ligne

#6 26-08-2014 09:48:42

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Déploiement en production

Bonjour,

Change ton STATIC_URL pour "/static/" dans le settings.py

Cordialement,

Rémy

Le 26/08/2014 10:41, Charlie Gentil a écrit :
>
> Bonjour et merci pour ta réponse.
>

>
> Qu'entends tu pas "STATIC_URL dans ton template" ? (c'est pas plutôt
> de settings.py dont tu parles ). Pour le moment j'essaye déjà avec
> l'interface admin c'est à dire avec les templates django de base.
>

>
> En ce qui me concerne j'ai dans settings.py :
>
> STATIC_URL=os.path.join(BASE_DIR,'./staticfiles/')
>
> STATIC_ROOT=os.path.join(BASE_DIR,'./staticfiles/')
>

>

>
> et voici ce que j'ai dans /etc/nginx/sites-enabled/myconfig
>
> server {
>
> listen localhost:8000;
>

>
> location / {
>
> proxy_pass http://127.0.0.1:8001;
>
> }
>

>
> location /static/ {
>
> autoindex on;
>
> alias /home/charlie/SITE/DJANGO/site/mainSite/staticfiles;
>
> }
>
> }
>

>
> mainSite contenant manage.py par exemple.
>

>
> Merci pour ton aide.
>

>
> Charlie.
>

>

>
> Le lundi 25 août 2014, 22:42:28 Xavier Ordoquy a écrit :
>
> >
>
> > Bonjour,
>
> >
>
> > A priori, si le collecstatic te copie le fichier, soit il te manque
> le STATIC_URL dans ton template, soit ta configuration Nginx a un souci.
>
> >
>
> > Cordialement,
>
> > Xavier Ordoquy,
>
> > Linovia.
>
> >
>
> > Le 25 août 2014 à 20:23, Charlie Gentil
> <ceg _AT_ redaction-developpez.com> a écrit :
>
> >
>
> > >
>
> > > Bonjour à tous,
>
> > >
>
> > > Je souhaite tester mon projet Django avec Gunicorn ou uWSGI
>
> > > Pour cela, j'ai notamment suivi le tutoriel suivant :
> http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang/
>
> > >
>
> > > Si pour l'utilisation de Gunicorn je n'ai aucun souci,
> l'utilisation de Ngnix me pose quelques soucis en particulier avec les
> fichiers statics qui ne sont pas pris en compte.
>
> > > À titre d'exemple après la commande :
>
> > > python manage.py collectstatic
>
> > > j'ai bien (entre autre) le dossier
> /usr/lib/python3.4/site-packages/django/contrib/admin/static/ de copié
> dans le répertoire voulu, mais si je me connecte à l'interface d'admin
> c'est un peu le bazar...
>
> > >
>
> > > Avec uWSGI ... bien rien ne se lance... donc là j'en suis
> totalement à zéro.
>
> > >
>
> > > Si quelqu'un a des petits conseils pour faire ce que je cherche ça
> serait sacrément cool smile
>
> > >
>
> > > Merci à tous.
>
> > >
>
> > > CEG
>
> > > _______________________________________________
>
> > > 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
>
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#7 26-08-2014 09:51:21

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

Re : Déploiement en production

Le 26 août 2014 à 10:41, Charlie Gentil <ceg _AT_ redaction-developpez.com> a écrit :

> Bonjour et merci pour ta réponse.

> Qu'entends tu pas "STATIC_URL dans ton template" ? (c'est pas plutôt de settings.py dont tu parles ). Pour le moment j'essaye déjà avec l'interface admin c'est à dire avec les templates django de base.

Si tu utilises l'interface d'admin, ce n'est effectivement pas le problème.

> En ce qui me concerne j'ai dans settings.py :
> STATIC_URL = os.path.join(BASE_DIR, './staticfiles/')
> STATIC_ROOT = os.path.join(BASE_DIR, './staticfiles/')

STATIC_URL est une URL. Il n'y a donc aucune raison d'y ajouter le BASE_DIR ni le ./

Cordialement,
Xavier Ordoquy,
Linovia.

Hors ligne

#8 26-08-2014 10:53:57

Stephane Kanschine
Membre
Inscription : 11-08-2010
Messages : 18

Re : Déploiement en production

Le mar. 26 août, vers 10:41, Charlie Gentil exprimait :
>
> et voici ce que j'ai dans /etc/nginx/sites-enabled/myconfig
> server {
>     listen localhost:8000;
>
>     location / {
>         proxy_pass http://127.0.0.1:8001;
>     }
>
>     location /static/ {
>         autoindex on;
>         alias /home/charlie/SITE/DJANGO/site/mainSite/staticfiles;
>     }
> }

Ton location /static/ est après ton location /, il n'est possiblement
jamais pris en compte.

Hors ligne

#9 26-08-2014 13:20:07

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

Re : Déploiement en production

Salut,

J'ai lu le deuxième lien et tout fait à la lettre excepté la partie PostgreSql.
Je bloque au lancement de gunicorn via l'exe guincorn_stat. Voici ce que j'ai en sortie :

[2014-08-26 14:14:39 +0200] [4365] [INFO] Starting gunicorn 19.1.1
[2014-08-26 14:14:39 +0200] [4365] [DEBUG] Arbiter booted
[2014-08-26 14:14:39 +0200] [4365] [INFO] Listening at: unix:/webapps/hello_django/run/gunicorn.sock (4365)
[2014-08-26 14:14:39 +0200] [4365] [INFO] Using worker: sync
[2014-08-26 14:14:39 +0200] [4375] [INFO] Booting worker with pid: 4375
[2014-08-26 14:14:39 +0200] [4376] [INFO] Booting worker with pid: 4376
[2014-08-26 14:14:39 +0200] [4377] [INFO] Booting worker with pid: 4377
[2014-08-26 14:14:39 +0200] [4365] [DEBUG] 3 workers
[2014-08-26 14:15:09 +0200] [4365] [DEBUG] 3 workers
[2014-08-26 14:15:24 +0200] [4365] [DEBUG] 3 workers
[2014-08-26 14:15:39 +0200] [4365] [DEBUG] 3 workers
[2014-08-26 14:15:54 +0200] [4365] [DEBUG] 3 workers
[2014-08-26 14:16:09 +0200] [4365] [DEBUG] 3 workers
[2014-08-26 14:16:24 +0200] [4365] [DEBUG] 3 workers
[2014-08-26 14:16:39 +0200] [4365] [DEBUG] 3 workers

... et ça continue...

À tout hasard, si vous aviez une autre solution que gunicorn-Nginx moins prise de tête je suis preneur... wink

D'avance merci à tous.



BonjourUn court billet ici http://sametmax.com/nginx-en-reverse-proxy-gunicorn-pour-vos-apps-django[1]/ aborde cet aspectEt un très long et complet ici http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor[2]/Bon courage



On 25 août 2014 20:23:55 CEST, Charlie Gentil <ceg _AT_ redaction-developpez.com> wrote:

http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang[3]/

Si pour l'utilisation de Gunicorn je n'ai aucun souci, l'utilisation de Ngnix me pose quelques soucis en particulier avec les fichiers statics qui ne sont pas pris en compte.À titre d'exemple après la commande : python manage.py[4] collectstaticj'ai bien (entre autre) le dossier /usr/lib/python3.4/site-packages/django/contrib/admin/static/ de copié dans le répertoire voulu, mais si je me connecte à l'interface d'admin c'est un peu le bazar...

Avec uWSGI ... bien rien ne se lance... donc là j'en suis totalement à zéro.

Si quelqu'un a des petits c
onseils
pour faire ce que je cherche ça serait sacrément cool smile

Merci à tous.

CEG


--------------------

http://lists.afpy.org/mailman/listinfo/django[5]




--------
[1] http://sametmax.com/nginx-en-reverse-proxy-gunicorn-pour-vos-apps-django
[2] http://michal.karzynski.pl/blog/2013/06/09/django-nginx-gunicorn-virtualenv-supervisor
[3] http://agiliq.com/blog/2013/08/minimal-nginx-and-gunicorn-configuration-for-djang
[4] http://manage.py
[5] http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#10 26-08-2014 14:32:54

Olivier Meunier
Membre
Inscription : 11-08-2010
Messages : 29

Re : Déploiement en production

Le 26/08/2014 14:20, Charlie Gentil a écrit :
> À tout hasard, si vous aviez une autre solution que gunicorn-Nginx
> moins prise de tête je suis preneur... wink

Ça peut être pas mal de commencer par faire marcher morceau par morceau.
Donc, oublions gunicorn pour le moment smile

1. Configurer nginx:

server {
     listen 80;
     server_name localhost;

     location / {
         proxy_pass http://127.0.0.1:8000/;
    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 <RACINE_DU_PROJECT>/_static/;
     }
}

Cette conf est la plus simple possible pour faire un reverse de base et
servir les static comme des static. (L'ordre des directives "location"
n'a aucune importance).

2. Configurer Django:

STATIC_ROOT = '<RACINE_DU_PROJECT>/_static'
STATIC_URL = '/static/'

3. Collecte

./manage.py collectstatic

Là, vérifie que tu as bien des fichiers dans _static de ton projet.

3. Lancer le serveur du projet :
./manage.py runserver --nostatic

On lui dit de ne pas servir les static pour se mettre dans une
configuration similaire à gunicorn, uwsgi, etc.

4. Aller sur http://localhost/

Si tout ceci fonctionne, tu pourras alors envisager de basculer à
gunicorn ou uwsgi (je conseille gunicorn pour démarrer, c'est plus simple)

5. Exercice bonus: si tu utilises MEDIA_ROOT / MEDIA_URL, ajouter sa
prise en charge dans nginx smile

Hors ligne

#11 26-08-2014 16:20:19

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

Re : Déploiement en production

J'ai suivi ton conseil, refais un simple projet et suivi ta démarche : les commentaires ci-dessous ...

Le mardi 26 août 2014, 15:32:54 Olivier Meunier a écrit :

> 1. Configurer nginx:
>
> server {
>      listen 80;
>      server_name localhost;
>
>      location / {
>          proxy_pass http://127.0.0.1:8000/;
>     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 <RACINE_DU_PROJECT>/_static/;
>      }
> }
>
> Cette conf est la plus simple possible pour faire un reverse de base et
> servir les static comme des static. (L'ordre des directives "location"
> n'a aucune importance).
OK. J'ai renseigné le fichier conf que j'ai créé dans /etc/nginx/sites-available et dont un lien existe dans /etc/nginx/sites-enabled
> 2. Configurer Django:
>
> STATIC_ROOT = '<RACINE_DU_PROJECT>/_static'
> STATIC_URL = '/static/'
OK
> 3. Collecte
>
> ./manage.py collectstatic
>
> Là, vérifie que tu as bien des fichiers dans _static de ton projet.
OK, je les ai. Cela me donne donc l'architecture suivante :
|monprojet
   |monprojet
       |...
   |_static
       |admin
   |manage.py

> 3. Lancer le serveur du projet :
> ./manage.py runserver --nostatic
>
> On lui dit de ne pas servir les static pour se mettre dans une
> configuration similaire à gunicorn, uwsgi, etc.
OK
> 4. Aller sur http://localhost/
Si je vais dans http://localhost/ j'ai une erreur 404... normal, je pense que c'est plutôt localhost:8000. Point positif sur cette page erreur j'ai un joli nginx/1.6.1, donc à priori ça fonctionne un peu wink.
Malheureusement, si je vais sur http://localhost:8000/admin la mise en page n'est pas faite.

Pour info, j'ai aussi rentré les lignes de config directement dans ngixn.conf. ==> même topo.
J'ai aussi ajouté un dossier static dans _static et y ai mis une copie d'admin, histoire de tester un peu tout... mais rien n'y fait.

Je commence à me demander si je vais pas utiliser le serveur de dev :-@ sad

> Si tout ceci fonctionne, tu pourras alors envisager de basculer à
> gunicorn ou uwsgi (je conseille gunicorn pour démarrer, c'est plus simple)
>
> 5. Exercice bonus: si tu utilises MEDIA_ROOT / MEDIA_URL, ajouter sa
> prise en charge dans nginx smile
>

Hors ligne

#12 26-08-2014 16:32:02

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Déploiement en production

Le 26/08/2014 17:20, Charlie Gentil a écrit :
> J'ai suivi ton conseil, refais un simple projet et suivi ta démarche : les commentaires ci-dessous ...
>
> Le mardi 26 août 2014, 15:32:54 Olivier Meunier a écrit :
>
>> 1. Configurer nginx:
>>
>> server {
>>      listen 80;
>>      server_name localhost;
>>
>>      location / {
>>          proxy_pass http://127.0.0.1:8000/;
>>     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 <RACINE_DU_PROJECT>/_static/;
>>      }
>> }
>>
>> Cette conf est la plus simple possible pour faire un reverse de base et
>> servir les static comme des static. (L'ordre des directives "location"
>> n'a aucune importance).
> OK. J'ai renseigné le fichier conf que j'ai créé dans /etc/nginx/sites-available et dont un lien existe dans /etc/nginx/sites-enabled
>> 2. Configurer Django:
>>
>> STATIC_ROOT = '<RACINE_DU_PROJECT>/_static'
>> STATIC_URL = '/static/'
> OK
>> 3. Collecte
>>
>> ./manage.py collectstatic
>>
>> Là, vérifie que tu as bien des fichiers dans _static de ton projet.
> OK, je les ai. Cela me donne donc l'architecture suivante :
> |monprojet
>    |monprojet
>        |...
>    |_static
>        |admin
>    |manage.py
>
>> 3. Lancer le serveur du projet :
>> ./manage.py runserver --nostatic
>>
>> On lui dit de ne pas servir les static pour se mettre dans une
>> configuration similaire à gunicorn, uwsgi, etc.
> OK
>> 4. Aller sur http://localhost/
> Si je vais dans http://localhost/ j'ai une erreur 404... normal, je pense que c'est plutôt localhost:8000. Point positif sur cette page erreur j'ai un joli nginx/1.6.1, donc à priori ça fonctionne un peu wink.
> Malheureusement, si je vais sur http://localhost:8000/admin la mise en page n'est pas faite.
Non c'est pas normal et localhost:8000 c'est le serveur de dev. Donc ça
doit bien être localhost/

Est-ce que tu vois les logs de la 404 dans ton server django?
Est-ce que tu peux regarder le fichier de log de nginx et voir ce qu'il
te dit sur cette 404.

Est-ce que tu peux joindre ton fichier nginx complet?

> Pour info, j'ai aussi rentré les lignes de config directement dans ngixn.conf. ==> même topo.
> J'ai aussi ajouté un dossier static dans _static et y ai mis une copie d'admin, histoire de tester un peu tout... mais rien n'y fait.
Pourquoi ferais-tu ça ? ça sert à rien.
> Je commence à me demander si je vais pas utiliser le serveur de dev :-@ sad
Utilise alwaysdata dans ce cas ce sera plus prudent.
>
>> Si tout ceci fonctionne, tu pourras alors envisager de basculer à
>> gunicorn ou uwsgi (je conseille gunicorn pour démarrer, c'est plus simple)
>>
>> 5. Exercice bonus: si tu utilises MEDIA_ROOT / MEDIA_URL, ajouter sa
>> prise en charge dans nginx smile
>>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#13 29-08-2014 07:31:52

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

Re : Déploiement en production

Bonjour,

Bon ben je bloque franchement ...

J'ai repris ta conf dans nginx.conf mais ai mis les lignes suivantes dans location /static/ :
location /static/ {
        alias /usr/lib/python3.4/site-packages/django/contrib/admin/static/;
     }

Histoire d'aller au plus simple.
J'ai même essayé ceci :
location /static/admin/css {
        alias /usr/lib/python3.4/site-packages/django/contrib/admin/static/admin/css;
     }

J'ai prendre soin de faire un restart de nginx et changer de port pour forcer le rafraichissement ... rien n'y fait... sad

C'est c*n ... django + gunicorn + nginx semblait simple sur le papier ...

Bonne journée à tous.



Le mardi 26 août 2014, 17:20:19 Charlie Gentil a écrit :
>
> J'ai suivi ton conseil, refais un simple projet et suivi ta démarche : les commentaires ci-dessous ...
>
> Le mardi 26 août 2014, 15:32:54 Olivier Meunier a écrit :
>
> > 1. Configurer nginx:
> >
> > server {
> >      listen 80;
> >      server_name localhost;
> >
> >      location / {
> >          proxy_pass http://127.0.0.1:8000/;
> >     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 <RACINE_DU_PROJECT>/_static/;
> >      }
> > }
> >
> > Cette conf est la plus simple possible pour faire un reverse de base et
> > servir les static comme des static. (L'ordre des directives "location"
> > n'a aucune importance).
> OK. J'ai renseigné le fichier conf que j'ai créé dans /etc/nginx/sites-available et dont un lien existe dans /etc/nginx/sites-enabled
> > 2. Configurer Django:
> >
> > STATIC_ROOT = '<RACINE_DU_PROJECT>/_static'
> > STATIC_URL = '/static/'
> OK
> > 3. Collecte
> >
> > ./manage.py collectstatic
> >
> > Là, vérifie que tu as bien des fichiers dans _static de ton projet.
> OK, je les ai. Cela me donne donc l'architecture suivante :
> |monprojet
>    |monprojet
>        |...
>    |_static
>        |admin
>    |manage.py
>
> > 3. Lancer le serveur du projet :
> > ./manage.py runserver --nostatic
> >
> > On lui dit de ne pas servir les static pour se mettre dans une
> > configuration similaire à gunicorn, uwsgi, etc.
> OK
> > 4. Aller sur http://localhost/
> Si je vais dans http://localhost/ j'ai une erreur 404... normal, je pense que c'est plutôt localhost:8000. Point positif sur cette page erreur j'ai un joli nginx/1.6.1, donc à priori ça fonctionne un peu wink.
> Malheureusement, si je vais sur http://localhost:8000/admin la mise en page n'est pas faite.
>
> Pour info, j'ai aussi rentré les lignes de config directement dans ngixn.conf. ==> même topo.
> J'ai aussi ajouté un dossier static dans _static et y ai mis une copie d'admin, histoire de tester un peu tout... mais rien n'y fait.
>
> Je commence à me demander si je vais pas utiliser le serveur de dev :-@ sad
>
> > Si tout ceci fonctionne, tu pourras alors envisager de basculer à
> > gunicorn ou uwsgi (je conseille gunicorn pour démarrer, c'est plus simple)
> >
> > 5. Exercice bonus: si tu utilises MEDIA_ROOT / MEDIA_URL, ajouter sa
> > prise en charge dans nginx smile
> >
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#14 29-08-2014 07:36:47

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Déploiement en production

Ah peux tu vérifier les droits d'accès de www-data aux fichiers ?

sudo su www-data
ls /data/site_django/static/;

Dans le alias il te faut mettre l'adresse de ton static_root.
Le 29 août 2014 08:32, "Charlie Gentil" <ceg _AT_ redaction-developpez.com> a
écrit :

> Bonjour,
>
> Bon ben je bloque franchement ...
>
> J'ai repris ta conf dans nginx.conf mais ai mis les lignes suivantes dans
> location /static/ :
> location /static/ {
>         alias
> /usr/lib/python3.4/site-packages/django/contrib/admin/static/;
>      }
>
> Histoire d'aller au plus simple.
> J'ai même essayé ceci :
> location /static/admin/css {
>         alias
> /usr/lib/python3.4/site-packages/django/contrib/admin/static/admin/css;
>      }
>
> J'ai prendre soin de faire un restart de nginx et changer de port pour
> forcer le rafraichissement ... rien n'y fait... sad
>
> C'est c*n ... django + gunicorn + nginx semblait simple sur le papier ...
>
> Bonne journée à tous.
>
>
>
> Le mardi 26 août 2014, 17:20:19 Charlie Gentil a écrit :
> >
> > J'ai suivi ton conseil, refais un simple projet et suivi ta démarche :
> les commentaires ci-dessous ...
> >
> > Le mardi 26 août 2014, 15:32:54 Olivier Meunier a écrit :
> >
> > > 1. Configurer nginx:
> > >
> > > server {
> > >      listen 80;
> > >      server_name localhost;
> > >
> > >      location / {
> > >          proxy_pass http://127.0.0.1:8000/;
> > >     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 <RACINE_DU_PROJECT>/_static/;
> > >      }
> > > }
> > >
> > > Cette conf est la plus simple possible pour faire un reverse de base et
> > > servir les static comme des static. (L'ordre des directives "location"
> > > n'a aucune importance).
> > OK. J'ai renseigné le fichier conf que j'ai créé dans
> /etc/nginx/sites-available et dont un lien existe dans
> /etc/nginx/sites-enabled
> > > 2. Configurer Django:
> > >
> > > STATIC_ROOT = '<RACINE_DU_PROJECT>/_static'
> > > STATIC_URL = '/static/'
> > OK
> > > 3. Collecte
> > >
> > > ./manage.py collectstatic
> > >
> > > Là, vérifie que tu as bien des fichiers dans _static de ton projet.
> > OK, je les ai. Cela me donne donc l'architecture suivante :
> > |monprojet
> >    |monprojet
> >        |...
> >    |_static
> >        |admin
> >    |manage.py
> >
> > > 3. Lancer le serveur du projet :
> > > ./manage.py runserver --nostatic
> > >
> > > On lui dit de ne pas servir les static pour se mettre dans une
> > > configuration similaire à gunicorn, uwsgi, etc.
> > OK
> > > 4. Aller sur http://localhost/
> > Si je vais dans http://localhost/ j'ai une erreur 404... normal, je
> pense que c'est plutôt localhost:8000. Point positif sur cette page erreur
> j'ai un joli nginx/1.6.1, donc à priori ça fonctionne un peu wink.
> > Malheureusement, si je vais sur http://localhost:8000/admin la mise en
> page n'est pas faite.
> >
> > Pour info, j'ai aussi rentré les lignes de config directement dans
> ngixn.conf. ==> même topo.
> > J'ai aussi ajouté un dossier static dans _static et y ai mis une copie
> d'admin, histoire de tester un peu tout... mais rien n'y fait.
> >
> > Je commence à me demander si je vais pas utiliser le serveur de dev :-@
> sad
> >
> > > Si tout ceci fonctionne, tu pourras alors envisager de basculer à
> > > gunicorn ou uwsgi (je conseille gunicorn pour démarrer, c'est plus
> simple)
> > >
> > > 5. Exercice bonus: si tu utilises MEDIA_ROOT / MEDIA_URL, ajouter sa
> > > prise en charge dans nginx smile
> > >
> > _______________________________________________
> > 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
>

Hors ligne

#15 29-08-2014 08:40:39

Bruno Renié
Membre
Inscription : 11-08-2010
Messages : 52

Re : Déploiement en production

On peut faire beaucop plus simple avec nginx. Plutôt que d'utiliser
les alias, regarder try_files.

Avec cette conf :

https://gist.github.com/brutasse/122e5b5bb0550a420862

Le root de nginx est /srv/www/monsite/public. Pour Django, il suffit
de mettre STATIC_ROOT à /srv/www/monsite/public/static. Le "try files
$uri @monsite" fait le reste : si un fichier matche l'URL il est servi
directement, sinon c'est gunicorn qui prend la requête. Il suffit
d'avoir le STATIC_ROOT correct et de lancer collectstatic.

Bruno

2014-08-29 8:36 GMT+02:00 Rémy Hubscher <hubscher.remy _AT_ gmail.com>:
> Ah peux tu vérifier les droits d'accès de www-data aux fichiers ?
>
> sudo su www-data
> ls /data/site_django/static/;
>
> Dans le alias il te faut mettre l'adresse de ton static_root.
>
> Le 29 août 2014 08:32, "Charlie Gentil" <ceg _AT_ redaction-developpez.com> a
> écrit :
>
>> Bonjour,
>>
>> Bon ben je bloque franchement ...
>>
>> J'ai repris ta conf dans nginx.conf mais ai mis les lignes suivantes dans
>> location /static/ :
>> location /static/ {
>>         alias
>> /usr/lib/python3.4/site-packages/django/contrib/admin/static/;
>>      }
>>
>> Histoire d'aller au plus simple.
>> J'ai même essayé ceci :
>> location /static/admin/css {
>>         alias
>> /usr/lib/python3.4/site-packages/django/contrib/admin/static/admin/css;
>>      }
>>
>> J'ai prendre soin de faire un restart de nginx et changer de port pour
>> forcer le rafraichissement ... rien n'y fait... sad
>>
>> C'est c*n ... django + gunicorn + nginx semblait simple sur le papier ...
>>
>> Bonne journée à tous.
>>
>>
>>
>> Le mardi 26 août 2014, 17:20:19 Charlie Gentil a écrit :
>> >
>> > J'ai suivi ton conseil, refais un simple projet et suivi ta démarche :
>> > les commentaires ci-dessous ...
>> >
>> > Le mardi 26 août 2014, 15:32:54 Olivier Meunier a écrit :
>> >
>> > > 1. Configurer nginx:
>> > >
>> > > server {
>> > >      listen 80;
>> > >      server_name localhost;
>> > >
>> > >      location / {
>> > >          proxy_pass http://127.0.0.1:8000/;
>> > >     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 <RACINE_DU_PROJECT>/_static/;
>> > >      }
>> > > }
>> > >
>> > > Cette conf est la plus simple possible pour faire un reverse de base
>> > > et
>> > > servir les static comme des static. (L'ordre des directives "location"
>> > > n'a aucune importance).
>> > OK. J'ai renseigné le fichier conf que j'ai créé dans
>> > /etc/nginx/sites-available et dont un lien existe dans
>> > /etc/nginx/sites-enabled
>> > > 2. Configurer Django:
>> > >
>> > > STATIC_ROOT = '<RACINE_DU_PROJECT>/_static'
>> > > STATIC_URL = '/static/'
>> > OK
>> > > 3. Collecte
>> > >
>> > > ./manage.py collectstatic
>> > >
>> > > Là, vérifie que tu as bien des fichiers dans _static de ton projet.
>> > OK, je les ai. Cela me donne donc l'architecture suivante :
>> > |monprojet
>> >    |monprojet
>> >        |...
>> >    |_static
>> >        |admin
>> >    |manage.py
>> >
>> > > 3. Lancer le serveur du projet :
>> > > ./manage.py runserver --nostatic
>> > >
>> > > On lui dit de ne pas servir les static pour se mettre dans une
>> > > configuration similaire à gunicorn, uwsgi, etc.
>> > OK
>> > > 4. Aller sur http://localhost/
>> > Si je vais dans http://localhost/ j'ai une erreur 404... normal, je
>> > pense que c'est plutôt localhost:8000. Point positif sur cette page erreur
>> > j'ai un joli nginx/1.6.1, donc à priori ça fonctionne un peu wink.
>> > Malheureusement, si je vais sur http://localhost:8000/admin la mise en
>> > page n'est pas faite.
>> >
>> > Pour info, j'ai aussi rentré les lignes de config directement dans
>> > ngixn.conf. ==> même topo.
>> > J'ai aussi ajouté un dossier static dans _static et y ai mis une copie
>> > d'admin, histoire de tester un peu tout... mais rien n'y fait.
>> >
>> > Je commence à me demander si je vais pas utiliser le serveur de dev :-@
>> > sad
>> >
>> > > Si tout ceci fonctionne, tu pourras alors envisager de basculer à
>> > > gunicorn ou uwsgi (je conseille gunicorn pour démarrer, c'est plus
>> > > simple)
>> > >
>> > > 5. Exercice bonus: si tu utilises MEDIA_ROOT / MEDIA_URL, ajouter sa
>> > > prise en charge dans nginx smile
>> > >
>> > _______________________________________________
>> > 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
>
>
> _______________________________________________
> django mailing list
> django _AT_ lists.afpy.org
> http://lists.afpy.org/mailman/listinfo/django

Hors ligne

#16 29-08-2014 08:42:35

Rémy HUBSCHER
Membre
Inscription : 11-08-2010
Messages : 161

Re : Déploiement en production

Bonjour Charlie,

Je vais encore faire un nouvel essai d'explication mais je pense que ton
problème ne vient ni de gunicorn, ni de nginx mais de ta compréhension
du fonctionnement des staticfiles.

En développement Django le fait pour toi il merge dans STATIC_URL les
répertoires /static/ de chaque apps.

En production, tu dois utiliser *STATIC_ROOT* et la commande *python
manage.py collectstatic
*
Nginx va proxifier ton app Django lancée par gunicorn ou uwsgi mais
c'est également lui qui va servir directement les fichiers static.
*
*Pour commencer concentre toi sur servir les staticfiles uniquement.*

*Fait ton collectstatic et *dans ton STATIC_ROOT ajoute un fichier
test.html* (contenant Hello World par exemple)
*
Tant que tu n'arrives pas à le charger avec http://localhost/test.html
ce n'est pas la peine d'aller plus loin.
*
Pour que nginx puisse lire ton fichier il faut que l'utilisateur qui
lance nginx puisse y accèder. Par défaut c'est www-data sur Ubuntu.

Si ton utilisateur est toto

Ce que je te recommande c'est de tout mettre dans
/srv/projects/<ton_project>

De définir STATIC_ROOT comme étant
*/src/projects/<ton_projet>/public/static/*
De définir STATIC_URL comme étant */static/*

Ensuite faire:

  sudo mkdir -p /srv/projects/<ton_project>/public/static
  sudo chown -R toto:www-data /srv/
  sudo find /srv -type d -exec chmod g+rs {} \;

Ensuite tu peux faire ton python manage.py collectstatic

Tu devrais voir tous les fichiers static de ton projet dans
*/src/projects/<ton_projet>/public/static/

*Avec ce genre de droits:*

*-rw-rw-r-- 1 toto www-data 12 août  29 09:41
/srv/projects/django-story/public/statics/test.html

root /srv/projects/<ton_projet>/public/;

location /static/ {
        alias /srv/projects/<ton_projet>/public/static/;
}

En esperant que ça t'aide,

— Rémy

Hors ligne

#17 29-08-2014 17:51:12

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

Re : Déploiement en production

Re bonjour à tous,

J'ai pu avancer positivement ... voila ou j'en suis :

J'ai pu trouver une configuration pour nginx qui ressemble à ceci :

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/;
           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/webapps/testNginx/testNgi/static;
            alias /home/webapps/mainSite/static;
       }
}
}


Avec l'arch suivante :
/home/webapps/mainSite/
    |manage.py
    |static
        |admin
        |....
    |....[/code]

et pour finir je lance le tout avec la commande suivante :
gunicorn mainSite.wsgi:application --bind=127.0.0.1 --daemon

J'accède à mon site par http://127.0.0.1.

Il me reste à améliorer tout ça, notamment la conf de nginx qui est actuellement issue en grande partie de plusieurs aides que j'ai pu trouver afin de limiter celle-ci qu'à un seul et unique site.


++
Le vendredi 29 août 2014, 08:31:52 Charlie Gentil a écrit :
>
> Bonjour,
>
> Bon ben je bloque franchement ...
>
> J'ai repris ta conf dans nginx.conf mais ai mis les lignes suivantes dans location /static/ :
> location /static/ {
>         alias /usr/lib/python3.4/site-packages/django/contrib/admin/static/;
>      }
>
> Histoire d'aller au plus simple.
> J'ai même essayé ceci :
> location /static/admin/css {
>         alias /usr/lib/python3.4/site-packages/django/contrib/admin/static/admin/css;
>      }
>
> J'ai prendre soin de faire un restart de nginx et changer de port pour forcer le rafraichissement ... rien n'y fait... sad
>
> C'est c*n ... django + gunicorn + nginx semblait simple sur le papier ...
>
> Bonne journée à tous.
>
>
>
> Le mardi 26 août 2014, 17:20:19 Charlie Gentil a écrit :
> >
> > J'ai suivi ton conseil, refais un simple projet et suivi ta démarche : les commentaires ci-dessous ...
> >
> > Le mardi 26 août 2014, 15:32:54 Olivier Meunier a écrit :
> >
> > > 1. Configurer nginx:
> > >
> > > server {
> > >      listen 80;
> > >      server_name localhost;
> > >
> > >      location / {
> > >          proxy_pass http://127.0.0.1:8000/;
> > >     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 <RACINE_DU_PROJECT>/_static/;
> > >      }
> > > }
> > >
> > > Cette conf est la plus simple possible pour faire un reverse de base et
> > > servir les static comme des static. (L'ordre des directives "location"
> > > n'a aucune importance).
> > OK. J'ai renseigné le fichier conf que j'ai créé dans /etc/nginx/sites-available et dont un lien existe dans /etc/nginx/sites-enabled
> > > 2. Configurer Django:
> > >
> > > STATIC_ROOT = '<RACINE_DU_PROJECT>/_static'
> > > STATIC_URL = '/static/'
> > OK
> > > 3. Collecte
> > >
> > > ./manage.py collectstatic
> > >
> > > Là, vérifie que tu as bien des fichiers dans _static de ton projet.
> > OK, je les ai. Cela me donne donc l'architecture suivante :
> > |monprojet
> >    |monprojet
> >        |...
> >    |_static
> >        |admin
> >    |manage.py
> >
> > > 3. Lancer le serveur du projet :
> > > ./manage.py runserver --nostatic
> > >
> > > On lui dit de ne pas servir les static pour se mettre dans une
> > > configuration similaire à gunicorn, uwsgi, etc.
> > OK
> > > 4. Aller sur http://localhost/
> > Si je vais dans http://localhost/ j'ai une erreur 404... normal, je pense que c'est plutôt localhost:8000. Point positif sur cette page erreur j'ai un joli nginx/1.6.1, donc à priori ça fonctionne un peu wink.
> > Malheureusement, si je vais sur http://localhost:8000/admin la mise en page n'est pas faite.
> >
> > Pour info, j'ai aussi rentré les lignes de config directement dans ngixn.conf. ==> même topo.
> > J'ai aussi ajouté un dossier static dans _static et y ai mis une copie d'admin, histoire de tester un peu tout... mais rien n'y fait.
> >
> > Je commence à me demander si je vais pas utiliser le serveur de dev :-@ sad
> >
> > > Si tout ceci fonctionne, tu pourras alors envisager de basculer à
> > > gunicorn ou uwsgi (je conseille gunicorn pour démarrer, c'est plus simple)
> > >
> > > 5. Exercice bonus: si tu utilises MEDIA_ROOT / MEDIA_URL, ajouter sa
> > > prise en charge dans nginx smile
> > >
> > _______________________________________________
> > 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

Hors ligne

Pied de page des forums