Crème CRM et Apache
#1
Ce Tutoriel sera fait de plusieurs parties. Je vais commencer par expliquer comment faire tourner Crème avec Apache et mod_wsgi.

Dans une deuxième partie, nous verrons comment utiliser uwsgi.

Le principal avantage de Mod_wsgi est que tout marche de manière assez correcte sans avoir beaucoup de configuration à faire. Effectivement les performances ne sont pas renversantes, mais pour un crème unique avec peu d'utilisateur cela peut convenir parfaitement.

Je vais partir du principe que vous savez correctement installer et configurer un apache et je ne donnerais que les morceaux de configuration correspondant à la configuration précise des choses pour Crème.

Vous trouverez plus de documentation ici et ici

ll faut commencer par installer mod_wsgi.

Si vous êtes sous debian ou ubuntu il vous faudra faire un
Code :
apt-get install libapache2-mod-wsgi

Ensuite la configuration est relativement simple. Il vous faut bien entendu créer une configuration de virtual host Apache pour votre Crème.

A l'intérieur de celle-ci vous devrez rajouter les lignes suivantes :

Code :
WSGIScriptAlias / /PATH_VERS_CREME/creme/django.wsgi
WSGIPythonPath /PATH_VERS_CREME

    Alias /site_media/ /PATH_VERS_CREME/creme/media/static/
    <Directory /PATH_VERS_CREME/creme/media/static>
        Options Indexes SymLinksIfOwnerMatch
        AllowOverride Limit FileInfo Indexes
        Order deny,allow
        Allow from all
    </Directory>


si vous utilisez un virtualenv pour que tout fonctionne correctement votre WSGIPYthonPath devra contenir en plus le chemin vers votre virtualenv soit :
Code :
WSGIPythonPath /PATH_VERS_CREME:/PATH_VERS_VIRTUALENV/lib/python2.7/site-packages

Voila, normalement tout devrait fonctionner. Si vous avez lu les liens donnés plus haut, vous avez déjà remarqué que notre configuration n'est pas en mode daemon alors que c'est la configuration qui est maintenant recommandée. C'est tout à fait vrai. Si vous voulez passer en mode daemon, je vous laisse suivre la documentation pour le faire.

Dans un prochain billet, j'expliquerais la mise en place d'une configuration avec uwsgi (qui est aujourd'hui l'outil que nous utilisons pour faire tourner nos Crème CRM).
  Répondre
#2
Bonjour,

Merci pour ce tutoriel.
Mon instal de crème fonctionne depuis longtemps, et je suis passé sur la version 1.5 sans trop de difficultés.
En revanche je lis votre préconisation pour le virtualhost et en particulier l'ajout de la ligne
Code :
WSGIPythonPath /PATH_VERS_CREME:/PATH_VERS_VIRTUALENV/lib/python2.7/site-packages
Je n'avais pas cette ligne dans mon virtualhost, et ça fonctionne.
J'ai essayé de l'ajouter (avec les bonnes valeurs pour le Path) : et là au restart d'Apache, j'obtiens un message d'erreur
Code :
Syntax error on line 19 of /etc/apache2/sites-enabled/creme.xxxxxx.com:
WSGIPythonPath cannot occur within <VirtualHost> section
Action 'configtest' failed.
J'ai donc mis la ligne après le
Code :
</VirtualHost>
, mais je doute que ça serve à grand chose...
Une idée ?
En revanche, j'ai une ligne en plus :
Code :
    Alias /site_media /srv/dataxxxx02/creme.xxxxxxx.com/creme_crm-1.5/creme/media/
Alias /static_media /srv/dataxxxx02/creme.xxxxxxx.com/creme_crm-1.5/creme/media/static
Ça marche, mais la première ligne est-elle indispensable ? Quand je la mets en commentaire, ça continuer à fonctionner (après un restart d'Apache), mais je n'ai pas dû l'inventer tout seul, donc je m'interroge sur son utilité...
  Répondre
#3
Alors la ligne sur le WSGIPythonPath est utile uniquement en cas de virtualenv spécifique à votre Crème. Si vous utilisez le python de votre système ou si vous avez modifié manuellement le fichier wsgi pour qu'il retrouve seul les packages python de votre virtualenv, elle est effectivement inutile.

La première ligne est peut être du à une ancienne discussion entre nous, par email sur les manière d'heberger Crème. Vérifiez bien que tout fonctionne correctement (téléchargement divers, affichage d'image uploadées dans Crème, etc ... )
  Répondre
#4
Bonjour,

Merci pour votre réponse.
Citation :Alors la ligne sur le WSGIPythonPath est utile uniquement en cas de virtualenv spécifique à votre Crème
En fait, mon post était plutôt relatif au message d'erreur d'Apache. Apparemment il n'accepte pas la ligne WSGIPythonpath dans le virtualhost.
Or j'ai bien un virtualenv (ou au moins j'ai essayé). Je suppose que ça fonctionne, puisque dans mon /usr/lib/python2.7, je n'ai pas de site-packages, et donc ni django, ni south, ni tout ce qui est nécessaire à Creme.
Donc suis-je le seul à avoir un message d'erreur au démarrage du serveur Apache lorsque la ligne WSGIPythonpath est dans le virtualhost ?

Citation :La première ligne est peut être du à une ancienne discussion entre nous, par email sur les manière d'heberger Crème
Au temps pour moi.
Comme ça fonctionne, je ne vais pas prendre le risque d'avoir des erreurs... donc je ne touche à rien !

Merci
  Répondre
#5
Bonsoir,

J'ai un soucis lors du passage de creme en mode apache avec wsgi.
Je precise que tout fonctionne bien avec le serveur embarqué.

Voici mon vhost :

Citation :
Code :
<VirtualHost *:80>
        ServerName creme

        WSGIScriptAlias / /home/vagrant/creme/creme_crm-2.0/creme/django.wsgi
    
        <Directory /home/vagrant/creme/creme_crm-2.0/creme>
                <Files django.wsgi>
                        Require all granted
                </Files>
        </Directory>
</VirtualHost>

              

Et voici l'erreur que j'ai dans les logs :
Citation :[Tue Aug 20 21:22:33.426348 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252] mod_wsgi (pid=2045): Target WSGI script '/home/vagrant/creme/creme_crm-2.0/creme/django.wsgi' cannot be loaded as Python module.
[Tue Aug 20 21:22:33.426621 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252] mod_wsgi (pid=2045): Exception occurred processing WSGI script '/home/vagrant/creme/creme_crm-2.0/creme/django.wsgi'.
[Tue Aug 20 21:22:33.427426 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252] Traceback (most recent call last):
[Tue Aug 20 21:22:33.427583 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "/home/vagrant/creme/creme_crm-2.0/creme/django.wsgi", line 12, in
[Tue Aug 20 21:22:33.427683 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]     application = get_wsgi_application()
[Tue Aug 20 21:22:33.427753 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "/usr/local/lib/python3.5/dist-packages/django/core/wsgi.py", line 13, in get_wsgi_application
[Tue Aug 20 21:22:33.427813 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]     django.setup(set_prefix=False)
[Tue Aug 20 21:22:33.427885 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "/usr/local/lib/python3.5/dist-packages/django/__init__.py", line 22, in setup
[Tue Aug 20 21:22:33.427968 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]     configure_logging(settings.LOGGING_CONFIG, settings.LOGGING)
[Tue Aug 20 21:22:33.428038 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "/usr/local/lib/python3.5/dist-packages/django/conf/__init__.py", line 56, in __getattr__
[Tue Aug 20 21:22:33.428081 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]     self._setup(name)
[Tue Aug 20 21:22:33.428126 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "/usr/local/lib/python3.5/dist-packages/django/conf/__init__.py", line 41, in _setup
[Tue Aug 20 21:22:33.428167 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]     self._wrapped = Settings(settings_module)
[Tue Aug 20 21:22:33.428225 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "/usr/local/lib/python3.5/dist-packages/django/conf/__init__.py", line 110, in __init__
[Tue Aug 20 21:22:33.428323 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]     mod = importlib.import_module(self.SETTINGS_MODULE)
[Tue Aug 20 21:22:33.428394 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "/usr/lib/python3.5/importlib/__init__.py", line 126, in import_module
[Tue Aug 20 21:22:33.428460 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]     return _bootstrap._gcd_import(name[level:], package, level)
[Tue Aug 20 21:22:33.428519 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "", line 986, in _gcd_import
[Tue Aug 20 21:22:33.428579 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "", line 969, in _find_and_load
[Tue Aug 20 21:22:33.428641 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "", line 944, in _find_and_load_unlocked
[Tue Aug 20 21:22:33.428713 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "", line 222, in _call_with_frames_removed
[Tue Aug 20 21:22:33.428763 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "", line 986, in _gcd_import
[Tue Aug 20 21:22:33.428809 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "", line 969, in _find_and_load
[Tue Aug 20 21:22:33.428868 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252]   File "", line 956, in _find_and_load_unlocked
[Tue Aug 20 21:22:33.428939 2019] [wsgi:error] [pid 2045:tid 140546450519808] [client 10.0.2.2:60252] ImportError: No module named 'creme'

Je précise que sur cette première machine de test je n'ai pas mis en place de virtualenv

Merci pour vos retours
  Répondre
#6
Je reviens avec un peu plus d'infos puisque j'ai réussi à tout faire fonctionner, en rajoutant la conf :

Code :
WSGIPythonPath /home/vagrant/creme/creme_crm-2.0


Néanmoins, cette conf ne peut pas être dans le VHost, comment faire dans le cas ou le serveur héberge plusieurs applications Python?
  Répondre
#7
Bonjour,

Effectivement, dans le cas où vous avez plusieurs application python dans plusieurs virtualenv, cela ne marchera pas.

Une solution que vous pouvez alors mettre en place c'est de faire en sore que les chemins nécessaire ( ceux vers votre virtualenv donc) soit ajoutés par votre fichier django.wsgi. (avec des sys.path.insert ou tout autre moyen)
  Répondre
#8
(22-08-2019, 10:19)jmarmand a écrit : Bonjour,

Effectivement,  dans le cas où vous avez plusieurs application python dans plusieurs virtualenv, cela ne marchera pas.

Une solution que vous pouvez alors mettre en place c'est de faire en sore que les chemins nécessaire ( ceux vers votre virtualenv donc) soit ajoutés par votre fichier django.wsgi.  (avec des sys.path.insert ou tout autre moyen)

Merci pour ce retour

N'étant pas très familier de Django, quelle sera la syntaxe du sys.path.insert?

Merci
  Répondre
#9
si vous voulez mettre en début de PythonPath un :
sys.path.insert(0, "VIRTUALENV_PATH")

sinon en fin de PythonPath:

sys.path.append("VIRTUALENV_PATH")

pour les librairies du virtualenv, j'ai plus l'habitude d'ajouter le chemin en position 0.

Dernière précisions c'est le chemin vers le répertoire site-package que vous devez ajouter. ( par exemple donc : '/home/creme_user/.virtualenvs/creme/lib/python2.7/site-packages/' )
  Répondre
#10
Bonjour ;
Je suis sur un serveur cloud non managé, j'ai installé creme crm et j'ai configuré un ficchier crmcon pour apache2
mais toujours le msg "You don't have permission to access this resource.

Apache/2.4.29 (Ubuntu)" s'affiche

voilà ma configurationpour apache2


ServerAdmin root@digital-crm.fr
ServerName digital-crm.fr
ServerAlias www.digital-crm.fr
DocumentRoot /root/creme_crm-2.0
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined

Alias /site_media /root/creme_crm-2.0/creme/media/static/

Options Indexes SymLinksIfOwnerMatch
AllowOverride Limit FileInfo Indexes
Order deny,allow
Allow from all



Alias /static /root/creme_crm-2.0/creme/static

Require all granted


Alias /static /root/creme_crm-2.0/creme/media

Require all granted




WSGIScriptAlias / /root/creme_crm-2.0/creme/django.wsgi



WSGIPythonPath /root/creme_crm-2.0:/root/Envs/creme_2_0/lib/python3.6/site-packages


Vous pouvez m'aider svp

merci;
  Répondre


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)