Bonjour à tous, j'ai développé une application Django qui permet de voir et convertir des modèles 3D dans différents formats.
L'application se sert de FreeCAD et quelques autre librairies ( python-collada (.dae), ifcopenshell (.ifc) ).
Le code source est sur https://framagit.org/freecad-france/FreeCADxConvert
J'ai développé l'application sur un serveur distant sur Ubuntu 16.04 et la version de Django est celle proposé par les dépôts d'Ubuntu (donc Django version 1.8.7 et python version 2.7.12).
Ça fonctionne plutôt bien avec le serveur de développement mais j'ai un problème pour déployer mon application avec apache ( version 2.4.18 ) et mod_wsgi (version 4.3.0).
Pour formuler autrement, lorsque j’exécute la commande suivante avec mon user "normal"
python manage.py runserver 0.0.0.0:9500
L'application est bien accessible et pleinement fonctionnelle à l'adresse freecad-france.com:9500
Pour déployer voilà ce que je fais :
Je clone le code source dans /var/www/html/
sudo git clone https://framagit.org/freecad-france/FreeCADxConvert.git FxC
J'attribue les droits nécessaire à www-data pour ce dossier
sudo chown -R :www-data FxC
Je modifie le fichier settings.py et je passe l'option DEBUG à False
Je lance la commande :
sudo python manage.py migrate
Ensuite je créé le fichier vhost (fxc.conf) pour apache ( dans /etc/apache2/site-available ) :
<VirtualHost *:80>
ServerName fxc.freecad-france.com
ServerAlias www.fxc.freecad-france.com
ServerAdmin contact@freecad-france.com
DocumentRoot /var/www/html/FxC
ErrorLog ${APACHE_LOG_DIR}/error-django.log
CustomLog ${APACHE_LOG_DIR}/access-django.log combined
#Django conf
Alias /static/ /var/www/html/FxC/appFxC/static/
Alias /media/ /var/www/html/FxC/FxC/media/
WSGIDaemonProcess daemon-fxc user=www-data group=www-data
WSGIProcessGroup daemon-fxc
WSGIScriptAlias / /var/www/html/FxC/FxC/wsgi.py
<Directory /var/www/html/FxC/FxC>
Order deny,allow
Allow from all
</Directory>
<Location "/media/">
SetHandler None
</Location>
</VirtualHost>
J'ai écrit le vhost à partir de divers exemples trouvé sur le net.
Et pour finir j'active le vhost et je relance apache:
sudo a2ensite fxc
sudo systemctl restart apache2
Maintenant si je tente d'accéder à fxc.freecad-france.com et bien… le comportement est aléatoire :/
Une fois ou deux ça à marché un peu, j'accède à la page index mais ça bug quand je tente d'uploader avec une erreur 500.
Des fois ça mouline pendant plusieurs seconde pour finir sur une erreur 500 et parfois 504.
error-django.log retourne :
[Sat Dec 10 15:06:10.653321 2016] [wsgi:error] [pid 7864] [client 2a01:e35:8a2d:c6b0:35af:8f1:905b:3244:51472] Timeout when reading response headers from daemon process 'daemon-fxc': /var/www/html/FxC/FxC/wsgi.py
[Sat Dec 10 15:06:16.537746 2016] [wsgi:error] [pid 7815] [client 2a01:e35:8a2d:c6b0:35af:8f1:905b:3244:51484] Truncated or oversized response headers received from daemon process 'daemon-fxc': /var/www/html/FxC/FxC/wsgi.py
acces-django.log retourne plusieurs ligne du genre :
::1 - - [10/Dec/2016:15:06:40 +0000] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.18 (Ubuntu) OpenSSL/1.0.2g mod_wsgi/4.3.0 Python/2.7.12 (internal dummy connection)"
::1 - - [10/Dec/2016:15:06:41 +0000] "OPTIONS * HTTP/1.0" 200 126 "-" "Apache/2.4.18 (Ubuntu) OpenSSL/1.0.2g mod_wsgi/4.3.0 Python/2.7.12 (internal dummy connection)"
Déjà merci d'avoir lu jusqu'ici :)
Je recherche donc de l'aide pour déployer cette application (comme ça je pourrais en faire un journal ;)
# Attends lundi...
Posté par François GUÉRIN (Mastodon) . Évalué à 2.
Je serai au boulot, je t'enverrai une copie de mes wgsgi / config apache… J'en ai quelques uns qui tournent, des apache + wsgi + django :)
La méthode est la suivante (de mémoire):
dans le wsgi.py :
Dans le fichier de conf apache2 :
WSGIDaemonProcess
Voila, c'est juste pour patienter…
# port salut, c'est marqué dessus.
Posté par NeoX . Évalué à 3.
dans tes logs d'erreurs
tu as
en gros apache n'attend pas assez longtemps que ton process wsgi.py renvoie ses reponses
soit faut que ton python tourne plus vite, soit qu'apache soit plus patient
là encore c'est marqué dessus, ton django renvoie des données partielles ou trop grosses pour que ca rentre dans le buffer de wsgi
il faut soit revoir comment fonctionne ton appli pour que les donnees soient plus petit, soit augmenté la taille du buffer wsgi.
sinon une autre piste qui est celle qu'on avait mis en place dans mon ancien boulot
- demarrer le serveur django comme un servir normal, comme tu le faisais en test, sur le port 8000
- configurer apache pour juste faire reverse proxy et recevoir le publique sur le port 80 et 443, pour renvoyer ensuite les requetes à 127.0.0.1:8000 (ton process django)
[^] # Re: port salut, c'est marqué dessus.
Posté par gaaaaaAab . Évalué à 3.
pas forcément. apache attend des données sur la sortie standard du process fils. Si apache n'a pas de réponse, ça peut aussi être parce que le fils s'est vautré, ou ne produit pas une sortie au format attendu par apache (manque de saut de ligne après les en-tête http, lignes de log du process redirigées vers la sortie standard, …). Et bien sûr, ça peut être que le traitement est trop long comme tu le mentionnes.
Le fait qu'il y ait des messages d'erreur différents selon les cas, ça pourrait aussi être que le process fils renvoie du junk, mais que de temps en temps, ça ressemble suffisamment à ce qu'apache attend pour qu'il lise une taille random (et du coup, ça marche pas).
Ça serait intéressant de voir le détail de ce que le process wsgi produit comme sortie.
# deployment checklist
Posté par Xavier Combelle (site web personnel) . Évalué à 3.
manifestement tu n'as pas lut la deployment checklist vu que la clé secrète est en clair dans ton repository
commence par l'appliquer
https://docs.djangoproject.com/en/1.8/howto/deployment/checklist/
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.