<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/">
	<channel>
		<title><![CDATA[Crème CRM - Tutoriels]]></title>
		<link>https://www.cremecrm.com/forum/</link>
		<description><![CDATA[Crème CRM - https://www.cremecrm.com/forum]]></description>
		<pubDate>Fri, 01 May 2026 23:06:02 +0000</pubDate>
		<generator>MyBB</generator>
		<item>
			<title><![CDATA[Installation de Crème CRM 2.8]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=287</link>
			<pubDate>Tue, 07 Apr 2026 13:54:31 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=287</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
<br />
<br />
Il s'agira ici d'installer Creme 2.8 soit depuis zéro, soit depuis une installation de Creme 2.7 (notez que vous ne devriez migrer que d'une version à la fois -- donc si vous êtes en 2.6, vous devez migrer vers 2.7 avant de pouvoir migrer vers 2.8 par exemple).<br />
<br />
<br />
<br />
Ce tutoriel d'installation parle des plateformes suivantes :<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">GNU/Linux</span> en se concentrant sur Debian & Ubuntu ; lorsque des noms de paquets sont donnés, ce sont les noms dans ces 2 distributions, et il vous faudra chercher les équivalents sur votre propre distribution (n'hésitez pas pas à nous indiquer si vous avez des noms de paquets différents -- ils peuvent changer selon les versions de Debian par example -- ou si vous avez installé sur une autre distribution, afin que nous puissions améliorer ce tutoriel).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Windows</span> ; attention l'installation sous Windows est un peu plus complexe à cause du manque par défaut d'un gestionnaire de paquets. En plus ce n'est pas la plateforme la plus testée (mais si vous avez des problèmes/retours/patches vous pouvez en parler dans les commentaires notamment).<br />
</li>
</ul>
Le code de Creme ne faisant pas spécialement de "linuxeries", l'installer sur d'autres Unix (comme MacOSX) ne devrait pas dans l'absolu poser de souci particulier. Il nous est cependant difficile pour le moment de vous indiquer une marche à suivre précise n'utilisant pas (encore) ces systèmes. Là encore, tout retour de personnes ayant essayé est le bienvenu ; nous savons par exemple que des gens font tourner Creme avec succès sur FreeBSD.<br />
<br />
<br />
<br />
Pour ce tutoriel d'installation de Crème CRM on va faire les choses du mieux possible. On va donc installer des choses qui pourraient vous sembler inutiles mais qui à terme permettront d'avoir une installation pérenne et qui ne rentrera pas en collision avec d'autres logiciels que vous pourriez vouloir installer. <br />
<br />
<br />
<br />
Ce tutoriel vous permet d'installer tout le nécessaire pour faire fonctionner Crème avec le serveur de développement intégré dans Django. Le serveur de développement n'est pas une façon pérenne de faire fonctionner une application Django. Mais c'est un moyen simple de vérifier que tout fonctionne et vous pouvez faire quelques tests avec pour vérifier que Crème vous convient.  Le tutoriel vous permettant d'utiliser Apache avec Crème (plus compliqué à faire fonctionner, mais c'est une façon pérenne de faire les choses) est le sujet d'un autre billet indiqué à la fin. <br />
<br />
<br />
<br />
Une remarque très importante : si l'utilisation du serveur de développement est déconseillé pour une utilisation sur du long terme dans le cadre d'une machine personnelle, elle est par contre totalement interdite dans le cadre d'un hébergement sur un serveur. Si vous comptez installer Crème  tout de suite sur un serveur, il ne faut pas, pas une seule seconde, utiliser le serveur de développement. En effet celui-ci est fait pour le test et rien d'autre. Il n'est pas prévu, ni en terme de performance ni en terme de sécurité, pour être utilisé dans un vrai contexte de production. <br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Avant propos</span></span><br />
<br />
<br />
<br />
Notre objectif est d'installer & configurer un environnement <a href="http://www.virtualenv.org/en/latest/" target="_blank" rel="noopener" class="mycode_url">Virtualenv</a>. Virtualenv vous permet en effet d'avoir plusieurs environnements virtuels Python. L’intérêt est de pouvoir cloisonner les dépendances par projet. Vous êtes ainsi sûr que votre Crème n’arrêtera pas de fonctionner juste parce que vous avez dû mettre à jour une librairie Python pour pouvoir installer un autre logiciel. On ne va pas se contenter d'installer Virtualenv et on va installer aussi <a href="http://www.doughellmann.com/docs/virtualenvwrapper" target="_blank" rel="noopener" class="mycode_url">Virtualenvwrapper</a> qui est une surcouche à Virtualenv et qui vous simplifiera les choses.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : nous allons installer Creme 2.8 en parallèle de votre installation de Creme 2.7, en dupliquant les données. Ainsi en cas de gros problèmes vous pourrez revenir à votre installation précédente, que nous n'aurons pas détruite ; les éventuelles nouvelles données rentrées dans Creme 2.8 seront évidemment absentes de votre vieille installation, mais il s'agit ici plutôt de détecter les gros dysfonctionnements que vous auriez immédiatement.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de Python</span></span><br />
<br />
<br />
<br />
Pour commencer, il vous faut avoir Python 3 (au moins 3.10) sur votre système ainsi que l'installeur 'pip' qui permet de télécharger & installer des paquets python.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Windows :</span><br />
<br />
Il faut vous rendre ici : <a href="https://www.python.org/downloads/windows/" target="_blank" rel="noopener" class="mycode_url">https://www.python.org/downloads/windows/</a><br />
<br />
L'installeur pour Windows contient l'interpréteur Python ainsi que 'pip'.<br />
<br />
Note: il est important que vous partiez d'une installation vide de Python ; si vous avez déjà des paquets externes pour Python qui ne sont pas installés dans un Virtual Env, ces derniers prendront le pas sur les paquets du Virtual Env (et donc de mauvaises versions de paquets pourront être utilisées empêchant Creme de fonctionner) (ce problème étant spécifique à Windows).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Linux :</span><br />
<br />
Utilisez le gestionnaire de paquet de votre distribution ; si vous êtes sous Debian ou Ubuntu il vous suffit de faire : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>sudo apt-get install python3<br />
sudo apt-get install python-setuptools<br />
sudo apt-get install python-pip</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation des logiciels externes</span></span><br />
<br />
<br />
<br />
En plus de Python il va vous falloir installer :<br />
<ul class="mycode_list"><li>Un serveur web compatible avec Python. Il y a le choix mais le grand classique reste Apache (version 2.4 actuellement). Comme indiqué plus haut vous pouvez aussi dans un premier temps utiliser le serveur de développement (inclus avec Django) avant de passer à un serveur de production comme Apache ou NginX.<br />
</li>
<li>Un serveur de base de données: MySQL (8.0.11 ou plus), MariaDB (10.5 ou plus) ou PostGreSQL (14 ou plus) ; dans un premier temps vous pouvez aussi tester avec une base SQLite (rien besoin d'installer c'est fourni avec Python).<br />
</li>
<li>Redis ; ça fonctionne avec des versions anciennes (3.X) ou récentes (4.X +) donc cela ne devrait pas être un problème (préférez les versions plus récentes évidemment): <a href="https://redis.io/download" target="_blank" rel="noopener" class="mycode_url">https://redis.io/download</a><br />
Note: sous Unix il est possible de s'en passer et d'utiliser une socket Unix afin de communiquer avec le serveur de job (vous pourrez regarder, une fois votre installation globalement fonctionnelle au setting JOBMANAGER_BROKER).<br />
</li>
</ul>
Sous Windows, <a href="http://www.wampserver.com/" target="_blank" rel="noopener" class="mycode_url">wampserver</a> vous facilitera sûrement la vie si vous comptez installer Apache et MySQL.<br />
<br />
<br />
<br />
Sous Linux, vérifiez que vous avez les paquets suivants (ce sont les noms sous Ubuntu ; ils peuvent être différents sous une autre distribution évidemment) :<br />
<ul class="mycode_list"><li>mysql-client & mysql-server (si vous utilisez MySQL)<br />
</li>
<li>postgresql & postgresql-client-common (si vous utilisez PostGreSQL)<br />
</li>
<li>redis-server (sauf si vous utilisez une socket Unix comme indiqué plus haut)<br />
</li>
<li>language-pack-fr<br />
</li>
</ul>
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">(Linux) Installation des bibliothèques "système"</span></span><br />
<br />
<br />
<br />
Pour pouvoir installer certains paquets dans votre environnement Python, il vous faudra certaines bibliothèques de développement afin de pouvoir compiler certains paquets.<br />
<br />
<br />
<br />
Avant d'aller plus loin, il faut que vous vérifiez que les packages suivants sont bien installés, sinon, installez les : <br />
<ul class="mycode_list"><li>python3-dev<br />
</li>
<li>libmysqlclient-dev (si vous utilisez MySQL)<br />
</li>
<li>libpq-dev  (si vous utilisez PostGreSQL)<br />
</li>
<li>libjpeg-dev (et potentiellement les autres bibliothèques de gestion d'images selon vos besoins, comme libpng*-dev, libtiff*-dev, libgif-dev...)<br />
</li>
<li>libcairo-dev<br />
</li>
</ul>
<br />
<br />
Là encore, il s'agit des noms sous Debian/Ubuntu ; sous Fedora le suffixe est plutôt"-devel", donc "libpq-dev" s’appellera par exemple "libpq-devel".<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de l'environnement virtuel</span></span><br />
<br />
<br />
<br />
Nous allons créer un environnement virtuel Python (<span style="font-style: italic;" class="mycode_i">virtualenv</span>) pour Crème, qui contiendra toutes les bibliothèques Python nécessaires dans les bonnes versions (donc sans que votre système n'aient à les fournir). <br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : créez un nouveau Virtualenv pour Creme 2.8, et gardez donc intact celui de de votre Creme 2.7 .<br />
<br />
<br />
<br />
Une fois cela fait et après avoir rechargé votre configuration, vous pouvez créer votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> en tapant la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>python3 -m venv ~/venv/creme_2_8</code></div></div><br />
<br />
Notes :<br />
<br />
 - "python3" désigne l'exécutable de Python 3 sur votre OS (sous Unix vous aurez souvent un lien python3.XX qui référence le même binaire).<br />
<br />
 -  on a choisi ici de créer un répertoire "venv" (qui pourrait contenir tous vos <span style="font-style: italic;" class="mycode_i">virtualenv</span>) dans votre répertoire HOME, mais ce n'est évidemment pas une obligation. Sous <span style="font-weight: bold;" class="mycode_b">Windows</span> le chemin ressemblerait plus à "C:\chemin\vers\nouveau\virtual\environment".<br />
<br />
<br />
<br />
Une fois que votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> est créé, il faut l'activer pour votre console. Vous allez en effet installer de nouveaux packages Python et faire des commandes Django et tout doit se faire dans votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>. <br />
<br />
<br />
<br />
Sous Unix+Bash, vous activez comme ceci :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>source ~/venv/creme_2_8/bin/activate</code></div></div><br />
<br />
Sous Windows avec l'invite de commande classique :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>&lt;chemin_vers_venv&gt;&#92;Scripts&#92;activate.bat</code></div></div><br />
<br />
La commande "deactivate" permet de sortir d'un <span style="font-style: italic;" class="mycode_i">virtualenv</span> pour revenir à votre environnement système classique. <br />
<br />
<br />
<br />
Pour plus de détails (si vous utilisez un autre système/shell par exemple), regardez la <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noopener" class="mycode_url">documentation officielle</a>.<br />
<br />
<br />
<br />
Maintenant que vous avez activé votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>, il vous faut installer le paquet creme-crm, qui installera aussi les dépendances nécessaires. Il existe des variantes, principalement pour choisir votre serveur de base de données (MySQL ou PostgreSQL -- SQLite n'ayant pas de besoin particulier). Les avantages et inconvénients des différents types de base sont expliqués plus bas si vous avez des doutes.<br />
<br />
<br />
<br />
Si vous souhaitez utiliser SQLite, il vous suffit de taper :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm~=2.8</code></div></div><br />
<br />
Pour MySQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[mysql]~=2.8</code></div></div><br />
<br />
Pour PostgreSQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[pgsql]~=2.8</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes sur MariaDB</span><br />
<br />
<br />
<br />
Si vous avez installé MariaDB plutôt que MySQL (paquet "<span style="font-style: italic;" class="mycode_i">libmariadbclient-dev</span>" sur Debian10), et que vous avez une erreur "<span style="font-weight: bold;" class="mycode_b"> /bin/sh: 1: mysql_config: not found</span>", créez le lien symbolique suivant :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>ln -s /usr/bin/mariadb_config /usr/bin/mysql_config</code></div></div><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes pour Windows:</span><br />
<br />
<br />
<br />
Certains paquets (comme "<span style="font-style: italic;" class="mycode_i">mysqlclient</span>") peuvent être retords à s'installer, et le site suivant, qui contient des paquets pré-compilés, pourrait grandement vous aider: <a href="https://www.lfd.uci.edu/~gohlke/pythonlibs/" target="_blank" rel="noopener" class="mycode_url">https://www.lfd.uci.edu/~gohlke/pythonlibs/</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Création de votre projet</span></span><br />
<br />
<br />
<br />
Dans Creme 2.8, une instance est bien séparée des sources de Creme elles-mêmes. Nous allons lancer une commande qui va créer un répertoire contenant entre autres la configuration de votre instance. Placez vous donc dans votre arborescence à un endroit adéquate, et faîtes :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_start_project my_project28</code></div></div><br />
<br />
Un répertoire "my_project28" a normalement été créé (note: c'est lui que vous devriez mettre sous version, avec git/mercurial/svn...). Déplacez vous dans ce répertoire (les commandes qui suivront partirons du principe qu'on est resté dans ce premier répertoire "my_project28") :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>cd my_project28</code></div></div><br />
<br />
Il contient principalement un autre répertoire s'appelant lui aussi "my_project28", dans lequel on trouve un fichier nommé "settings.py" qui va contenir la configuration de notre instance. Si vous ouvrez ce fichier vous trouverez quelques valeurs de bases définies par défaut, et pas mal d'explications sur les quelques valeurs qu'il reste à définir pour avoir une instance  fonctionnelle. On vous y explique aussi qu'il est important pour faire les choses proprement de séparer les <span style="font-style: italic;" class="mycode_i">settings</span> liés à votre projet, et ceux liés à une instance en particulier. Mettons que plusieurs développeurs interviennent sur le projet, avec chacun une instance du projet sur sa machine en local (chaque instance utilisant une base de données de test en local) ; on voit que certains paramètres vont être partagés au niveau du projet (la langue, les modules installés...), et certains vont être spécifiques à chaque instance (la base de données...).<br />
<br />
<br />
<br />
Éditez le fichier "my_project28/settings.py", et changez les valeurs suivantes, pour la langue et le fuseau horaire de base :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>LANGUAGE_CODE = 'fr'<br />
TIME_ZONE = 'Europe/Paris'</code></div></div><br />
Il faut aussi, pour un fonctionnement correct, définir le domaine sur lequel va être accessible votre instance (cela permet notamment lorsque des e-mails sont envoyés par Creme d'inclure des liens HTML vers des fiches Creme). Exemple :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>SITE_DOMAIN = 'http://creme.mon-entreprise.fr'</code></div></div><br />
Note: on garde la listes des apps -- les modules Creme/Django -- par défaut ; elle est contenue par le <span style="font-style: italic;" class="mycode_i">setting</span> INSTALLED_APP pour information. <br />
<br />
<br />
<br />
En ce qui concerne les paramètres liés à votre instance, les commentaires dans "settings.py" expliquent les différentes approches. Les administrateurs confirmés choisiront leur méthode préférée ; ici nous allons partir sur une méthode simple, facile à expliquer et à mettre en place. À la fin du fichier "settings.py", ajoutez ces quelques lignes qui importent les paramètres venant du fichier "local_settings.py" :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>try:<br />
    from .local_settings import *<br />
except ImportError:<br />
    pass</code></div></div><br />
<br />
Note: un fichier "my_project28/local_settings.py", que nous allons remplir juste après, a normalement déjà été créé par la commande "creme_start_project". Si vous optez pour une autre méthode pour gérer vos paramètres d'instances (comme la méthode à base de variables d'environnement), vous pourrez le supprimer.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une nouvelle installation</span></span><br />
<br />
<br />
<br />
Depuis le répertoire "my_project28/" (celui le plus haut niveau), lancez la commande suivante :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme build_secret_key --settings=my_project28.settings</code></div></div><br />
<br />
Celle-ci a généré votre clé secrète, qu'il faudra mettre dans votre "local_settings.py", dans la variable SECRET_KEY (entre les '', à la place de la valeur par défaut). <br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une migration depuis Creme 2.7</span></span><br />
<br />
<br />
<br />
Copiez les valeurs présentes dans les fichiers "settings.py" & "local_settings.py" de votre vieille installation dans ceux de votre projet, notamment SECRET_KEY & DATABASES (nous revenons sur cette dernière juste après évidemment).<br />
<br />
<br />
<br />
Dans votre installation de Creme 2.7, allez dans le répertoire configuré comme MEDIA_ROOT dans les vieux <span style="font-style: italic;" class="mycode_i">settings</span> ("my_project27/my_project27/media/upload" par défaut). Si vous avez utilisé des Documents dans Creme, ou bien exporté des factures/Devis en PDF, vous devriez avoir des sous-répertoires ("documents", "billing" etc...). Si c'est bien le cas, <span style="font-weight: bold;" class="mycode_b">copier</span> ces répertoires (et leur contenu évidemment) dans le répertoire MEDIA_ROOT du nouveau projet ("my_project28/my_project28/media/upload", par défaut).<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Configuration de la base de données</span></span><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Attention, en cas de migration depuis Creme 2.7</span>:  comme nous l'avons dit en introduction, nous allons dupliquer la base de données plutôt que d'en créer une nouvelle, donc n'oublier pas de <span style="font-weight: bold;" class="mycode_b">mettre le nom de votre nouvelle base</span> dans le fichier "local_settings.py" de votre projet. En effet comme il contient le nom de votre ancienne base, c'est celle-ci qui serait migrée (mas de panique si vous avez bien dupliqué au préalable, au pire votre ancienne base n'est pas perdu elle a juste un nouveau nom).<br />
<br />
<br />
<br />
Pour le moment, la variable DATABASES doit contenir la valeur suivante (que nous allons modifier/compléter par la suite) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        # Possible backends: 'postgresql', 'mysql', 'sqlite3'.<br />
        'ENGINE': 'django.db.backends.sqlite3',<br />
<br />
        # Name of the database, or path to the database file if using 'sqlite3'.<br />
        'NAME': BASE_DIR / 'db.sqlite3',<br />
<br />
        # Not used with sqlite3.<br />
        'USER': '',<br />
        'PASSWORD': '',<br />
<br />
        # Set to empty string for localhost. Not used with 'sqlite3'.<br />
        'HOST': '',<br />
<br />
        # Set to empty string for default. Not used with 'sqlite3'.<br />
        'PORT': '',<br />
<br />
        # Extra parameters for database connection.<br />
        # Consult backend module's document for available keywords.<br />
        # 'OPTIONS': {},<br />
    },<br />
}</code></div></div><br />
<br />
Avant de passer au déploiement de Crème proprement dit, on va devoir configurer la base de données. Creme est testé avec trois systèmes de gestion de base de données: SQLite, MySQL & PostgreSQL. Django permet aussi d'utiliser une base Oracle, mais nous n'avons jamais eu l'occasion de tester une telle configuration (mais pourquoi utiliser un SGBDR propriétaire quand l'offre libre est aussi bonne ?). Il existe aussi des <span style="font-style: italic;" class="mycode_i">backends</span> pour d'autres SGBDR (firebird, sqlserver ...) qui sont distribués à part de Django ; là encore nous ne les avons pas testés, et ne pouvons garantir leur fonctionnement (mais si vous avez essayé, vos retours sont évidemment les bienvenus, ne serait-ce que par curiosité technique).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">SQLite</span></span><br />
<br />
<br />
<br />
SQLite est surtout utile si vous êtes un développeur, afin de tester rapidement votre travail. C'est aussi envisageable si vous comptez utiliser Creme<br />
<br />
en tant qu'application monoposte et avec peu de données (c'est sûrement une mauvaise idée pour des dizaines de milliers de fiches). Si vous n'êtes pas dans ces 2 cas, nous vous <span style="font-weight: bold;" class="mycode_b">déconseillons vivement</span> une telle configuration.<br />
<br />
<br />
<br />
Si vous choisissez SQLite, la configuration est très simple (pas d'utilisateur ou de mot de passe) ; éditez la variable DATABASES de votre local_settings.py ainsi :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.sqlite3',<br />
        'NAME':     '/chemin/absolu/vers/un/fichier.db',<br />
        'HOST':     '',<br />
        'PORT':     '',<br />
    },<br />
}</code></div></div><br />
<br />
Vous devez évidemment mettre une chemin valide en tant que NAME (le fichier sera créé s'il n'existe pas, mais faites attention que Creme ait bien les permissions d'écrire dans le répertoire choisi).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : pour dupliquer une base SQLite il suffit de copier l'ancien fichier.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">MySQL</span></span><br />
<br />
<br />
<br />
MySQL est un choix classique pour un serveur de production ; il est très répandu et facile à configurer. En revanche, il n'est pas toujours possible de le configurer aussi finement qu'on le voudrait, et a tendance à voir ses performances varier étrangement au grès des versions (la plupart du temps dans le bon sens, mais pas toujours) . C'est donc un bon choix si vous le connaissez déjà, et que vous ne visez pas des volumes importants de données (pour quelques centaines de milliers de fiches ça devrait être satisfaisant -- ça dépend de votre matériel évidemment).<br />
<br />
<br />
<br />
Pour que Crème puisse utiliser MySQL, il faut créer une base de données et un utilisateur qui a les droits sur celle-ci. Vous pouvez bien entendu le faire en graphique grâce à un outil d'administration de BD.<br />
<br />
<br />
<br />
Voici comment le faire en console. Notez qu'en fonction de la version de MySQL les commandes peuvent changer ; les instructions suivantes fonctionnent avec MySQL 8 ; référez vous à la documentation de votre version de MySQL si les commandes ne fonctionnent pas.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> :<br />
<br />
- les versions 10.5 et supérieures sont officiellement gérées par Django. En revanche nous sommes tombés plusieurs fois sur des erreurs un peu ésotériques (c'est aussi vrai avec MySQL ceci dit) et ce n'est pas forcément la base que nous vous conseillerions.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. Par exemple dans PHPMyadmin, si vous allez sur votre ancienne base, il y  a un onglet "Opérations" qui contient une section "Copier la base de données vers" (qui permet de conserver les privilèges -- normalement la case pour les conserver est cochée par défaut). N'oubliez pas plus bas de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
D'abord logguez vous dans MySQL avec la commande suivante : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
<br />
Puis passez sur la base de configuration avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>use mysql;</code></div></div><br />
<br />
Ajoutez maintenant votre utilisateur (en remplaçant les valeurs d'exemple par vos propres valeurs) avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE USER 'cremeuser'@'localhost' IDENTIFIED BY '34jkfue1dioaA';</code></div></div><br />
<br />
Puis nous créons la base de données :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE DATABASE cremecrmdb;</code></div></div><br />
<br />
et enfin nous donnons à votre l'utilisateur toutes les permissions sur la base de données de Creme :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON cremecrmdb.* TO 'cremeuser'@'localhost' WITH GRANT OPTION;</code></div></div><br />
<br />
Éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez si nécessaire remplacer les noms de la base, de l'utilisateur et son mot de passe par les valeurs que vous avez défini précédemment)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.mysql',<br />
        'NAME':     'cremecrmdb',<br />
        'USER':     'cremeuser',<br />
        'PASSWORD': '34jkfue1dioaA',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">PostgreSQL</span></span><br />
<br />
<br />
<br />
PostgreSQL est sûrement le meilleur choix pour les volumes de données importants ; non seulement ses performances sont excellentes, mais c'est aussi le SGBDR le plus rigoureux en terme de cohérence des données.<br />
<br />
<br />
<br />
Les instructions du début de ce tutoriel étaient plutôt faites pour un déploiement avec MySQL ; aussi il va falloir installer des paquets supplémentaires si vous souhaitez utiliser PostgreSQL.<br />
<br />
<br />
<br />
Comme pour MySQL, il vous faut maintenant créer un utilisateur dédié à Creme, ainsi qu'une base sur lequel l'utilisateur a tous les droits. Là encore c'est possible en console comme en graphique (en graphique, le programme "pgAdmin III" fait un très bon travail).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : comme déjà dit, il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. N'oubliez pas ci-dessous de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
Lorsque c'est fait, éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez remplacer les noms de la base de l'utilisateur et son mot de passe par les valeurs que vous avez choisies juste avant)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.postgresql',<br />
        'NAME':     'nom_de_la_base',<br />
        'USER':     'nom_de_l_utilisateur',<br />
        'PASSWORD': 'm0t_de_p4&#36;&#36;',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Remplissage de la base de données</span></span><br />
<br />
<br />
<br />
Toujours dans le répertoire racine "my_project28/", tapez la commande suivante pour créer les tables de la base :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme migrate --settings=my_project28.settings</code></div></div><br />
Puis on remplit la base avec les données initiales (utilisateur administrateur, société initiale, configuration par défaut etc…) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_populate --settings=my_project28.settings</code></div></div><br />
<br />
Ne vous inquiétez pas des messages du genre <Disable populate for "vcfs": it does not have any "populate.py" script>, ils indiquent juste que certaines apps n'ont pas besoin de créer des données initiales.<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Génération des <span style="font-style: italic;" class="mycode_i">bundles d'assets</span> statiques</span></span><br />
<br />
<br />
<br />
Il s'agit de créer des fichiers optimisés pour le CSS et le JavaScript, ainsi que des images avec des noms pensés pour être mises en cache intelligemment :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme generatemedia --settings=my_project28.settings</code></div></div><br />
<br />
Voici la sortie que vous devriez avoir :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>Generating l10n.js with variation {'language': 'en'}<br />
Generating l10n.js with variation {'language': 'fr'}<br />
Generating lib.js with variation {}<br />
Generating main.js with variation {}<br />
Generating testlib.js with variation {}<br />
Generating testcore.js with variation {}<br />
Generating icecreammain.css with variation {}<br />
Generating chantillymain.css with variation {}</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Choix des apps installées</span></span><br />
<br />
<br />
<br />
Pour des raisons de simplicité, nous avons choisi d'installer Creme avec sa liste d'apps par défaut, qui couvre la plupart des besoins courants. Sont écartées de cette liste l'app "mobile" pour proposer en plus un ensemble de vues plus adaptées aux smartphones, et "polls" qui permet de faire des questionnaires/sondages internes.<br />
<br />
<br />
<br />
Creme étant modulaire, vous pouvez choisir plus finement les apps installées ; même si pour une première installation, vous devriez sûrement garder la liste de base (vous pouvez passer au chapitre suivant). Pour avoir une liste personnalisée, modifiez variable INSTALLED_APPS comme indiqué dans les commentaires de "project/settings.py".<br />
<br />
<br />
<br />
2 points importants :<br />
<br />
- vous ne pouvez enlever (en pratique mettez plutôt en commentaire avec un '#' en début de ligne) que les apps dans la section CREME OPTIONAL APPS, qui sont optionnelles comme l'indique le nom.<br />
<br />
- dans la liste sont indiquées des dépendances ; certaines apps nécessitent la présence d'autres apps. Cependant pas de craintes, si vous oubliez une dépendance, Creme générera une erreur assez claire à ce sujet.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Choix avant l'installation</span></span><br />
<br />
<br />
<br />
Si vous n'avez pas encore créé la base de données, vous pouvez juste commenter/dé-commenter les noms des apps optionnelles, avant de faire les étapes des chapitres précédents (migrate, creme_populate, generatemedia).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Ajouter des apps après l'installation</span></span><br />
<br />
<br />
<br />
Si vous souhaitez ajouter des apps après installation (ex: après plusieurs jours/mois d'utilisation un besoin apparaît), dé-commentez les apps voulues (toujours en respectant les dépendances -- ex: si vous voulez "events", "opportunities" doit aussi être dé-commenté), puis lancez les même commandes que pour l'installation initiale: migrate, creme_populate, generatemedia.<br />
<br />
<br />
<br />
(en effet il faut bien créer les nouvelles tables, les peupler, et aussi installer le nouveau JavaScript/CSS/...)<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Désinstaller une app après l'installation</span></span><br />
<br />
<br />
<br />
Il existe plusieurs mécanismes, comme la configuration visuelle du menu ou la désactivation des type de relation, qui permettent de rendre très peu visible une app globalement inutile, et vous devriez commencer par là (car aucun risque de casser quoi que ce soit). Mais si vous le souhaitez vraiment, vous pouvez réellement désinstaller une app.<br />
<br />
<br />
<br />
C'est une opération un peu délicate, car des données relatives à l'app que vous voulez désinstaller peuvent exister en base, et être reliées à des données qui elles ne doivent pas être supprimées (car relatives à des apps que vous garder), tout en gardant un système cohérent... Donc :<br />
<br />
<br />
<br />
- privilégiez les apps pour lesquelles vous n'avez pas créé de données (typiquement aucune fiche).<br />
<br />
- faites une sauvegarde avant.<br />
<br />
<br />
<br />
La désinstallation d'une app se fait grâce à une commande, "creme_uninstall". Notez qu'il faut désinstaller une app à la fois (c'est déjà assez délicat comme ça...) ; si vous voulez désinstaller plusieurs apps, alors appliquez la méthode de désinstallation plusieurs fois, en respectant là encore les dépendances (ex: pour désinstaller "events" et "opportunities", faites le dans cet ordre, pour qu'à aucun moment une app n'ait pas ses dépendances installées). L'app que vous désinstallez doit être présente dans votre INSTALLED_APPS.<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_uninstall --settings=my_project28.settings app_a_desinstaller</code></div></div><br />
<br />
Si tout s'est bien déroulé, la commande vous demandera une fois finie de mettre en commentaire l'app dans votre INSTALLED_CREME_APPS.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du serveur</span></span><br />
<br />
<br />
<br />
Une fois cela fait il ne nous reste plus qu'à lancer le serveur de test en faisant :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme runserver --settings=my_project28.settings</code></div></div><br />
<br />
Vous pouvez maintenant vous connecter sur <a href="http://localhost:8000" target="_blank" rel="noopener" class="mycode_url">http://localhost:8000</a> pour voir que votre Crème fonctionne. La commande 'creme_populate' vous a indiqué qu'elle a créé un utilisateur "root" (mot de passe "root") ; utilisez cet utilisateur pour vous connecter. Vous êtes <span style="font-weight: bold;" class="mycode_b">très vivement</span> encouragé à changer immédiatement le mot de passe  (dans le menu en haut > icône rouage > Utilisateurs).<br />
<br />
<br />
<br />
Mais, et je vais le répéter, ce serveur de développement n'est pas fait pour être utiliser dans un contexte de production. Par exemple, pour mettre en production avec Apache et mod_wsgi, vous pouvez suivre cet autre billet: <a href="https://www.cremecrm.com/forum/showthread.php?tid=110" target="_blank" rel="noopener" class="mycode_url">https://www.cremecrm.com/forum/showthread.php?tid=110</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du gestionnaire de jobs</span></span><br />
<br />
<br />
<br />
Certaines fonctionnalités (import des fichiers CSV/XLS, envoi des campagnes d'e-mails...) sont effectuées par des jobs tournant en parallèle du serveur Web. Ces jobs sont gérés par un gestionnaire qui s'occupent de créer ces processus lorsque c'est nécessaire.<br />
<br />
<br />
<br />
Ce gestionnaire doit être lancé à part, et tourner en permanence  ; si ce n'est pas le cas, la majorité de Creme fonctionnera parfaitement, mais pas les fonctionnalités basées sur les jobs. Si vous allez sur la liste des jobs (menu > Outils > Jobs) un message d'erreur vous indiquera si le gestionnaire est injoignable. Pour lancer le gestionnaire :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_job_manager --settings=my_project28.settings</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mise à jour</span></span><br />
<br />
<br />
<br />
Il est évidemment conseillé de régulièrement faire des sauvegarde de votre base de données, ainsi que des fichiers télé-versés dans "my_project28/media/upload/" ; c'est d'autant plus vrai avant une mise-à-jour.<br />
<br />
<br />
<br />
Vous pouvez vous tenir à jour des nouvelles <span style="font-style: italic;" class="mycode_i">releases</span> grâce par exemple à la <a href="https://pypi.org/project/creme-crm/#history" target="_blank" rel="noopener" class="mycode_url">page du paquet sur pyPI</a> qui explique comment faire faire (par exemple en suivant le flux RSS fait pour).<br />
<br />
<br />
<br />
Plus tard lorsque sortiront des versions de corrections pour Creme2.6, vous pourrez mettre à jour Creme et ses dépendances avec (adaptez avec le tag utilisé auparavant suivant votre SGBD -- MySQL dans cet exemple) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install -U creme-crm[mysql]==2.8.XYZ</code></div></div><br />
<br />
Le fichier CHANGELOG.TXT contient les nouveautés, ainsi que des notes sur les commandes. Dans le doute vous pouvez toujours mettre à jour la base de données avec les commandes "migrate" & "creme_populate"  (au pire les commandes ne feront rien) et ré-générer les <span style="font-style: italic;" class="mycode_i">assets</span> statiques comme au dessus avec "generatemedia".]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
<br />
<br />
Il s'agira ici d'installer Creme 2.8 soit depuis zéro, soit depuis une installation de Creme 2.7 (notez que vous ne devriez migrer que d'une version à la fois -- donc si vous êtes en 2.6, vous devez migrer vers 2.7 avant de pouvoir migrer vers 2.8 par exemple).<br />
<br />
<br />
<br />
Ce tutoriel d'installation parle des plateformes suivantes :<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">GNU/Linux</span> en se concentrant sur Debian & Ubuntu ; lorsque des noms de paquets sont donnés, ce sont les noms dans ces 2 distributions, et il vous faudra chercher les équivalents sur votre propre distribution (n'hésitez pas pas à nous indiquer si vous avez des noms de paquets différents -- ils peuvent changer selon les versions de Debian par example -- ou si vous avez installé sur une autre distribution, afin que nous puissions améliorer ce tutoriel).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Windows</span> ; attention l'installation sous Windows est un peu plus complexe à cause du manque par défaut d'un gestionnaire de paquets. En plus ce n'est pas la plateforme la plus testée (mais si vous avez des problèmes/retours/patches vous pouvez en parler dans les commentaires notamment).<br />
</li>
</ul>
Le code de Creme ne faisant pas spécialement de "linuxeries", l'installer sur d'autres Unix (comme MacOSX) ne devrait pas dans l'absolu poser de souci particulier. Il nous est cependant difficile pour le moment de vous indiquer une marche à suivre précise n'utilisant pas (encore) ces systèmes. Là encore, tout retour de personnes ayant essayé est le bienvenu ; nous savons par exemple que des gens font tourner Creme avec succès sur FreeBSD.<br />
<br />
<br />
<br />
Pour ce tutoriel d'installation de Crème CRM on va faire les choses du mieux possible. On va donc installer des choses qui pourraient vous sembler inutiles mais qui à terme permettront d'avoir une installation pérenne et qui ne rentrera pas en collision avec d'autres logiciels que vous pourriez vouloir installer. <br />
<br />
<br />
<br />
Ce tutoriel vous permet d'installer tout le nécessaire pour faire fonctionner Crème avec le serveur de développement intégré dans Django. Le serveur de développement n'est pas une façon pérenne de faire fonctionner une application Django. Mais c'est un moyen simple de vérifier que tout fonctionne et vous pouvez faire quelques tests avec pour vérifier que Crème vous convient.  Le tutoriel vous permettant d'utiliser Apache avec Crème (plus compliqué à faire fonctionner, mais c'est une façon pérenne de faire les choses) est le sujet d'un autre billet indiqué à la fin. <br />
<br />
<br />
<br />
Une remarque très importante : si l'utilisation du serveur de développement est déconseillé pour une utilisation sur du long terme dans le cadre d'une machine personnelle, elle est par contre totalement interdite dans le cadre d'un hébergement sur un serveur. Si vous comptez installer Crème  tout de suite sur un serveur, il ne faut pas, pas une seule seconde, utiliser le serveur de développement. En effet celui-ci est fait pour le test et rien d'autre. Il n'est pas prévu, ni en terme de performance ni en terme de sécurité, pour être utilisé dans un vrai contexte de production. <br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Avant propos</span></span><br />
<br />
<br />
<br />
Notre objectif est d'installer & configurer un environnement <a href="http://www.virtualenv.org/en/latest/" target="_blank" rel="noopener" class="mycode_url">Virtualenv</a>. Virtualenv vous permet en effet d'avoir plusieurs environnements virtuels Python. L’intérêt est de pouvoir cloisonner les dépendances par projet. Vous êtes ainsi sûr que votre Crème n’arrêtera pas de fonctionner juste parce que vous avez dû mettre à jour une librairie Python pour pouvoir installer un autre logiciel. On ne va pas se contenter d'installer Virtualenv et on va installer aussi <a href="http://www.doughellmann.com/docs/virtualenvwrapper" target="_blank" rel="noopener" class="mycode_url">Virtualenvwrapper</a> qui est une surcouche à Virtualenv et qui vous simplifiera les choses.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : nous allons installer Creme 2.8 en parallèle de votre installation de Creme 2.7, en dupliquant les données. Ainsi en cas de gros problèmes vous pourrez revenir à votre installation précédente, que nous n'aurons pas détruite ; les éventuelles nouvelles données rentrées dans Creme 2.8 seront évidemment absentes de votre vieille installation, mais il s'agit ici plutôt de détecter les gros dysfonctionnements que vous auriez immédiatement.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de Python</span></span><br />
<br />
<br />
<br />
Pour commencer, il vous faut avoir Python 3 (au moins 3.10) sur votre système ainsi que l'installeur 'pip' qui permet de télécharger & installer des paquets python.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Windows :</span><br />
<br />
Il faut vous rendre ici : <a href="https://www.python.org/downloads/windows/" target="_blank" rel="noopener" class="mycode_url">https://www.python.org/downloads/windows/</a><br />
<br />
L'installeur pour Windows contient l'interpréteur Python ainsi que 'pip'.<br />
<br />
Note: il est important que vous partiez d'une installation vide de Python ; si vous avez déjà des paquets externes pour Python qui ne sont pas installés dans un Virtual Env, ces derniers prendront le pas sur les paquets du Virtual Env (et donc de mauvaises versions de paquets pourront être utilisées empêchant Creme de fonctionner) (ce problème étant spécifique à Windows).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Linux :</span><br />
<br />
Utilisez le gestionnaire de paquet de votre distribution ; si vous êtes sous Debian ou Ubuntu il vous suffit de faire : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>sudo apt-get install python3<br />
sudo apt-get install python-setuptools<br />
sudo apt-get install python-pip</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation des logiciels externes</span></span><br />
<br />
<br />
<br />
En plus de Python il va vous falloir installer :<br />
<ul class="mycode_list"><li>Un serveur web compatible avec Python. Il y a le choix mais le grand classique reste Apache (version 2.4 actuellement). Comme indiqué plus haut vous pouvez aussi dans un premier temps utiliser le serveur de développement (inclus avec Django) avant de passer à un serveur de production comme Apache ou NginX.<br />
</li>
<li>Un serveur de base de données: MySQL (8.0.11 ou plus), MariaDB (10.5 ou plus) ou PostGreSQL (14 ou plus) ; dans un premier temps vous pouvez aussi tester avec une base SQLite (rien besoin d'installer c'est fourni avec Python).<br />
</li>
<li>Redis ; ça fonctionne avec des versions anciennes (3.X) ou récentes (4.X +) donc cela ne devrait pas être un problème (préférez les versions plus récentes évidemment): <a href="https://redis.io/download" target="_blank" rel="noopener" class="mycode_url">https://redis.io/download</a><br />
Note: sous Unix il est possible de s'en passer et d'utiliser une socket Unix afin de communiquer avec le serveur de job (vous pourrez regarder, une fois votre installation globalement fonctionnelle au setting JOBMANAGER_BROKER).<br />
</li>
</ul>
Sous Windows, <a href="http://www.wampserver.com/" target="_blank" rel="noopener" class="mycode_url">wampserver</a> vous facilitera sûrement la vie si vous comptez installer Apache et MySQL.<br />
<br />
<br />
<br />
Sous Linux, vérifiez que vous avez les paquets suivants (ce sont les noms sous Ubuntu ; ils peuvent être différents sous une autre distribution évidemment) :<br />
<ul class="mycode_list"><li>mysql-client & mysql-server (si vous utilisez MySQL)<br />
</li>
<li>postgresql & postgresql-client-common (si vous utilisez PostGreSQL)<br />
</li>
<li>redis-server (sauf si vous utilisez une socket Unix comme indiqué plus haut)<br />
</li>
<li>language-pack-fr<br />
</li>
</ul>
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">(Linux) Installation des bibliothèques "système"</span></span><br />
<br />
<br />
<br />
Pour pouvoir installer certains paquets dans votre environnement Python, il vous faudra certaines bibliothèques de développement afin de pouvoir compiler certains paquets.<br />
<br />
<br />
<br />
Avant d'aller plus loin, il faut que vous vérifiez que les packages suivants sont bien installés, sinon, installez les : <br />
<ul class="mycode_list"><li>python3-dev<br />
</li>
<li>libmysqlclient-dev (si vous utilisez MySQL)<br />
</li>
<li>libpq-dev  (si vous utilisez PostGreSQL)<br />
</li>
<li>libjpeg-dev (et potentiellement les autres bibliothèques de gestion d'images selon vos besoins, comme libpng*-dev, libtiff*-dev, libgif-dev...)<br />
</li>
<li>libcairo-dev<br />
</li>
</ul>
<br />
<br />
Là encore, il s'agit des noms sous Debian/Ubuntu ; sous Fedora le suffixe est plutôt"-devel", donc "libpq-dev" s’appellera par exemple "libpq-devel".<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de l'environnement virtuel</span></span><br />
<br />
<br />
<br />
Nous allons créer un environnement virtuel Python (<span style="font-style: italic;" class="mycode_i">virtualenv</span>) pour Crème, qui contiendra toutes les bibliothèques Python nécessaires dans les bonnes versions (donc sans que votre système n'aient à les fournir). <br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : créez un nouveau Virtualenv pour Creme 2.8, et gardez donc intact celui de de votre Creme 2.7 .<br />
<br />
<br />
<br />
Une fois cela fait et après avoir rechargé votre configuration, vous pouvez créer votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> en tapant la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>python3 -m venv ~/venv/creme_2_8</code></div></div><br />
<br />
Notes :<br />
<br />
 - "python3" désigne l'exécutable de Python 3 sur votre OS (sous Unix vous aurez souvent un lien python3.XX qui référence le même binaire).<br />
<br />
 -  on a choisi ici de créer un répertoire "venv" (qui pourrait contenir tous vos <span style="font-style: italic;" class="mycode_i">virtualenv</span>) dans votre répertoire HOME, mais ce n'est évidemment pas une obligation. Sous <span style="font-weight: bold;" class="mycode_b">Windows</span> le chemin ressemblerait plus à "C:\chemin\vers\nouveau\virtual\environment".<br />
<br />
<br />
<br />
Une fois que votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> est créé, il faut l'activer pour votre console. Vous allez en effet installer de nouveaux packages Python et faire des commandes Django et tout doit se faire dans votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>. <br />
<br />
<br />
<br />
Sous Unix+Bash, vous activez comme ceci :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>source ~/venv/creme_2_8/bin/activate</code></div></div><br />
<br />
Sous Windows avec l'invite de commande classique :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>&lt;chemin_vers_venv&gt;&#92;Scripts&#92;activate.bat</code></div></div><br />
<br />
La commande "deactivate" permet de sortir d'un <span style="font-style: italic;" class="mycode_i">virtualenv</span> pour revenir à votre environnement système classique. <br />
<br />
<br />
<br />
Pour plus de détails (si vous utilisez un autre système/shell par exemple), regardez la <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noopener" class="mycode_url">documentation officielle</a>.<br />
<br />
<br />
<br />
Maintenant que vous avez activé votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>, il vous faut installer le paquet creme-crm, qui installera aussi les dépendances nécessaires. Il existe des variantes, principalement pour choisir votre serveur de base de données (MySQL ou PostgreSQL -- SQLite n'ayant pas de besoin particulier). Les avantages et inconvénients des différents types de base sont expliqués plus bas si vous avez des doutes.<br />
<br />
<br />
<br />
Si vous souhaitez utiliser SQLite, il vous suffit de taper :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm~=2.8</code></div></div><br />
<br />
Pour MySQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[mysql]~=2.8</code></div></div><br />
<br />
Pour PostgreSQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[pgsql]~=2.8</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes sur MariaDB</span><br />
<br />
<br />
<br />
Si vous avez installé MariaDB plutôt que MySQL (paquet "<span style="font-style: italic;" class="mycode_i">libmariadbclient-dev</span>" sur Debian10), et que vous avez une erreur "<span style="font-weight: bold;" class="mycode_b"> /bin/sh: 1: mysql_config: not found</span>", créez le lien symbolique suivant :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>ln -s /usr/bin/mariadb_config /usr/bin/mysql_config</code></div></div><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes pour Windows:</span><br />
<br />
<br />
<br />
Certains paquets (comme "<span style="font-style: italic;" class="mycode_i">mysqlclient</span>") peuvent être retords à s'installer, et le site suivant, qui contient des paquets pré-compilés, pourrait grandement vous aider: <a href="https://www.lfd.uci.edu/~gohlke/pythonlibs/" target="_blank" rel="noopener" class="mycode_url">https://www.lfd.uci.edu/~gohlke/pythonlibs/</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Création de votre projet</span></span><br />
<br />
<br />
<br />
Dans Creme 2.8, une instance est bien séparée des sources de Creme elles-mêmes. Nous allons lancer une commande qui va créer un répertoire contenant entre autres la configuration de votre instance. Placez vous donc dans votre arborescence à un endroit adéquate, et faîtes :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_start_project my_project28</code></div></div><br />
<br />
Un répertoire "my_project28" a normalement été créé (note: c'est lui que vous devriez mettre sous version, avec git/mercurial/svn...). Déplacez vous dans ce répertoire (les commandes qui suivront partirons du principe qu'on est resté dans ce premier répertoire "my_project28") :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>cd my_project28</code></div></div><br />
<br />
Il contient principalement un autre répertoire s'appelant lui aussi "my_project28", dans lequel on trouve un fichier nommé "settings.py" qui va contenir la configuration de notre instance. Si vous ouvrez ce fichier vous trouverez quelques valeurs de bases définies par défaut, et pas mal d'explications sur les quelques valeurs qu'il reste à définir pour avoir une instance  fonctionnelle. On vous y explique aussi qu'il est important pour faire les choses proprement de séparer les <span style="font-style: italic;" class="mycode_i">settings</span> liés à votre projet, et ceux liés à une instance en particulier. Mettons que plusieurs développeurs interviennent sur le projet, avec chacun une instance du projet sur sa machine en local (chaque instance utilisant une base de données de test en local) ; on voit que certains paramètres vont être partagés au niveau du projet (la langue, les modules installés...), et certains vont être spécifiques à chaque instance (la base de données...).<br />
<br />
<br />
<br />
Éditez le fichier "my_project28/settings.py", et changez les valeurs suivantes, pour la langue et le fuseau horaire de base :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>LANGUAGE_CODE = 'fr'<br />
TIME_ZONE = 'Europe/Paris'</code></div></div><br />
Il faut aussi, pour un fonctionnement correct, définir le domaine sur lequel va être accessible votre instance (cela permet notamment lorsque des e-mails sont envoyés par Creme d'inclure des liens HTML vers des fiches Creme). Exemple :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>SITE_DOMAIN = 'http://creme.mon-entreprise.fr'</code></div></div><br />
Note: on garde la listes des apps -- les modules Creme/Django -- par défaut ; elle est contenue par le <span style="font-style: italic;" class="mycode_i">setting</span> INSTALLED_APP pour information. <br />
<br />
<br />
<br />
En ce qui concerne les paramètres liés à votre instance, les commentaires dans "settings.py" expliquent les différentes approches. Les administrateurs confirmés choisiront leur méthode préférée ; ici nous allons partir sur une méthode simple, facile à expliquer et à mettre en place. À la fin du fichier "settings.py", ajoutez ces quelques lignes qui importent les paramètres venant du fichier "local_settings.py" :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>try:<br />
    from .local_settings import *<br />
except ImportError:<br />
    pass</code></div></div><br />
<br />
Note: un fichier "my_project28/local_settings.py", que nous allons remplir juste après, a normalement déjà été créé par la commande "creme_start_project". Si vous optez pour une autre méthode pour gérer vos paramètres d'instances (comme la méthode à base de variables d'environnement), vous pourrez le supprimer.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une nouvelle installation</span></span><br />
<br />
<br />
<br />
Depuis le répertoire "my_project28/" (celui le plus haut niveau), lancez la commande suivante :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme build_secret_key --settings=my_project28.settings</code></div></div><br />
<br />
Celle-ci a généré votre clé secrète, qu'il faudra mettre dans votre "local_settings.py", dans la variable SECRET_KEY (entre les '', à la place de la valeur par défaut). <br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une migration depuis Creme 2.7</span></span><br />
<br />
<br />
<br />
Copiez les valeurs présentes dans les fichiers "settings.py" & "local_settings.py" de votre vieille installation dans ceux de votre projet, notamment SECRET_KEY & DATABASES (nous revenons sur cette dernière juste après évidemment).<br />
<br />
<br />
<br />
Dans votre installation de Creme 2.7, allez dans le répertoire configuré comme MEDIA_ROOT dans les vieux <span style="font-style: italic;" class="mycode_i">settings</span> ("my_project27/my_project27/media/upload" par défaut). Si vous avez utilisé des Documents dans Creme, ou bien exporté des factures/Devis en PDF, vous devriez avoir des sous-répertoires ("documents", "billing" etc...). Si c'est bien le cas, <span style="font-weight: bold;" class="mycode_b">copier</span> ces répertoires (et leur contenu évidemment) dans le répertoire MEDIA_ROOT du nouveau projet ("my_project28/my_project28/media/upload", par défaut).<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Configuration de la base de données</span></span><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Attention, en cas de migration depuis Creme 2.7</span>:  comme nous l'avons dit en introduction, nous allons dupliquer la base de données plutôt que d'en créer une nouvelle, donc n'oublier pas de <span style="font-weight: bold;" class="mycode_b">mettre le nom de votre nouvelle base</span> dans le fichier "local_settings.py" de votre projet. En effet comme il contient le nom de votre ancienne base, c'est celle-ci qui serait migrée (mas de panique si vous avez bien dupliqué au préalable, au pire votre ancienne base n'est pas perdu elle a juste un nouveau nom).<br />
<br />
<br />
<br />
Pour le moment, la variable DATABASES doit contenir la valeur suivante (que nous allons modifier/compléter par la suite) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        # Possible backends: 'postgresql', 'mysql', 'sqlite3'.<br />
        'ENGINE': 'django.db.backends.sqlite3',<br />
<br />
        # Name of the database, or path to the database file if using 'sqlite3'.<br />
        'NAME': BASE_DIR / 'db.sqlite3',<br />
<br />
        # Not used with sqlite3.<br />
        'USER': '',<br />
        'PASSWORD': '',<br />
<br />
        # Set to empty string for localhost. Not used with 'sqlite3'.<br />
        'HOST': '',<br />
<br />
        # Set to empty string for default. Not used with 'sqlite3'.<br />
        'PORT': '',<br />
<br />
        # Extra parameters for database connection.<br />
        # Consult backend module's document for available keywords.<br />
        # 'OPTIONS': {},<br />
    },<br />
}</code></div></div><br />
<br />
Avant de passer au déploiement de Crème proprement dit, on va devoir configurer la base de données. Creme est testé avec trois systèmes de gestion de base de données: SQLite, MySQL & PostgreSQL. Django permet aussi d'utiliser une base Oracle, mais nous n'avons jamais eu l'occasion de tester une telle configuration (mais pourquoi utiliser un SGBDR propriétaire quand l'offre libre est aussi bonne ?). Il existe aussi des <span style="font-style: italic;" class="mycode_i">backends</span> pour d'autres SGBDR (firebird, sqlserver ...) qui sont distribués à part de Django ; là encore nous ne les avons pas testés, et ne pouvons garantir leur fonctionnement (mais si vous avez essayé, vos retours sont évidemment les bienvenus, ne serait-ce que par curiosité technique).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">SQLite</span></span><br />
<br />
<br />
<br />
SQLite est surtout utile si vous êtes un développeur, afin de tester rapidement votre travail. C'est aussi envisageable si vous comptez utiliser Creme<br />
<br />
en tant qu'application monoposte et avec peu de données (c'est sûrement une mauvaise idée pour des dizaines de milliers de fiches). Si vous n'êtes pas dans ces 2 cas, nous vous <span style="font-weight: bold;" class="mycode_b">déconseillons vivement</span> une telle configuration.<br />
<br />
<br />
<br />
Si vous choisissez SQLite, la configuration est très simple (pas d'utilisateur ou de mot de passe) ; éditez la variable DATABASES de votre local_settings.py ainsi :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.sqlite3',<br />
        'NAME':     '/chemin/absolu/vers/un/fichier.db',<br />
        'HOST':     '',<br />
        'PORT':     '',<br />
    },<br />
}</code></div></div><br />
<br />
Vous devez évidemment mettre une chemin valide en tant que NAME (le fichier sera créé s'il n'existe pas, mais faites attention que Creme ait bien les permissions d'écrire dans le répertoire choisi).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : pour dupliquer une base SQLite il suffit de copier l'ancien fichier.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">MySQL</span></span><br />
<br />
<br />
<br />
MySQL est un choix classique pour un serveur de production ; il est très répandu et facile à configurer. En revanche, il n'est pas toujours possible de le configurer aussi finement qu'on le voudrait, et a tendance à voir ses performances varier étrangement au grès des versions (la plupart du temps dans le bon sens, mais pas toujours) . C'est donc un bon choix si vous le connaissez déjà, et que vous ne visez pas des volumes importants de données (pour quelques centaines de milliers de fiches ça devrait être satisfaisant -- ça dépend de votre matériel évidemment).<br />
<br />
<br />
<br />
Pour que Crème puisse utiliser MySQL, il faut créer une base de données et un utilisateur qui a les droits sur celle-ci. Vous pouvez bien entendu le faire en graphique grâce à un outil d'administration de BD.<br />
<br />
<br />
<br />
Voici comment le faire en console. Notez qu'en fonction de la version de MySQL les commandes peuvent changer ; les instructions suivantes fonctionnent avec MySQL 8 ; référez vous à la documentation de votre version de MySQL si les commandes ne fonctionnent pas.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> :<br />
<br />
- les versions 10.5 et supérieures sont officiellement gérées par Django. En revanche nous sommes tombés plusieurs fois sur des erreurs un peu ésotériques (c'est aussi vrai avec MySQL ceci dit) et ce n'est pas forcément la base que nous vous conseillerions.<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. Par exemple dans PHPMyadmin, si vous allez sur votre ancienne base, il y  a un onglet "Opérations" qui contient une section "Copier la base de données vers" (qui permet de conserver les privilèges -- normalement la case pour les conserver est cochée par défaut). N'oubliez pas plus bas de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
D'abord logguez vous dans MySQL avec la commande suivante : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
<br />
Puis passez sur la base de configuration avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>use mysql;</code></div></div><br />
<br />
Ajoutez maintenant votre utilisateur (en remplaçant les valeurs d'exemple par vos propres valeurs) avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE USER 'cremeuser'@'localhost' IDENTIFIED BY '34jkfue1dioaA';</code></div></div><br />
<br />
Puis nous créons la base de données :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE DATABASE cremecrmdb;</code></div></div><br />
<br />
et enfin nous donnons à votre l'utilisateur toutes les permissions sur la base de données de Creme :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON cremecrmdb.* TO 'cremeuser'@'localhost' WITH GRANT OPTION;</code></div></div><br />
<br />
Éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez si nécessaire remplacer les noms de la base, de l'utilisateur et son mot de passe par les valeurs que vous avez défini précédemment)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.mysql',<br />
        'NAME':     'cremecrmdb',<br />
        'USER':     'cremeuser',<br />
        'PASSWORD': '34jkfue1dioaA',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">PostgreSQL</span></span><br />
<br />
<br />
<br />
PostgreSQL est sûrement le meilleur choix pour les volumes de données importants ; non seulement ses performances sont excellentes, mais c'est aussi le SGBDR le plus rigoureux en terme de cohérence des données.<br />
<br />
<br />
<br />
Les instructions du début de ce tutoriel étaient plutôt faites pour un déploiement avec MySQL ; aussi il va falloir installer des paquets supplémentaires si vous souhaitez utiliser PostgreSQL.<br />
<br />
<br />
<br />
Comme pour MySQL, il vous faut maintenant créer un utilisateur dédié à Creme, ainsi qu'une base sur lequel l'utilisateur a tous les droits. Là encore c'est possible en console comme en graphique (en graphique, le programme "pgAdmin III" fait un très bon travail).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : comme déjà dit, il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. N'oubliez pas ci-dessous de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
Lorsque c'est fait, éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez remplacer les noms de la base de l'utilisateur et son mot de passe par les valeurs que vous avez choisies juste avant)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.postgresql',<br />
        'NAME':     'nom_de_la_base',<br />
        'USER':     'nom_de_l_utilisateur',<br />
        'PASSWORD': 'm0t_de_p4&#36;&#36;',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Remplissage de la base de données</span></span><br />
<br />
<br />
<br />
Toujours dans le répertoire racine "my_project28/", tapez la commande suivante pour créer les tables de la base :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme migrate --settings=my_project28.settings</code></div></div><br />
Puis on remplit la base avec les données initiales (utilisateur administrateur, société initiale, configuration par défaut etc…) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_populate --settings=my_project28.settings</code></div></div><br />
<br />
Ne vous inquiétez pas des messages du genre <Disable populate for "vcfs": it does not have any "populate.py" script>, ils indiquent juste que certaines apps n'ont pas besoin de créer des données initiales.<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Génération des <span style="font-style: italic;" class="mycode_i">bundles d'assets</span> statiques</span></span><br />
<br />
<br />
<br />
Il s'agit de créer des fichiers optimisés pour le CSS et le JavaScript, ainsi que des images avec des noms pensés pour être mises en cache intelligemment :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme generatemedia --settings=my_project28.settings</code></div></div><br />
<br />
Voici la sortie que vous devriez avoir :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>Generating l10n.js with variation {'language': 'en'}<br />
Generating l10n.js with variation {'language': 'fr'}<br />
Generating lib.js with variation {}<br />
Generating main.js with variation {}<br />
Generating testlib.js with variation {}<br />
Generating testcore.js with variation {}<br />
Generating icecreammain.css with variation {}<br />
Generating chantillymain.css with variation {}</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Choix des apps installées</span></span><br />
<br />
<br />
<br />
Pour des raisons de simplicité, nous avons choisi d'installer Creme avec sa liste d'apps par défaut, qui couvre la plupart des besoins courants. Sont écartées de cette liste l'app "mobile" pour proposer en plus un ensemble de vues plus adaptées aux smartphones, et "polls" qui permet de faire des questionnaires/sondages internes.<br />
<br />
<br />
<br />
Creme étant modulaire, vous pouvez choisir plus finement les apps installées ; même si pour une première installation, vous devriez sûrement garder la liste de base (vous pouvez passer au chapitre suivant). Pour avoir une liste personnalisée, modifiez variable INSTALLED_APPS comme indiqué dans les commentaires de "project/settings.py".<br />
<br />
<br />
<br />
2 points importants :<br />
<br />
- vous ne pouvez enlever (en pratique mettez plutôt en commentaire avec un '#' en début de ligne) que les apps dans la section CREME OPTIONAL APPS, qui sont optionnelles comme l'indique le nom.<br />
<br />
- dans la liste sont indiquées des dépendances ; certaines apps nécessitent la présence d'autres apps. Cependant pas de craintes, si vous oubliez une dépendance, Creme générera une erreur assez claire à ce sujet.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Choix avant l'installation</span></span><br />
<br />
<br />
<br />
Si vous n'avez pas encore créé la base de données, vous pouvez juste commenter/dé-commenter les noms des apps optionnelles, avant de faire les étapes des chapitres précédents (migrate, creme_populate, generatemedia).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Ajouter des apps après l'installation</span></span><br />
<br />
<br />
<br />
Si vous souhaitez ajouter des apps après installation (ex: après plusieurs jours/mois d'utilisation un besoin apparaît), dé-commentez les apps voulues (toujours en respectant les dépendances -- ex: si vous voulez "events", "opportunities" doit aussi être dé-commenté), puis lancez les même commandes que pour l'installation initiale: migrate, creme_populate, generatemedia.<br />
<br />
<br />
<br />
(en effet il faut bien créer les nouvelles tables, les peupler, et aussi installer le nouveau JavaScript/CSS/...)<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Désinstaller une app après l'installation</span></span><br />
<br />
<br />
<br />
Il existe plusieurs mécanismes, comme la configuration visuelle du menu ou la désactivation des type de relation, qui permettent de rendre très peu visible une app globalement inutile, et vous devriez commencer par là (car aucun risque de casser quoi que ce soit). Mais si vous le souhaitez vraiment, vous pouvez réellement désinstaller une app.<br />
<br />
<br />
<br />
C'est une opération un peu délicate, car des données relatives à l'app que vous voulez désinstaller peuvent exister en base, et être reliées à des données qui elles ne doivent pas être supprimées (car relatives à des apps que vous garder), tout en gardant un système cohérent... Donc :<br />
<br />
<br />
<br />
- privilégiez les apps pour lesquelles vous n'avez pas créé de données (typiquement aucune fiche).<br />
<br />
- faites une sauvegarde avant.<br />
<br />
<br />
<br />
La désinstallation d'une app se fait grâce à une commande, "creme_uninstall". Notez qu'il faut désinstaller une app à la fois (c'est déjà assez délicat comme ça...) ; si vous voulez désinstaller plusieurs apps, alors appliquez la méthode de désinstallation plusieurs fois, en respectant là encore les dépendances (ex: pour désinstaller "events" et "opportunities", faites le dans cet ordre, pour qu'à aucun moment une app n'ait pas ses dépendances installées). L'app que vous désinstallez doit être présente dans votre INSTALLED_APPS.<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_uninstall --settings=my_project28.settings app_a_desinstaller</code></div></div><br />
<br />
Si tout s'est bien déroulé, la commande vous demandera une fois finie de mettre en commentaire l'app dans votre INSTALLED_CREME_APPS.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du serveur</span></span><br />
<br />
<br />
<br />
Une fois cela fait il ne nous reste plus qu'à lancer le serveur de test en faisant :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme runserver --settings=my_project28.settings</code></div></div><br />
<br />
Vous pouvez maintenant vous connecter sur <a href="http://localhost:8000" target="_blank" rel="noopener" class="mycode_url">http://localhost:8000</a> pour voir que votre Crème fonctionne. La commande 'creme_populate' vous a indiqué qu'elle a créé un utilisateur "root" (mot de passe "root") ; utilisez cet utilisateur pour vous connecter. Vous êtes <span style="font-weight: bold;" class="mycode_b">très vivement</span> encouragé à changer immédiatement le mot de passe  (dans le menu en haut > icône rouage > Utilisateurs).<br />
<br />
<br />
<br />
Mais, et je vais le répéter, ce serveur de développement n'est pas fait pour être utiliser dans un contexte de production. Par exemple, pour mettre en production avec Apache et mod_wsgi, vous pouvez suivre cet autre billet: <a href="https://www.cremecrm.com/forum/showthread.php?tid=110" target="_blank" rel="noopener" class="mycode_url">https://www.cremecrm.com/forum/showthread.php?tid=110</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du gestionnaire de jobs</span></span><br />
<br />
<br />
<br />
Certaines fonctionnalités (import des fichiers CSV/XLS, envoi des campagnes d'e-mails...) sont effectuées par des jobs tournant en parallèle du serveur Web. Ces jobs sont gérés par un gestionnaire qui s'occupent de créer ces processus lorsque c'est nécessaire.<br />
<br />
<br />
<br />
Ce gestionnaire doit être lancé à part, et tourner en permanence  ; si ce n'est pas le cas, la majorité de Creme fonctionnera parfaitement, mais pas les fonctionnalités basées sur les jobs. Si vous allez sur la liste des jobs (menu > Outils > Jobs) un message d'erreur vous indiquera si le gestionnaire est injoignable. Pour lancer le gestionnaire :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_job_manager --settings=my_project28.settings</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mise à jour</span></span><br />
<br />
<br />
<br />
Il est évidemment conseillé de régulièrement faire des sauvegarde de votre base de données, ainsi que des fichiers télé-versés dans "my_project28/media/upload/" ; c'est d'autant plus vrai avant une mise-à-jour.<br />
<br />
<br />
<br />
Vous pouvez vous tenir à jour des nouvelles <span style="font-style: italic;" class="mycode_i">releases</span> grâce par exemple à la <a href="https://pypi.org/project/creme-crm/#history" target="_blank" rel="noopener" class="mycode_url">page du paquet sur pyPI</a> qui explique comment faire faire (par exemple en suivant le flux RSS fait pour).<br />
<br />
<br />
<br />
Plus tard lorsque sortiront des versions de corrections pour Creme2.6, vous pourrez mettre à jour Creme et ses dépendances avec (adaptez avec le tag utilisé auparavant suivant votre SGBD -- MySQL dans cet exemple) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install -U creme-crm[mysql]==2.8.XYZ</code></div></div><br />
<br />
Le fichier CHANGELOG.TXT contient les nouveautés, ainsi que des notes sur les commandes. Dans le doute vous pouvez toujours mettre à jour la base de données avec les commandes "migrate" & "creme_populate"  (au pire les commandes ne feront rien) et ré-générer les <span style="font-style: italic;" class="mycode_i">assets</span> statiques comme au dessus avec "generatemedia".]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.8) : téléchargement multiple]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=280</link>
			<pubDate>Tue, 07 Apr 2026 13:52:31 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=280</guid>
			<description><![CDATA[Creme 2.8 permet de faire des téléchargements multiples depuis les vues en liste des fiches suivantes :<br />
 - Documents<br />
 - Facture & Devis<br />
<br />
Cela vous permet de sélectionner plusieurs fiches, et de télécharger une archive .zip :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_multi_dl.png" loading="lazy"  alt="[Image: creme_28_FR_multi_dl.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Creme 2.8 permet de faire des téléchargements multiples depuis les vues en liste des fiches suivantes :<br />
 - Documents<br />
 - Facture & Devis<br />
<br />
Cela vous permet de sélectionner plusieurs fiches, et de télécharger une archive .zip :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_multi_dl.png" loading="lazy"  alt="[Image: creme_28_FR_multi_dl.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.8) : champs personnalisés améliorés]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=281</link>
			<pubDate>Tue, 07 Apr 2026 13:47:20 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=281</guid>
			<description><![CDATA[Avec Creme 2.8, les champs personnalisés reçoivent 2 améliorations :<br />
 - ils peuvent recevoir une description ; si elle est remplie, elle est utilisée dans les formulaires comme texte d'aide du champ correspondant par exemple.<br />
 - ils peuvent recevoir une valeur par défaut ; si est est remplie, elle est utilisée dans les formulaires de création comme valeur initiale du champ correspondant.<br />
<br />
La configuration des champs personnalisées a un peu évolué afin d'accueillir ces nouvelles fonctionnalités. Le formulaire de création de champ est désormais un <span style="font-style: italic;" class="mycode_i">wizard</span> en 2 étapes. Dans la première vous avez la description qui est apparue :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_custom_fields1.png" loading="lazy"  alt="[Image: creme_28_FR_custom_fields1.png]" class="mycode_img" /><br />
<br />
Dans la 2ème étape, vous pouvez définir une valeur par défaut (sauf pour les champs de type "choix" et "choix multiples") :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_custom_fields2.png" loading="lazy"  alt="[Image: creme_28_FR_custom_fields2.png]" class="mycode_img" /><br />
<br />
Le formulaire de fiche ressemblera alors à ça :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_custom_fields3.png" loading="lazy"  alt="[Image: creme_28_FR_custom_fields3.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Avec Creme 2.8, les champs personnalisés reçoivent 2 améliorations :<br />
 - ils peuvent recevoir une description ; si elle est remplie, elle est utilisée dans les formulaires comme texte d'aide du champ correspondant par exemple.<br />
 - ils peuvent recevoir une valeur par défaut ; si est est remplie, elle est utilisée dans les formulaires de création comme valeur initiale du champ correspondant.<br />
<br />
La configuration des champs personnalisées a un peu évolué afin d'accueillir ces nouvelles fonctionnalités. Le formulaire de création de champ est désormais un <span style="font-style: italic;" class="mycode_i">wizard</span> en 2 étapes. Dans la première vous avez la description qui est apparue :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_custom_fields1.png" loading="lazy"  alt="[Image: creme_28_FR_custom_fields1.png]" class="mycode_img" /><br />
<br />
Dans la 2ème étape, vous pouvez définir une valeur par défaut (sauf pour les champs de type "choix" et "choix multiples") :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_custom_fields2.png" loading="lazy"  alt="[Image: creme_28_FR_custom_fields2.png]" class="mycode_img" /><br />
<br />
Le formulaire de fiche ressemblera alors à ça :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_custom_fields3.png" loading="lazy"  alt="[Image: creme_28_FR_custom_fields3.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.8) : épinglage de fiche]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=279</link>
			<pubDate>Tue, 07 Apr 2026 13:45:18 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=279</guid>
			<description><![CDATA[Vous pouvez désormais épingler les fiches auxquelles vous accédez souvent (pour aller dans leur vue détaillé).<br />
<br />
Dans le bloc d'entête, un nouveau bouton est apparu :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin1.png" loading="lazy"  alt="[Image: creme_28_FR_pin1.png]" class="mycode_img" /><br />
<br />
Lorsqu'une fiche est épinglée, un petit macaron est présent :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin2.png" loading="lazy"  alt="[Image: creme_28_FR_pin2.png]" class="mycode_img" /><br />
<br />
Vous pouvez alors accéder aux dernières fiches épinglées dans l'entrée de menu "Accès rapide" ; cette entrée remplace l'entrée qui proposait uniquement les fiches visitées récemment, et propose ces dernières ainsi que les fiches épinglées :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin3.png" loading="lazy"  alt="[Image: creme_28_FR_pin3.png]" class="mycode_img" /><br />
<br />
Un nouveau bloc est disponible pour l'accueil, et qui affiche toutes les fiches épinglées :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin4.png" loading="lazy"  alt="[Image: creme_28_FR_pin4.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Vous pouvez désormais épingler les fiches auxquelles vous accédez souvent (pour aller dans leur vue détaillé).<br />
<br />
Dans le bloc d'entête, un nouveau bouton est apparu :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin1.png" loading="lazy"  alt="[Image: creme_28_FR_pin1.png]" class="mycode_img" /><br />
<br />
Lorsqu'une fiche est épinglée, un petit macaron est présent :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin2.png" loading="lazy"  alt="[Image: creme_28_FR_pin2.png]" class="mycode_img" /><br />
<br />
Vous pouvez alors accéder aux dernières fiches épinglées dans l'entrée de menu "Accès rapide" ; cette entrée remplace l'entrée qui proposait uniquement les fiches visitées récemment, et propose ces dernières ainsi que les fiches épinglées :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin3.png" loading="lazy"  alt="[Image: creme_28_FR_pin3.png]" class="mycode_img" /><br />
<br />
Un nouveau bloc est disponible pour l'accueil, et qui affiche toutes les fiches épinglées :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_pin4.png" loading="lazy"  alt="[Image: creme_28_FR_pin4.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.8) : rôles multiples]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=278</link>
			<pubDate>Tue, 07 Apr 2026 13:42:57 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=278</guid>
			<description><![CDATA[Les rôles sont la base dans la gestion des droits des utilisateurs. Mais ils représentent aussi des façons différentes d'utiliser Creme ; ainsi la configuration des blocs, boutons, menus ou formulaires peut être spécifique à un role.<br />
<br />
Il arrive que des personnes aient plusieurs casquettes, et finissent par posséder plusieurs utilisateurs, se connectant avec le bon utilisateur en fonction des tâches à effectuer. Mais c'est un peu contraignant de devoir à chaque fois se déconnecter puis se reconnecter (et ça peut être gênant d'avoir plusieurs utilisateurs pour une seule identité).<br />
<br />
Creme 2.8 propose une solution: les rôles multiples. Un utilisateur peut posséder plusieurs rôles, et peut passer de l'un à l'autre sans devoir se déconnecter.<br />
<br />
Dans la configuration, le formulaire de création (et de modification) d'utilisateur accepte plusieurs rôles (plutôt qu'un seul auparavant) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_multi_role1.png" loading="lazy"  alt="[Image: creme_28_FR_multi_role1.png]" class="mycode_img" /><br />
<br />
Un utilisateur peut changer son rôle actif depuis le menu principal :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_multi_role2.png" loading="lazy"  alt="[Image: creme_28_FR_multi_role2.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Les rôles sont la base dans la gestion des droits des utilisateurs. Mais ils représentent aussi des façons différentes d'utiliser Creme ; ainsi la configuration des blocs, boutons, menus ou formulaires peut être spécifique à un role.<br />
<br />
Il arrive que des personnes aient plusieurs casquettes, et finissent par posséder plusieurs utilisateurs, se connectant avec le bon utilisateur en fonction des tâches à effectuer. Mais c'est un peu contraignant de devoir à chaque fois se déconnecter puis se reconnecter (et ça peut être gênant d'avoir plusieurs utilisateurs pour une seule identité).<br />
<br />
Creme 2.8 propose une solution: les rôles multiples. Un utilisateur peut posséder plusieurs rôles, et peut passer de l'un à l'autre sans devoir se déconnecter.<br />
<br />
Dans la configuration, le formulaire de création (et de modification) d'utilisateur accepte plusieurs rôles (plutôt qu'un seul auparavant) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_multi_role1.png" loading="lazy"  alt="[Image: creme_28_FR_multi_role1.png]" class="mycode_img" /><br />
<br />
Un utilisateur peut changer son rôle actif depuis le menu principal :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme28/creme_28_FR_multi_role2.png" loading="lazy"  alt="[Image: creme_28_FR_multi_role2.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.7) : configuration des numéros de factures]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=266</link>
			<pubDate>Tue, 02 Sep 2025 15:28:13 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=266</guid>
			<description><![CDATA[Jusqu'à présent, les numéros de Facture, Devis & Bons de commande qui étaient générés avaient la forme préfixe+compteur ; le préfixe étant une chaîne que l'on mettait dans le fichier des <span style="font-style: italic;" class="mycode_i">settings</span>. On peut maintenant configurer bien plus finement la forme que les numéros générés auront, et ce uniquement via l'interface de configuration.<br />
<br />
Dans la page de configuration de la facturation, un nouveau bloc est apparu :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme_27_FR_billing_number_config.png" loading="lazy"  alt="[Image: creme_27_FR_billing_number_config.png]" class="mycode_img" /><br />
<br />
Voici à quoi ressemble le formulaire de configuration :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme_27_FR_billing_number_form.png" loading="lazy"  alt="[Image: creme_27_FR_billing_number_form.png]" class="mycode_img" /><br />
<br />
Quelques explications :<br />
<br />
- on peut désactiver la possibilité de modifier les numéros manuellement (ils ne pourront alors uniquement qu'être générés par Creme).<br />
- le motif du numéro permet d'aller bien plus loin que la forme préfixe+compteur. On peut par exemple insérer où on le souhaite l'année/mois, ou choisir la taille du compteur (des zéros sont alors mis au début si besoin).<br />
- le compteur peut être réinitialisé tous les mois ou tous les ans si on le souhaite.]]></description>
			<content:encoded><![CDATA[Jusqu'à présent, les numéros de Facture, Devis & Bons de commande qui étaient générés avaient la forme préfixe+compteur ; le préfixe étant une chaîne que l'on mettait dans le fichier des <span style="font-style: italic;" class="mycode_i">settings</span>. On peut maintenant configurer bien plus finement la forme que les numéros générés auront, et ce uniquement via l'interface de configuration.<br />
<br />
Dans la page de configuration de la facturation, un nouveau bloc est apparu :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme_27_FR_billing_number_config.png" loading="lazy"  alt="[Image: creme_27_FR_billing_number_config.png]" class="mycode_img" /><br />
<br />
Voici à quoi ressemble le formulaire de configuration :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme_27_FR_billing_number_form.png" loading="lazy"  alt="[Image: creme_27_FR_billing_number_form.png]" class="mycode_img" /><br />
<br />
Quelques explications :<br />
<br />
- on peut désactiver la possibilité de modifier les numéros manuellement (ils ne pourront alors uniquement qu'être générés par Creme).<br />
- le motif du numéro permet d'aller bien plus loin que la forme préfixe+compteur. On peut par exemple insérer où on le souhaite l'année/mois, ou choisir la taille du compteur (des zéros sont alors mis au début si besoin).<br />
- le compteur peut être réinitialisé tous les mois ou tous les ans si on le souhaite.]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.7) : processus automatisés]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=265</link>
			<pubDate>Tue, 02 Sep 2025 15:20:01 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=265</guid>
			<description><![CDATA[Les processus automatisés permettent d'effectuer des actions automatiquement lorsque des événements spécifiques se produisent. C'est encore un outil supplémentaire qui va permettre de se passer de code dans certains cas (et les versions suivantes devraient étendre les possibilités).<br />
<br />
Une nouvelle entrée a été ajoutée dans le menu pour accéder à la configuration :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_menu.png" loading="lazy"  alt="[Image: creme27_FR_workflow_menu.png]" class="mycode_img" /><br />
<br />
Voici la page de configuration des processus :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_config_empty.png" loading="lazy"  alt="[Image: creme27_FR_workflow_config_empty.png]" class="mycode_img" /><br />
<br />
Si on souhaite créer un nouveau processus, la première étape du formulaire nous demande le type d'événement qui déclenche les actions :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step1.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step1.png]" class="mycode_img" /><br />
(description pour l'accessibilité -- les différents types d'événement sont : "Une fiche a été créée", "Une fiche a été modifiée", "Une propriété a été ajoutée", "Une relation a été ajoutée")<br />
<br />
La 2ème étape permet d'ajouter des conditions (les actions ne seront effectuées que si les conditions sont remplies) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step2.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step2.png]" class="mycode_img" /><br />
(description pour l'accessibilité -- les conditions sont semblables aux conditions de filtres, sur les champs classiques et les champs personnalisés)<br />
<br />
La 3ème étape permet de choisir le type de la première action (d'autres d'actions pourront être ajoutées par la suite) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step3.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step3.png]" class="mycode_img" /><br />
(description pour l'accessibilité -- les différents types d'action sont : "Ajouter une propriété", "Ajouter une relation", "Envoyer un e-mail", "Envoyer un e-mail (avec un patron)")<br />
<br />
La 4ème et dernière étape permet de configurer la première action. Ici on voit la configuration de l'action d'envoi d'e-mail ; il y a plein de possibilités (ne serait-ce que le choix du destinataire) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step4.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step4.png]" class="mycode_img" /><br />
<br />
Après validation, voilà notre processus créé :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_config_done.png" loading="lazy"  alt="[Image: creme27_FR_workflow_config_done.png]" class="mycode_img" /><br />
<br />
Notez que pour le moment le processus est désactivé ; cela permet notamment d'ajouter d'autres actions et de n'activer le processus qu'une fois complet (avec le bouton "Activer" en haut à gauche du panneau du processus).]]></description>
			<content:encoded><![CDATA[Les processus automatisés permettent d'effectuer des actions automatiquement lorsque des événements spécifiques se produisent. C'est encore un outil supplémentaire qui va permettre de se passer de code dans certains cas (et les versions suivantes devraient étendre les possibilités).<br />
<br />
Une nouvelle entrée a été ajoutée dans le menu pour accéder à la configuration :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_menu.png" loading="lazy"  alt="[Image: creme27_FR_workflow_menu.png]" class="mycode_img" /><br />
<br />
Voici la page de configuration des processus :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_config_empty.png" loading="lazy"  alt="[Image: creme27_FR_workflow_config_empty.png]" class="mycode_img" /><br />
<br />
Si on souhaite créer un nouveau processus, la première étape du formulaire nous demande le type d'événement qui déclenche les actions :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step1.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step1.png]" class="mycode_img" /><br />
(description pour l'accessibilité -- les différents types d'événement sont : "Une fiche a été créée", "Une fiche a été modifiée", "Une propriété a été ajoutée", "Une relation a été ajoutée")<br />
<br />
La 2ème étape permet d'ajouter des conditions (les actions ne seront effectuées que si les conditions sont remplies) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step2.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step2.png]" class="mycode_img" /><br />
(description pour l'accessibilité -- les conditions sont semblables aux conditions de filtres, sur les champs classiques et les champs personnalisés)<br />
<br />
La 3ème étape permet de choisir le type de la première action (d'autres d'actions pourront être ajoutées par la suite) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step3.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step3.png]" class="mycode_img" /><br />
(description pour l'accessibilité -- les différents types d'action sont : "Ajouter une propriété", "Ajouter une relation", "Envoyer un e-mail", "Envoyer un e-mail (avec un patron)")<br />
<br />
La 4ème et dernière étape permet de configurer la première action. Ici on voit la configuration de l'action d'envoi d'e-mail ; il y a plein de possibilités (ne serait-ce que le choix du destinataire) :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_form_step4.png" loading="lazy"  alt="[Image: creme27_FR_workflow_form_step4.png]" class="mycode_img" /><br />
<br />
Après validation, voilà notre processus créé :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_workflow_config_done.png" loading="lazy"  alt="[Image: creme27_FR_workflow_config_done.png]" class="mycode_img" /><br />
<br />
Notez que pour le moment le processus est désactivé ; cela permet notamment d'ajouter d'autres actions et de n'activer le processus qu'une fois complet (avec le bouton "Activer" en haut à gauche du panneau du processus).]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.7) : types de fiches personnalisés]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=264</link>
			<pubDate>Tue, 02 Sep 2025 15:04:02 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=264</guid>
			<description><![CDATA[On peut depuis longtemps ajouter des champs personnalisés aux types de fiche (Contact, Société, Activité…) ; cela permettait de prendre un type de fiche existant et de le personnaliser suffisamment pour modéliser des choses parfois bien éloignées du type original (par exemple partir des Sociétés pour représenter des Mairies). Mais il était impossible d'ajouter de nouveaux types de fiche sans devoir coder (même si ça reste relativement accessible si vous avez des notions de programmation, ça reste un frein).<br />
<br />
Il est désormais possible de créer jusqu'à 20 nouveaux types de fiche directement depuis l'interface de configuration.<br />
<br />
Une nouvelle entrée de menu a été ajoutée pour accéder à la configuration :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_menu.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_menu.png]" class="mycode_img" /><br />
<br />
<br />
Pour le moment, il n'y a aucun type personnalisé :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_config_empty.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_config_empty.png]" class="mycode_img" /><br />
<br />
Créons un nouveau type :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_config_form.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_config_form.png]" class="mycode_img" /><br />
<br />
Lorsque notre nouveau type est créé, il va être accessible partout. Dans un premier temps vous allez sûrement lui ajouter des champs personnalisés (de base les fiches n'ont qu'un seul champ, "nom"), ajouter une entrée de menu vers la vue en liste et créer des types de relation associés.<br />
Ici par exemple on voit que notre nouveau champ peut recevoir une configuration de bouton spécifique: <br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_config_buttons.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_config_buttons.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[On peut depuis longtemps ajouter des champs personnalisés aux types de fiche (Contact, Société, Activité…) ; cela permettait de prendre un type de fiche existant et de le personnaliser suffisamment pour modéliser des choses parfois bien éloignées du type original (par exemple partir des Sociétés pour représenter des Mairies). Mais il était impossible d'ajouter de nouveaux types de fiche sans devoir coder (même si ça reste relativement accessible si vous avez des notions de programmation, ça reste un frein).<br />
<br />
Il est désormais possible de créer jusqu'à 20 nouveaux types de fiche directement depuis l'interface de configuration.<br />
<br />
Une nouvelle entrée de menu a été ajoutée pour accéder à la configuration :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_menu.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_menu.png]" class="mycode_img" /><br />
<br />
<br />
Pour le moment, il n'y a aucun type personnalisé :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_config_empty.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_config_empty.png]" class="mycode_img" /><br />
<br />
Créons un nouveau type :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_config_form.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_config_form.png]" class="mycode_img" /><br />
<br />
Lorsque notre nouveau type est créé, il va être accessible partout. Dans un premier temps vous allez sûrement lui ajouter des champs personnalisés (de base les fiches n'ont qu'un seul champ, "nom"), ajouter une entrée de menu vers la vue en liste et créer des types de relation associés.<br />
Ici par exemple on voit que notre nouveau champ peut recevoir une configuration de bouton spécifique: <br />
<br />
<img src="https://img.hybird.org/creme/img/creme27/creme27_FR_custom_entity_config_buttons.png" loading="lazy"  alt="[Image: creme27_FR_custom_entity_config_buttons.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Installation de Crème CRM 2.7]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=267</link>
			<pubDate>Tue, 02 Sep 2025 14:54:31 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=267</guid>
			<description><![CDATA[<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
<br />
<br />
Il s'agira ici d'installer Creme 2.7 soit depuis zéro, soit depuis une installation de Creme 2.6 (notez que vous ne devriez migrer que d'une version à la fois -- donc si vous êtes en 2.5, vous devez migrer vers 2.6 avant de pouvoir migrer vers 2.7 par exemple).<br />
<br />
<br />
<br />
Ce tutoriel d'installation parle des plateformes suivantes :<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">GNU/Linux</span> en se concentrant sur Debian & Ubuntu ; lorsque des noms de paquets sont donnés, ce sont les noms dans ces 2 distributions, et il vous faudra chercher les équivalents sur votre propre distribution (n'hésitez pas pas à nous indiquer si vous avez des noms de paquets différents -- ils peuvent changer selon les versions de Debian par example -- ou si vous avez installé sur une autre distribution, afin que nous puissions améliorer ce tutoriel).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Windows</span> ; attention l'installation sous Windows est un peu plus complexe à cause du manque par défaut d'un gestionnaire de paquets. En plus ce n'est pas la plateforme la plus testée (mais si vous avez des problèmes/retours/patches vous pouvez en parler dans les commentaires notamment).<br />
</li>
</ul>
Le code de Creme ne faisant pas spécialement de "linuxeries", l'installer sur d'autres Unix (comme MacOSX) ne devrait pas dans l'absolu poser de souci particulier. Il nous est cependant difficile pour le moment de vous indiquer une marche à suivre précise n'utilisant pas (encore) ces systèmes. Là encore, tout retour de personnes ayant essayé est le bienvenu ; nous savons par exemple que des gens font tourner Creme avec succès sur FreeBSD.<br />
<br />
<br />
<br />
Pour ce tutoriel d'installation de Crème CRM on va faire les choses du mieux possible. On va donc installer des choses qui pourraient vous sembler inutiles mais qui à terme permettront d'avoir une installation pérenne et qui ne rentrera pas en collision avec d'autres logiciels que vous pourriez vouloir installer. <br />
<br />
<br />
<br />
Ce tutoriel vous permet d'installer tout le nécessaire pour faire fonctionner Crème avec le serveur de développement intégré dans Django. Le serveur de développement n'est pas une façon pérenne de faire fonctionner une application Django. Mais c'est un moyen simple de vérifier que tout fonctionne et vous pouvez faire quelques tests avec pour vérifier que Crème vous convient.  Le tutoriel vous permettant d'utiliser Apache avec Crème (plus compliqué à faire fonctionner, mais c'est une façon pérenne de faire les choses) est le sujet d'un autre billet indiqué à la fin. <br />
<br />
<br />
<br />
Une remarque très importante : si l'utilisation du serveur de développement est déconseillé pour une utilisation sur du long terme dans le cadre d'une machine personnelle, elle est par contre totalement interdite dans le cadre d'un hébergement sur un serveur. Si vous comptez installer Crème  tout de suite sur un serveur, il ne faut pas, pas une seule seconde, utiliser le serveur de développement. En effet celui-ci est fait pour le test et rien d'autre. Il n'est pas prévu, ni en terme de performance ni en terme de sécurité, pour être utilisé dans un vrai contexte de production. <br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Avant propos</span></span><br />
<br />
<br />
<br />
Notre objectif est d'installer & configurer un environnement <a href="http://www.virtualenv.org/en/latest/" target="_blank" rel="noopener" class="mycode_url">Virtualenv</a>. Virtualenv vous permet en effet d'avoir plusieurs environnements virtuels Python. L’intérêt est de pouvoir cloisonner les dépendances par projet. Vous êtes ainsi sûr que votre Crème n’arrêtera pas de fonctionner juste parce que vous avez dû mettre à jour une librairie Python pour pouvoir installer un autre logiciel. On ne va pas se contenter d'installer Virtualenv et on va installer aussi <a href="http://www.doughellmann.com/docs/virtualenvwrapper" target="_blank" rel="noopener" class="mycode_url">Virtualenvwrapper</a> qui est une surcouche à Virtualenv et qui vous simplifiera les choses.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : nous allons installer Creme 2.7 en parallèle de votre installation de Creme 2.6, en dupliquant les données. Ainsi en cas de gros problèmes vous pourrez revenir à votre installation précédente, que nous n'aurons pas détruite ; les éventuelles nouvelles données rentrées dans Creme 2.7 seront évidemment absentes de votre vieille installation, mais il s'agit ici plutôt de détecter les gros dysfonctionnements que vous auriez immédiatement.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de Python</span></span><br />
<br />
<br />
<br />
Pour commencer, il vous faut avoir Python 3 (au moins 3.10) sur votre système ainsi que l'installeur 'pip' qui permet de télécharger & installer des paquets python.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Windows :</span><br />
<br />
Il faut vous rendre ici : <a href="https://www.python.org/downloads/windows/" target="_blank" rel="noopener" class="mycode_url">https://www.python.org/downloads/windows/</a><br />
<br />
L'installeur pour Windows contient l'interpréteur Python ainsi que 'pip'.<br />
<br />
Note: il est important que vous partiez d'une installation vide de Python ; si vous avez déjà des paquets externes pour Python qui ne sont pas installés dans un Virtual Env, ces derniers prendront le pas sur les paquets du Virtual Env (et donc de mauvaises versions de paquets pourront être utilisées empêchant Creme de fonctionner) (ce problème étant spécifique à Windows).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Linux :</span><br />
<br />
Utilisez le gestionnaire de paquet de votre distribution ; si vous êtes sous Debian ou Ubuntu il vous suffit de faire : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>sudo apt-get install python3<br />
sudo apt-get install python-setuptools<br />
sudo apt-get install python-pip</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation des logiciels externes</span></span><br />
<br />
<br />
<br />
En plus de Python il va vous falloir installer :<br />
<ul class="mycode_list"><li>Un serveur web compatible avec Python. Il y a le choix mais le grand classique reste Apache (version 2.4 actuellement). Comme indiqué plus haut vous pouvez aussi dans un premier temps utiliser le serveur de développement (inclus avec Django) avant de passer à un serveur de production comme Apache ou NginX.<br />
</li>
<li>Un serveur de base de données: MySQL (8.0.11 ou plus), MariaDB (10.5 ou plus) ou PostGreSQL (14 ou plus) ; dans un premier temps vous pouvez aussi tester avec une base SQLite (rien besoin d'installer c'est fourni avec Python).<br />
</li>
<li>Redis ; ça fonctionne avec des versions anciennes (3.X) ou récentes (4.X +) donc cela ne devrait pas être un problème (préférez les versions plus récentes évidemment): <a href="https://redis.io/download" target="_blank" rel="noopener" class="mycode_url">https://redis.io/download</a><br />
Note: sous Unix il est possible de s'en passer et d'utiliser une socket Unix afin de communiquer avec le serveur de job (vous pourrez regarder, une fois votre installation globalement fonctionnelle au setting JOBMANAGER_BROKER).<br />
</li>
</ul>
Sous Windows, <a href="http://www.wampserver.com/" target="_blank" rel="noopener" class="mycode_url">wampserver</a> vous facilitera sûrement la vie si vous comptez installer Apache et MySQL.<br />
<br />
<br />
<br />
Sous Linux, vérifiez que vous avez les paquets suivants (ce sont les noms sous Ubuntu ; ils peuvent être différents sous une autre distribution évidemment) :<br />
<ul class="mycode_list"><li>mysql-client & mysql-server (si vous utilisez MySQL)<br />
</li>
<li>postgresql & postgresql-client-common (si vous utilisez PostGreSQL)<br />
</li>
<li>redis-server (sauf si vous utilisez une socket Unix comme indiqué plus haut)<br />
</li>
<li>language-pack-fr<br />
</li>
</ul>
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">(Linux) Installation des bibliothèques "système"</span></span><br />
<br />
<br />
<br />
Pour pouvoir installer certains paquets dans votre environnement Python, il vous faudra certaines bibliothèques de développement afin de pouvoir compiler certains paquets.<br />
<br />
<br />
<br />
Avant d'aller plus loin, il faut que vous vérifiez que les packages suivants sont bien installés, sinon, installez les : <br />
<ul class="mycode_list"><li>python3-dev<br />
</li>
<li>libmysqlclient-dev (si vous utilisez MySQL)<br />
</li>
<li>libpq-dev  (si vous utilisez PostGreSQL)<br />
</li>
<li>libjpeg-dev (et potentiellement les autres bibliothèques de gestion d'images selon vos besoins, comme libpng*-dev, libtiff*-dev, libgif-dev...)<br />
</li>
<li>libcairo-dev<br />
</li>
</ul>
<br />
<br />
Là encore, il s'agit des noms sous Debian/Ubuntu ; sous Fedora le suffixe est plutôt"-devel", donc "libpq-dev" s’appellera par exemple "libpq-devel".<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de l'environnement virtuel</span></span><br />
<br />
<br />
<br />
Nous allons créer un environnement virtuel Python (<span style="font-style: italic;" class="mycode_i">virtualenv</span>) pour Crème, qui contiendra toutes les bibliothèques Python nécessaires dans les bonnes versions (donc sans que votre système n'aient à les fournir). <br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : créez un nouveau Virtualenv pour Creme 2.7, et gardez donc intact celui de de votre Creme 2.6 .<br />
<br />
<br />
<br />
Une fois cela fait et après avoir rechargé votre configuration, vous pouvez créer votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> en tapant la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>python3 -m venv ~/venv/creme_2_7</code></div></div><br />
<br />
Notes :<br />
<br />
 - "python3" désigne l'exécutable de Python 3 sur votre OS (sous Unix vous aurez souvent un lien python3.XX qui référence le même binaire).<br />
<br />
 -  on a choisi ici de créer un répertoire "venv" (qui pourrait contenir tous vos <span style="font-style: italic;" class="mycode_i">virtualenv</span>) dans votre répertoire HOME, mais ce n'est évidemment pas une obligation. Sous <span style="font-weight: bold;" class="mycode_b">Windows</span> le chemin ressemblerait plus à "C:\chemin\vers\nouveau\virtual\environment".<br />
<br />
<br />
<br />
Une fois que votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> est créé, il faut l'activer pour votre console. Vous allez en effet installer de nouveaux packages Python et faire des commandes Django et tout doit se faire dans votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>. <br />
<br />
<br />
<br />
Sous Unix+Bash, vous activez comme ceci :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>source ~/venv/creme_2_7/bin/activate</code></div></div><br />
<br />
Sous Windows avec l'invite de commande classique :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>&lt;chemin_vers_venv&gt;&#92;Scripts&#92;activate.bat</code></div></div><br />
<br />
La commande "deactivate" permet de sortir d'un <span style="font-style: italic;" class="mycode_i">virtualenv</span> pour revenir à votre environnement système classique. <br />
<br />
<br />
<br />
Pour plus de détails (si vous utilisez un autre système/shell par exemple), regardez la <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noopener" class="mycode_url">documentation officielle</a>.<br />
<br />
<br />
<br />
Maintenant que vous avez activé votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>, il vous faut installer le paquet creme-crm, qui installera aussi les dépendances nécessaires. Il existe des variantes, principalement pour choisir votre serveur de base de données (MySQL ou PostgreSQL -- SQLite n'ayant pas de besoin particulier). Les avantages et inconvénients des différents types de base sont expliqués plus bas si vous avez des doutes.<br />
<br />
<br />
<br />
Si vous souhaitez utiliser SQLite, il vous suffit de taper :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm~=2.7</code></div></div><br />
<br />
Pour MySQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[mysql]~=2.7</code></div></div><br />
<br />
Pour PostgreSQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[pgsql]~=2.7</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes sur MariaDB</span><br />
<br />
<br />
<br />
Si vous avez installé MariaDB plutôt que MySQL (paquet "<span style="font-style: italic;" class="mycode_i">libmariadbclient-dev</span>" sur Debian10), et que vous avez une erreur "<span style="font-weight: bold;" class="mycode_b"> /bin/sh: 1: mysql_config: not found</span>", créez le lien symbolique suivant :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>ln -s /usr/bin/mariadb_config /usr/bin/mysql_config</code></div></div><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes pour Windows:</span><br />
<br />
<br />
<br />
Certains paquets (comme "<span style="font-style: italic;" class="mycode_i">mysqlclient</span>") peuvent être retords à s'installer, et le site suivant, qui contient des paquets pré-compilés, pourrait grandement vous aider: <a href="https://www.lfd.uci.edu/~gohlke/pythonlibs/" target="_blank" rel="noopener" class="mycode_url">https://www.lfd.uci.edu/~gohlke/pythonlibs/</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Création de votre projet</span></span><br />
<br />
<br />
<br />
Dans Creme 2.7, une instance est bien séparée des sources de Creme elles-mêmes. Nous allons lancer une commande qui va créer un répertoire contenant entre autres la configuration de votre instance. Placez vous donc dans votre arborescence à un endroit adéquate, et faîtes :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_start_project my_project27</code></div></div><br />
<br />
Un répertoire "my_project27" a normalement été créé (note: c'est lui que vous devriez mettre sous version, avec git/mercurial/svn...). Déplacez vous dans ce répertoire (les commandes qui suivront partirons du principe qu'on est resté dans ce premier répertoire "my_project27") :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>cd my_project27</code></div></div><br />
<br />
Il contient principalement un autre répertoire s'appelant lui aussi "my_project27", dans lequel on trouve un fichier nommé "settings.py" qui va contenir la configuration de notre instance. Si vous ouvrez ce fichier vous trouverez quelques valeurs de bases définies par défaut, et pas mal d'explications sur les quelques valeurs qu'il reste à définir pour avoir une instance  fonctionnelle. On vous y explique aussi qu'il est important pour faire les choses proprement de séparer les <span style="font-style: italic;" class="mycode_i">settings</span> liés à votre projet, et ceux liés à une instance en particulier. Mettons que plusieurs développeurs interviennent sur le projet, avec chacun une instance du projet sur sa machine en local (chaque instance utilisant une base de données de test en local) ; on voit que certains paramètres vont être partagés au niveau du projet (la langue, les modules installés...), et certains vont être spécifiques à chaque instance (la base de données...).<br />
<br />
<br />
<br />
Éditez le fichier "my_project27/settings.py", et changez les valeurs suivantes, pour la langue et le fuseau horaire de base :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>LANGUAGE_CODE = 'fr'<br />
TIME_ZONE = 'Europe/Paris'</code></div></div><br />
Il faut aussi, pour un fonctionnement correct, définir le domaine sur lequel va être accessible votre instance (cela permet notamment lorsque des e-mails sont envoyés par Creme d'inclure des liens HTML vers des fiches Creme). Exemple :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>SITE_DOMAIN = 'http://creme.mon-entreprise.fr'</code></div></div><br />
Note: on garde la listes des apps -- les modules Creme/Django -- par défaut ; elle est contenue par le <span style="font-style: italic;" class="mycode_i">setting</span> INSTALLED_APP pour information. <br />
<br />
<br />
<br />
En ce qui concerne les paramètres liés à votre instance, les commentaires dans "settings.py" expliquent les différentes approches. Les administrateurs confirmés choisiront leur méthode préférée ; ici nous allons partir sur une méthode simple, facile à expliquer et à mettre en place. À la fin du fichier "settings.py", ajoutez ces quelques lignes qui importent les paramètres venant du fichier "local_settings.py" :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>try:<br />
    from .local_settings import *<br />
except ImportError:<br />
    pass</code></div></div><br />
<br />
Note: un fichier "my_project27/local_settings.py", que nous allons remplir juste après, a normalement déjà été créé par la commande "creme_start_project". Si vous optez pour une autre méthode pour gérer vos paramètres d'instances (comme la méthode à base de variables d'environnement), vous pourrez le supprimer.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une nouvelle installation</span></span><br />
<br />
<br />
<br />
Depuis le répertoire "my_project27/" (celui le plus haut niveau), lancez la commande suivante :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme build_secret_key --settings=my_project27.settings</code></div></div><br />
<br />
Celle-ci a généré votre clé secrète, qu'il faudra mettre dans votre "local_settings.py", dans la variable SECRET_KEY (entre les '', à la place de la valeur par défaut). <br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une migration depuis Creme 2.6</span></span><br />
<br />
<br />
<br />
Copiez les valeurs présentes dans les fichiers "settings.py" & "local_settings.py" de votre vieille installation dans ceux de votre projet, notamment SECRET_KEY & DATABASES (nous revenons sur cette dernière juste après évidemment).<br />
<br />
<br />
<br />
Dans votre installation de Creme 2.6, allez dans le répertoire configuré comme MEDIA_ROOT dans les vieux <span style="font-style: italic;" class="mycode_i">settings</span> ("my_project26/my_project26/media/upload" par défaut). Si vous avez utilisé des Documents dans Creme, ou bien exporté des factures/Devis en PDF, vous devriez avoir des sous-répertoires ("documents", "billing" etc...). Si c'est bien le cas, <span style="font-weight: bold;" class="mycode_b">copier</span> ces répertoires (et leur contenu évidemment) dans le répertoire MEDIA_ROOT du nouveau projet ("my_project27/my_project27/media/upload", par défaut).<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Configuration de la base de données</span></span><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Attention, en cas de migration depuis Creme 2.6</span>:  comme nous l'avons dit en introduction, nous allons dupliquer la base de données plutôt que d'en créer une nouvelle, donc n'oublier pas de <span style="font-weight: bold;" class="mycode_b">mettre le nom de votre nouvelle base</span> dans le fichier "local_settings.py" de votre projet. En effet comme il contient le nom de votre ancienne base, c'est celle-ci qui serait migrée (mas de panique si vous avez bien dupliqué au préalable, au pire votre ancienne base n'est pas perdu elle a juste un nouveau nom).<br />
<br />
<br />
<br />
Pour le moment, la variable DATABASES doit contenir la valeur suivante (que nous allons modifier/compléter par la suite) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        # Possible backends: 'postgresql', 'mysql', 'sqlite3'.<br />
        'ENGINE': 'django.db.backends.sqlite3',<br />
<br />
        # Name of the database, or path to the database file if using 'sqlite3'.<br />
        'NAME': BASE_DIR / 'db.sqlite3',<br />
<br />
        # Not used with sqlite3.<br />
        'USER': '',<br />
        'PASSWORD': '',<br />
<br />
        # Set to empty string for localhost. Not used with 'sqlite3'.<br />
        'HOST': '',<br />
<br />
        # Set to empty string for default. Not used with 'sqlite3'.<br />
        'PORT': '',<br />
<br />
        # Extra parameters for database connection.<br />
        # Consult backend module's document for available keywords.<br />
        # 'OPTIONS': {},<br />
    },<br />
}</code></div></div><br />
<br />
Avant de passer au déploiement de Crème proprement dit, on va devoir configurer la base de données. Creme est testé avec trois systèmes de gestion de base de données: SQLite, MySQL & PostgreSQL. Django permet aussi d'utiliser une base Oracle, mais nous n'avons jamais eu l'occasion de tester une telle configuration (mais pourquoi utiliser un SGBDR propriétaire quand l'offre libre est aussi bonne ?). Il existe aussi des <span style="font-style: italic;" class="mycode_i">backends</span> pour d'autres SGBDR (firebird, sqlserver ...) qui sont distribués à part de Django ; là encore nous ne les avons pas testés, et ne pouvons garantir leur fonctionnement (mais si vous avez essayé, vos retours sont évidemment les bienvenus, ne serait-ce que par curiosité technique).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">SQLite</span></span><br />
<br />
<br />
<br />
SQLite est surtout utile si vous êtes un développeur, afin de tester rapidement votre travail. C'est aussi envisageable si vous comptez utiliser Creme<br />
<br />
en tant qu'application monoposte et avec peu de données (c'est sûrement une mauvaise idée pour des dizaines de milliers de fiches). Si vous n'êtes pas dans ces 2 cas, nous vous <span style="font-weight: bold;" class="mycode_b">déconseillons vivement</span> une telle configuration.<br />
<br />
<br />
<br />
Si vous choisissez SQLite, la configuration est très simple (pas d'utilisateur ou de mot de passe) ; éditez la variable DATABASES de votre local_settings.py ainsi :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.sqlite3',<br />
        'NAME':     '/chemin/absolu/vers/un/fichier.db',<br />
        'HOST':     '',<br />
        'PORT':     '',<br />
    },<br />
}</code></div></div><br />
<br />
Vous devez évidemment mettre une chemin valide en tant que NAME (le fichier sera créé s'il n'existe pas, mais faites attention que Creme ait bien les permissions d'écrire dans le répertoire choisi).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : pour dupliquer une base SQLite il suffit de copier l'ancien fichier.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">MySQL</span></span><br />
<br />
<br />
<br />
MySQL est un choix classique pour un serveur de production ; il est très répandu et facile à configurer. En revanche, il n'est pas toujours possible de le configurer aussi finement qu'on le voudrait, et a tendance à voir ses performances varier étrangement au grès des versions (la plupart du temps dans le bon sens, mais pas toujours) . C'est donc un bon choix si vous le connaissez déjà, et que vous ne visez pas des volumes importants de données (pour quelques centaines de milliers de fiches ça devrait être satisfaisant -- ça dépend de votre matériel évidemment).<br />
<br />
<br />
<br />
Pour que Crème puisse utiliser MySQL, il faut créer une base de données et un utilisateur qui a les droits sur celle-ci. Vous pouvez bien entendu le faire en graphique grâce à un outil d'administration de BD.<br />
<br />
<br />
<br />
Voici comment le faire en console. Notez qu'en fonction de la version de MySQL les commandes peuvent changer ; les instructions suivantes fonctionnent avec MySQL 8 ; référez vous à la documentation de votre version de MySQL si les commandes ne fonctionnent pas.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> :<br />
<br />
- les versions 10.5 et supérieures sont officiellement gérées par Django. En revanche nous sommes tombés plusieurs fois sur des erreurs un peu ésotériques (c'est aussi vrai avec MySQL ceci dit) et ce n'est pas forcément la base que nous vous conseillerions.<br />
<br />
- si vous utilisez MariaDB 10.7 ou plus et que vous mettez à jour depuis une installation existante, copiez le script "creme/creme_core/migrations/migrate_uuid.sql", éditez votre version pour supprimer les lignes qui concernent des apps que vous n'avez pas installées, puis exécutez-le (il permet de convertir certains champs en vrais champs UUID pour éviter des plantages).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. Par exemple dans PHPMyadmin, si vous allez sur votre ancienne base, il y  a un onglet "Opérations" qui contient une section "Copier la base de données vers" (qui permet de conserver les privilèges -- normalement la case pour les conserver est cochée par défaut). N'oubliez pas plus bas de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
D'abord logguez vous dans MySQL avec la commande suivante : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
<br />
Puis passez sur la base de configuration avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>use mysql;</code></div></div><br />
<br />
Ajoutez maintenant votre utilisateur (en remplaçant les valeurs d'exemple par vos propres valeurs) avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE USER 'cremeuser'@'localhost' IDENTIFIED BY '34jkfue1dioaA';</code></div></div><br />
<br />
Puis nous créons la base de données :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE DATABASE cremecrmdb;</code></div></div><br />
<br />
et enfin nous donnons à votre l'utilisateur toutes les permissions sur la base de données de Creme :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON cremecrmdb.* TO 'cremeuser'@'localhost' WITH GRANT OPTION;</code></div></div><br />
<br />
Éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez si nécessaire remplacer les noms de la base, de l'utilisateur et son mot de passe par les valeurs que vous avez défini précédemment)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.mysql',<br />
        'NAME':     'cremecrmdb',<br />
        'USER':     'cremeuser',<br />
        'PASSWORD': '34jkfue1dioaA',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">PostgreSQL</span></span><br />
<br />
<br />
<br />
PostgreSQL est sûrement le meilleur choix pour les volumes de données importants ; non seulement ses performances sont excellentes, mais c'est aussi le SGBDR le plus rigoureux en terme de cohérence des données.<br />
<br />
<br />
<br />
Les instructions du début de ce tutoriel étaient plutôt faites pour un déploiement avec MySQL ; aussi il va falloir installer des paquets supplémentaires si vous souhaitez utiliser PostgreSQL.<br />
<br />
<br />
<br />
Comme pour MySQL, il vous faut maintenant créer un utilisateur dédié à Creme, ainsi qu'une base sur lequel l'utilisateur a tous les droits. Là encore c'est possible en console comme en graphique (en graphique, le programme "pgAdmin III" fait un très bon travail).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : comme déjà dit, il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. N'oubliez pas ci-dessous de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
Lorsque c'est fait, éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez remplacer les noms de la base de l'utilisateur et son mot de passe par les valeurs que vous avez choisies juste avant)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.postgresql',<br />
        'NAME':     'nom_de_la_base',<br />
        'USER':     'nom_de_l_utilisateur',<br />
        'PASSWORD': 'm0t_de_p4&#36;&#36;',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Remplissage de la base de données</span></span><br />
<br />
<br />
<br />
Toujours dans le répertoire racine "my_project27/", tapez la commande suivante pour créer les tables de la base :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme migrate --settings=my_project27.settings</code></div></div><br />
Puis on remplit la base avec les données initiales (utilisateur administrateur, société initiale, configuration par défaut etc…) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_populate --settings=my_project27.settings</code></div></div><br />
<br />
Ne vous inquiétez pas des messages du genre <Disable populate for "vcfs": it does not have any "populate.py" script>, ils indiquent juste que certaines apps n'ont pas besoin de créer des données initiales.<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Génération des <span style="font-style: italic;" class="mycode_i">bundles d'assets</span> statiques</span></span><br />
<br />
<br />
<br />
Il s'agit de créer des fichiers optimisés pour le CSS et le JavaScript, ainsi que des images avec des noms pensés pour être mises en cache intelligemment :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme generatemedia --settings=my_project27.settings</code></div></div><br />
<br />
Voici la sortie que vous devriez avoir :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>Generating l10n.js with variation {'language': 'en'}<br />
Generating l10n.js with variation {'language': 'fr'}<br />
Generating lib.js with variation {}<br />
Generating main.js with variation {}<br />
Generating testlib.js with variation {}<br />
Generating testcore.js with variation {}<br />
Generating icecreammain.css with variation {}<br />
Generating chantillymain.css with variation {}</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Choix des apps installées</span></span><br />
<br />
<br />
<br />
Pour des raisons de simplicité, nous avons choisi d'installer Creme avec sa liste d'apps par défaut, qui couvre la plupart des besoins courants. Sont écartées de cette liste l'app "mobile" pour proposer en plus un ensemble de vues plus adaptées aux smartphones, et "polls" qui permet de faire des questionnaires/sondages internes.<br />
<br />
<br />
<br />
Creme étant modulaire, vous pouvez choisir plus finement les apps installées ; même si pour une première installation, vous devriez sûrement garder la liste de base (vous pouvez passer au chapitre suivant). Pour avoir une liste personnalisée, modifiez variable INSTALLED_APPS comme indiqué dans les commentaires de "project/settings.py".<br />
<br />
<br />
<br />
2 points importants :<br />
<br />
- vous ne pouvez enlever (en pratique mettez plutôt en commentaire avec un '#' en début de ligne) que les apps dans la section CREME OPTIONAL APPS, qui sont optionnelles comme l'indique le nom.<br />
<br />
- dans la liste sont indiquées des dépendances ; certaines apps nécessitent la présence d'autres apps. Cependant pas de craintes, si vous oubliez une dépendance, Creme générera une erreur assez claire à ce sujet.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Choix avant l'installation</span></span><br />
<br />
<br />
<br />
Si vous n'avez pas encore créé la base de données, vous pouvez juste commenter/dé-commenter les noms des apps optionnelles, avant de faire les étapes des chapitres précédents (migrate, creme_populate, generatemedia).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Ajouter des apps après l'installation</span></span><br />
<br />
<br />
<br />
Si vous souhaitez ajouter des apps après installation (ex: après plusieurs jours/mois d'utilisation un besoin apparaît), dé-commentez les apps voulues (toujours en respectant les dépendances -- ex: si vous voulez "events", "opportunities" doit aussi être dé-commenté), puis lancez les même commandes que pour l'installation initiale: migrate, creme_populate, generatemedia.<br />
<br />
<br />
<br />
(en effet il faut bien créer les nouvelles tables, les peupler, et aussi installer le nouveau JavaScript/CSS/...)<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Désinstaller une app après l'installation</span></span><br />
<br />
<br />
<br />
Il existe plusieurs mécanismes, comme la configuration visuelle du menu ou la désactivation des type de relation, qui permettent de rendre très peu visible une app globalement inutile, et vous devriez commencer par là (car aucun risque de casser quoi que ce soit). Mais si vous le souhaitez vraiment, vous pouvez réellement désinstaller une app.<br />
<br />
<br />
<br />
C'est une opération un peu délicate, car des données relatives à l'app que vous voulez désinstaller peuvent exister en base, et être reliées à des données qui elles ne doivent pas être supprimées (car relatives à des apps que vous garder), tout en gardant un système cohérent... Donc :<br />
<br />
<br />
<br />
- privilégiez les apps pour lesquelles vous n'avez pas créé de données (typiquement aucune fiche).<br />
<br />
- faites une sauvegarde avant.<br />
<br />
<br />
<br />
La désinstallation d'une app se fait grâce à une commande, "creme_uninstall". Notez qu'il faut désinstaller une app à la fois (c'est déjà assez délicat comme ça...) ; si vous voulez désinstaller plusieurs apps, alors appliquez la méthode de désinstallation plusieurs fois, en respectant là encore les dépendances (ex: pour désinstaller "events" et "opportunities", faites le dans cet ordre, pour qu'à aucun moment une app n'ait pas ses dépendances installées). L'app que vous désinstallez doit être présente dans votre INSTALLED_APPS.<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_uninstall --settings=my_project27.settings app_a_desinstaller</code></div></div><br />
<br />
Si tout s'est bien déroulé, la commande vous demandera une fois finie de mettre en commentaire l'app dans votre INSTALLED_CREME_APPS.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du serveur</span></span><br />
<br />
<br />
<br />
Une fois cela fait il ne nous reste plus qu'à lancer le serveur de test en faisant :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme runserver --settings=my_project27.settings</code></div></div><br />
<br />
Vous pouvez maintenant vous connecter sur <a href="http://localhost:8000" target="_blank" rel="noopener" class="mycode_url">http://localhost:8000</a> pour voir que votre Crème fonctionne. La commande 'creme_populate' vous a indiqué qu'elle a créé un utilisateur "root" (mot de passe "root") ; utilisez cet utilisateur pour vous connecter. Vous êtes <span style="font-weight: bold;" class="mycode_b">très vivement</span> encouragé à changer immédiatement le mot de passe  (dans le menu en haut > icône rouage > Utilisateurs).<br />
<br />
<br />
<br />
Mais, et je vais le répéter, ce serveur de développement n'est pas fait pour être utiliser dans un contexte de production. Par exemple, pour mettre en production avec Apache et mod_wsgi, vous pouvez suivre cet autre billet: <a href="https://www.cremecrm.com/forum/showthread.php?tid=110" target="_blank" rel="noopener" class="mycode_url">https://www.cremecrm.com/forum/showthread.php?tid=110</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du gestionnaire de jobs</span></span><br />
<br />
<br />
<br />
Certaines fonctionnalités (import des fichiers CSV/XLS, envoi des campagnes d'e-mails...) sont effectuées par des jobs tournant en parallèle du serveur Web. Ces jobs sont gérés par un gestionnaire qui s'occupent de créer ces processus lorsque c'est nécessaire.<br />
<br />
<br />
<br />
Ce gestionnaire doit être lancé à part, et tourner en permanence  ; si ce n'est pas le cas, la majorité de Creme fonctionnera parfaitement, mais pas les fonctionnalités basées sur les jobs. Si vous allez sur la liste des jobs (menu > Outils > Jobs) un message d'erreur vous indiquera si le gestionnaire est injoignable. Pour lancer le gestionnaire :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_job_manager --settings=my_project27.settings</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mise à jour</span></span><br />
<br />
<br />
<br />
Il est évidemment conseillé de régulièrement faire des sauvegarde de votre base de données, ainsi que des fichiers télé-versés dans "my_project27/media/upload/" ; c'est d'autant plus vrai avant une mise-à-jour.<br />
<br />
<br />
<br />
Vous pouvez vous tenir à jour des nouvelles <span style="font-style: italic;" class="mycode_i">releases</span> grâce par exemple à la <a href="https://pypi.org/project/creme-crm/#history" target="_blank" rel="noopener" class="mycode_url">page du paquet sur pyPI</a> qui explique comment faire faire (par exemple en suivant le flux RSS fait pour).<br />
<br />
<br />
<br />
Plus tard lorsque sortiront des versions de corrections pour Creme2.6, vous pourrez mettre à jour Creme et ses dépendances avec (adaptez avec le tag utilisé auparavant suivant votre SGBD -- MySQL dans cet exemple) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install -U creme-crm[mysql]==2.7.XYZ</code></div></div><br />
<br />
Le fichier CHANGELOG.TXT contient les nouveautés, ainsi que des notes sur les commandes. Dans le doute vous pouvez toujours mettre à jour la base de données avec les commandes "migrate" & "creme_populate"  (au pire les commandes ne feront rien) et ré-générer les <span style="font-style: italic;" class="mycode_i">assets</span> statiques comme au dessus avec "generatemedia".]]></description>
			<content:encoded><![CDATA[<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
<br />
<br />
Il s'agira ici d'installer Creme 2.7 soit depuis zéro, soit depuis une installation de Creme 2.6 (notez que vous ne devriez migrer que d'une version à la fois -- donc si vous êtes en 2.5, vous devez migrer vers 2.6 avant de pouvoir migrer vers 2.7 par exemple).<br />
<br />
<br />
<br />
Ce tutoriel d'installation parle des plateformes suivantes :<br />
<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">GNU/Linux</span> en se concentrant sur Debian & Ubuntu ; lorsque des noms de paquets sont donnés, ce sont les noms dans ces 2 distributions, et il vous faudra chercher les équivalents sur votre propre distribution (n'hésitez pas pas à nous indiquer si vous avez des noms de paquets différents -- ils peuvent changer selon les versions de Debian par example -- ou si vous avez installé sur une autre distribution, afin que nous puissions améliorer ce tutoriel).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Windows</span> ; attention l'installation sous Windows est un peu plus complexe à cause du manque par défaut d'un gestionnaire de paquets. En plus ce n'est pas la plateforme la plus testée (mais si vous avez des problèmes/retours/patches vous pouvez en parler dans les commentaires notamment).<br />
</li>
</ul>
Le code de Creme ne faisant pas spécialement de "linuxeries", l'installer sur d'autres Unix (comme MacOSX) ne devrait pas dans l'absolu poser de souci particulier. Il nous est cependant difficile pour le moment de vous indiquer une marche à suivre précise n'utilisant pas (encore) ces systèmes. Là encore, tout retour de personnes ayant essayé est le bienvenu ; nous savons par exemple que des gens font tourner Creme avec succès sur FreeBSD.<br />
<br />
<br />
<br />
Pour ce tutoriel d'installation de Crème CRM on va faire les choses du mieux possible. On va donc installer des choses qui pourraient vous sembler inutiles mais qui à terme permettront d'avoir une installation pérenne et qui ne rentrera pas en collision avec d'autres logiciels que vous pourriez vouloir installer. <br />
<br />
<br />
<br />
Ce tutoriel vous permet d'installer tout le nécessaire pour faire fonctionner Crème avec le serveur de développement intégré dans Django. Le serveur de développement n'est pas une façon pérenne de faire fonctionner une application Django. Mais c'est un moyen simple de vérifier que tout fonctionne et vous pouvez faire quelques tests avec pour vérifier que Crème vous convient.  Le tutoriel vous permettant d'utiliser Apache avec Crème (plus compliqué à faire fonctionner, mais c'est une façon pérenne de faire les choses) est le sujet d'un autre billet indiqué à la fin. <br />
<br />
<br />
<br />
Une remarque très importante : si l'utilisation du serveur de développement est déconseillé pour une utilisation sur du long terme dans le cadre d'une machine personnelle, elle est par contre totalement interdite dans le cadre d'un hébergement sur un serveur. Si vous comptez installer Crème  tout de suite sur un serveur, il ne faut pas, pas une seule seconde, utiliser le serveur de développement. En effet celui-ci est fait pour le test et rien d'autre. Il n'est pas prévu, ni en terme de performance ni en terme de sécurité, pour être utilisé dans un vrai contexte de production. <br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Avant propos</span></span><br />
<br />
<br />
<br />
Notre objectif est d'installer & configurer un environnement <a href="http://www.virtualenv.org/en/latest/" target="_blank" rel="noopener" class="mycode_url">Virtualenv</a>. Virtualenv vous permet en effet d'avoir plusieurs environnements virtuels Python. L’intérêt est de pouvoir cloisonner les dépendances par projet. Vous êtes ainsi sûr que votre Crème n’arrêtera pas de fonctionner juste parce que vous avez dû mettre à jour une librairie Python pour pouvoir installer un autre logiciel. On ne va pas se contenter d'installer Virtualenv et on va installer aussi <a href="http://www.doughellmann.com/docs/virtualenvwrapper" target="_blank" rel="noopener" class="mycode_url">Virtualenvwrapper</a> qui est une surcouche à Virtualenv et qui vous simplifiera les choses.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : nous allons installer Creme 2.7 en parallèle de votre installation de Creme 2.6, en dupliquant les données. Ainsi en cas de gros problèmes vous pourrez revenir à votre installation précédente, que nous n'aurons pas détruite ; les éventuelles nouvelles données rentrées dans Creme 2.7 seront évidemment absentes de votre vieille installation, mais il s'agit ici plutôt de détecter les gros dysfonctionnements que vous auriez immédiatement.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de Python</span></span><br />
<br />
<br />
<br />
Pour commencer, il vous faut avoir Python 3 (au moins 3.10) sur votre système ainsi que l'installeur 'pip' qui permet de télécharger & installer des paquets python.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Windows :</span><br />
<br />
Il faut vous rendre ici : <a href="https://www.python.org/downloads/windows/" target="_blank" rel="noopener" class="mycode_url">https://www.python.org/downloads/windows/</a><br />
<br />
L'installeur pour Windows contient l'interpréteur Python ainsi que 'pip'.<br />
<br />
Note: il est important que vous partiez d'une installation vide de Python ; si vous avez déjà des paquets externes pour Python qui ne sont pas installés dans un Virtual Env, ces derniers prendront le pas sur les paquets du Virtual Env (et donc de mauvaises versions de paquets pourront être utilisées empêchant Creme de fonctionner) (ce problème étant spécifique à Windows).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Linux :</span><br />
<br />
Utilisez le gestionnaire de paquet de votre distribution ; si vous êtes sous Debian ou Ubuntu il vous suffit de faire : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>sudo apt-get install python3<br />
sudo apt-get install python-setuptools<br />
sudo apt-get install python-pip</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation des logiciels externes</span></span><br />
<br />
<br />
<br />
En plus de Python il va vous falloir installer :<br />
<ul class="mycode_list"><li>Un serveur web compatible avec Python. Il y a le choix mais le grand classique reste Apache (version 2.4 actuellement). Comme indiqué plus haut vous pouvez aussi dans un premier temps utiliser le serveur de développement (inclus avec Django) avant de passer à un serveur de production comme Apache ou NginX.<br />
</li>
<li>Un serveur de base de données: MySQL (8.0.11 ou plus), MariaDB (10.5 ou plus) ou PostGreSQL (14 ou plus) ; dans un premier temps vous pouvez aussi tester avec une base SQLite (rien besoin d'installer c'est fourni avec Python).<br />
</li>
<li>Redis ; ça fonctionne avec des versions anciennes (3.X) ou récentes (4.X +) donc cela ne devrait pas être un problème (préférez les versions plus récentes évidemment): <a href="https://redis.io/download" target="_blank" rel="noopener" class="mycode_url">https://redis.io/download</a><br />
Note: sous Unix il est possible de s'en passer et d'utiliser une socket Unix afin de communiquer avec le serveur de job (vous pourrez regarder, une fois votre installation globalement fonctionnelle au setting JOBMANAGER_BROKER).<br />
</li>
</ul>
Sous Windows, <a href="http://www.wampserver.com/" target="_blank" rel="noopener" class="mycode_url">wampserver</a> vous facilitera sûrement la vie si vous comptez installer Apache et MySQL.<br />
<br />
<br />
<br />
Sous Linux, vérifiez que vous avez les paquets suivants (ce sont les noms sous Ubuntu ; ils peuvent être différents sous une autre distribution évidemment) :<br />
<ul class="mycode_list"><li>mysql-client & mysql-server (si vous utilisez MySQL)<br />
</li>
<li>postgresql & postgresql-client-common (si vous utilisez PostGreSQL)<br />
</li>
<li>redis-server (sauf si vous utilisez une socket Unix comme indiqué plus haut)<br />
</li>
<li>language-pack-fr<br />
</li>
</ul>
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">(Linux) Installation des bibliothèques "système"</span></span><br />
<br />
<br />
<br />
Pour pouvoir installer certains paquets dans votre environnement Python, il vous faudra certaines bibliothèques de développement afin de pouvoir compiler certains paquets.<br />
<br />
<br />
<br />
Avant d'aller plus loin, il faut que vous vérifiez que les packages suivants sont bien installés, sinon, installez les : <br />
<ul class="mycode_list"><li>python3-dev<br />
</li>
<li>libmysqlclient-dev (si vous utilisez MySQL)<br />
</li>
<li>libpq-dev  (si vous utilisez PostGreSQL)<br />
</li>
<li>libjpeg-dev (et potentiellement les autres bibliothèques de gestion d'images selon vos besoins, comme libpng*-dev, libtiff*-dev, libgif-dev...)<br />
</li>
<li>libcairo-dev<br />
</li>
</ul>
<br />
<br />
Là encore, il s'agit des noms sous Debian/Ubuntu ; sous Fedora le suffixe est plutôt"-devel", donc "libpq-dev" s’appellera par exemple "libpq-devel".<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de l'environnement virtuel</span></span><br />
<br />
<br />
<br />
Nous allons créer un environnement virtuel Python (<span style="font-style: italic;" class="mycode_i">virtualenv</span>) pour Crème, qui contiendra toutes les bibliothèques Python nécessaires dans les bonnes versions (donc sans que votre système n'aient à les fournir). <br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : créez un nouveau Virtualenv pour Creme 2.7, et gardez donc intact celui de de votre Creme 2.6 .<br />
<br />
<br />
<br />
Une fois cela fait et après avoir rechargé votre configuration, vous pouvez créer votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> en tapant la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>python3 -m venv ~/venv/creme_2_7</code></div></div><br />
<br />
Notes :<br />
<br />
 - "python3" désigne l'exécutable de Python 3 sur votre OS (sous Unix vous aurez souvent un lien python3.XX qui référence le même binaire).<br />
<br />
 -  on a choisi ici de créer un répertoire "venv" (qui pourrait contenir tous vos <span style="font-style: italic;" class="mycode_i">virtualenv</span>) dans votre répertoire HOME, mais ce n'est évidemment pas une obligation. Sous <span style="font-weight: bold;" class="mycode_b">Windows</span> le chemin ressemblerait plus à "C:\chemin\vers\nouveau\virtual\environment".<br />
<br />
<br />
<br />
Une fois que votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> est créé, il faut l'activer pour votre console. Vous allez en effet installer de nouveaux packages Python et faire des commandes Django et tout doit se faire dans votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>. <br />
<br />
<br />
<br />
Sous Unix+Bash, vous activez comme ceci :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>source ~/venv/creme_2_7/bin/activate</code></div></div><br />
<br />
Sous Windows avec l'invite de commande classique :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>&lt;chemin_vers_venv&gt;&#92;Scripts&#92;activate.bat</code></div></div><br />
<br />
La commande "deactivate" permet de sortir d'un <span style="font-style: italic;" class="mycode_i">virtualenv</span> pour revenir à votre environnement système classique. <br />
<br />
<br />
<br />
Pour plus de détails (si vous utilisez un autre système/shell par exemple), regardez la <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noopener" class="mycode_url">documentation officielle</a>.<br />
<br />
<br />
<br />
Maintenant que vous avez activé votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>, il vous faut installer le paquet creme-crm, qui installera aussi les dépendances nécessaires. Il existe des variantes, principalement pour choisir votre serveur de base de données (MySQL ou PostgreSQL -- SQLite n'ayant pas de besoin particulier). Les avantages et inconvénients des différents types de base sont expliqués plus bas si vous avez des doutes.<br />
<br />
<br />
<br />
Si vous souhaitez utiliser SQLite, il vous suffit de taper :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm~=2.7</code></div></div><br />
<br />
Pour MySQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[mysql]~=2.7</code></div></div><br />
<br />
Pour PostgreSQL :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[pgsql]~=2.7</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes sur MariaDB</span><br />
<br />
<br />
<br />
Si vous avez installé MariaDB plutôt que MySQL (paquet "<span style="font-style: italic;" class="mycode_i">libmariadbclient-dev</span>" sur Debian10), et que vous avez une erreur "<span style="font-weight: bold;" class="mycode_b"> /bin/sh: 1: mysql_config: not found</span>", créez le lien symbolique suivant :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>ln -s /usr/bin/mariadb_config /usr/bin/mysql_config</code></div></div><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes pour Windows:</span><br />
<br />
<br />
<br />
Certains paquets (comme "<span style="font-style: italic;" class="mycode_i">mysqlclient</span>") peuvent être retords à s'installer, et le site suivant, qui contient des paquets pré-compilés, pourrait grandement vous aider: <a href="https://www.lfd.uci.edu/~gohlke/pythonlibs/" target="_blank" rel="noopener" class="mycode_url">https://www.lfd.uci.edu/~gohlke/pythonlibs/</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Création de votre projet</span></span><br />
<br />
<br />
<br />
Dans Creme 2.7, une instance est bien séparée des sources de Creme elles-mêmes. Nous allons lancer une commande qui va créer un répertoire contenant entre autres la configuration de votre instance. Placez vous donc dans votre arborescence à un endroit adéquate, et faîtes :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_start_project my_project27</code></div></div><br />
<br />
Un répertoire "my_project27" a normalement été créé (note: c'est lui que vous devriez mettre sous version, avec git/mercurial/svn...). Déplacez vous dans ce répertoire (les commandes qui suivront partirons du principe qu'on est resté dans ce premier répertoire "my_project27") :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>cd my_project27</code></div></div><br />
<br />
Il contient principalement un autre répertoire s'appelant lui aussi "my_project27", dans lequel on trouve un fichier nommé "settings.py" qui va contenir la configuration de notre instance. Si vous ouvrez ce fichier vous trouverez quelques valeurs de bases définies par défaut, et pas mal d'explications sur les quelques valeurs qu'il reste à définir pour avoir une instance  fonctionnelle. On vous y explique aussi qu'il est important pour faire les choses proprement de séparer les <span style="font-style: italic;" class="mycode_i">settings</span> liés à votre projet, et ceux liés à une instance en particulier. Mettons que plusieurs développeurs interviennent sur le projet, avec chacun une instance du projet sur sa machine en local (chaque instance utilisant une base de données de test en local) ; on voit que certains paramètres vont être partagés au niveau du projet (la langue, les modules installés...), et certains vont être spécifiques à chaque instance (la base de données...).<br />
<br />
<br />
<br />
Éditez le fichier "my_project27/settings.py", et changez les valeurs suivantes, pour la langue et le fuseau horaire de base :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>LANGUAGE_CODE = 'fr'<br />
TIME_ZONE = 'Europe/Paris'</code></div></div><br />
Il faut aussi, pour un fonctionnement correct, définir le domaine sur lequel va être accessible votre instance (cela permet notamment lorsque des e-mails sont envoyés par Creme d'inclure des liens HTML vers des fiches Creme). Exemple :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>SITE_DOMAIN = 'http://creme.mon-entreprise.fr'</code></div></div><br />
Note: on garde la listes des apps -- les modules Creme/Django -- par défaut ; elle est contenue par le <span style="font-style: italic;" class="mycode_i">setting</span> INSTALLED_APP pour information. <br />
<br />
<br />
<br />
En ce qui concerne les paramètres liés à votre instance, les commentaires dans "settings.py" expliquent les différentes approches. Les administrateurs confirmés choisiront leur méthode préférée ; ici nous allons partir sur une méthode simple, facile à expliquer et à mettre en place. À la fin du fichier "settings.py", ajoutez ces quelques lignes qui importent les paramètres venant du fichier "local_settings.py" :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>try:<br />
    from .local_settings import *<br />
except ImportError:<br />
    pass</code></div></div><br />
<br />
Note: un fichier "my_project27/local_settings.py", que nous allons remplir juste après, a normalement déjà été créé par la commande "creme_start_project". Si vous optez pour une autre méthode pour gérer vos paramètres d'instances (comme la méthode à base de variables d'environnement), vous pourrez le supprimer.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une nouvelle installation</span></span><br />
<br />
<br />
<br />
Depuis le répertoire "my_project27/" (celui le plus haut niveau), lancez la commande suivante :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme build_secret_key --settings=my_project27.settings</code></div></div><br />
<br />
Celle-ci a généré votre clé secrète, qu'il faudra mettre dans votre "local_settings.py", dans la variable SECRET_KEY (entre les '', à la place de la valeur par défaut). <br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une migration depuis Creme 2.6</span></span><br />
<br />
<br />
<br />
Copiez les valeurs présentes dans les fichiers "settings.py" & "local_settings.py" de votre vieille installation dans ceux de votre projet, notamment SECRET_KEY & DATABASES (nous revenons sur cette dernière juste après évidemment).<br />
<br />
<br />
<br />
Dans votre installation de Creme 2.6, allez dans le répertoire configuré comme MEDIA_ROOT dans les vieux <span style="font-style: italic;" class="mycode_i">settings</span> ("my_project26/my_project26/media/upload" par défaut). Si vous avez utilisé des Documents dans Creme, ou bien exporté des factures/Devis en PDF, vous devriez avoir des sous-répertoires ("documents", "billing" etc...). Si c'est bien le cas, <span style="font-weight: bold;" class="mycode_b">copier</span> ces répertoires (et leur contenu évidemment) dans le répertoire MEDIA_ROOT du nouveau projet ("my_project27/my_project27/media/upload", par défaut).<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Configuration de la base de données</span></span><br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Attention, en cas de migration depuis Creme 2.6</span>:  comme nous l'avons dit en introduction, nous allons dupliquer la base de données plutôt que d'en créer une nouvelle, donc n'oublier pas de <span style="font-weight: bold;" class="mycode_b">mettre le nom de votre nouvelle base</span> dans le fichier "local_settings.py" de votre projet. En effet comme il contient le nom de votre ancienne base, c'est celle-ci qui serait migrée (mas de panique si vous avez bien dupliqué au préalable, au pire votre ancienne base n'est pas perdu elle a juste un nouveau nom).<br />
<br />
<br />
<br />
Pour le moment, la variable DATABASES doit contenir la valeur suivante (que nous allons modifier/compléter par la suite) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        # Possible backends: 'postgresql', 'mysql', 'sqlite3'.<br />
        'ENGINE': 'django.db.backends.sqlite3',<br />
<br />
        # Name of the database, or path to the database file if using 'sqlite3'.<br />
        'NAME': BASE_DIR / 'db.sqlite3',<br />
<br />
        # Not used with sqlite3.<br />
        'USER': '',<br />
        'PASSWORD': '',<br />
<br />
        # Set to empty string for localhost. Not used with 'sqlite3'.<br />
        'HOST': '',<br />
<br />
        # Set to empty string for default. Not used with 'sqlite3'.<br />
        'PORT': '',<br />
<br />
        # Extra parameters for database connection.<br />
        # Consult backend module's document for available keywords.<br />
        # 'OPTIONS': {},<br />
    },<br />
}</code></div></div><br />
<br />
Avant de passer au déploiement de Crème proprement dit, on va devoir configurer la base de données. Creme est testé avec trois systèmes de gestion de base de données: SQLite, MySQL & PostgreSQL. Django permet aussi d'utiliser une base Oracle, mais nous n'avons jamais eu l'occasion de tester une telle configuration (mais pourquoi utiliser un SGBDR propriétaire quand l'offre libre est aussi bonne ?). Il existe aussi des <span style="font-style: italic;" class="mycode_i">backends</span> pour d'autres SGBDR (firebird, sqlserver ...) qui sont distribués à part de Django ; là encore nous ne les avons pas testés, et ne pouvons garantir leur fonctionnement (mais si vous avez essayé, vos retours sont évidemment les bienvenus, ne serait-ce que par curiosité technique).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">SQLite</span></span><br />
<br />
<br />
<br />
SQLite est surtout utile si vous êtes un développeur, afin de tester rapidement votre travail. C'est aussi envisageable si vous comptez utiliser Creme<br />
<br />
en tant qu'application monoposte et avec peu de données (c'est sûrement une mauvaise idée pour des dizaines de milliers de fiches). Si vous n'êtes pas dans ces 2 cas, nous vous <span style="font-weight: bold;" class="mycode_b">déconseillons vivement</span> une telle configuration.<br />
<br />
<br />
<br />
Si vous choisissez SQLite, la configuration est très simple (pas d'utilisateur ou de mot de passe) ; éditez la variable DATABASES de votre local_settings.py ainsi :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.sqlite3',<br />
        'NAME':     '/chemin/absolu/vers/un/fichier.db',<br />
        'HOST':     '',<br />
        'PORT':     '',<br />
    },<br />
}</code></div></div><br />
<br />
Vous devez évidemment mettre une chemin valide en tant que NAME (le fichier sera créé s'il n'existe pas, mais faites attention que Creme ait bien les permissions d'écrire dans le répertoire choisi).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : pour dupliquer une base SQLite il suffit de copier l'ancien fichier.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">MySQL</span></span><br />
<br />
<br />
<br />
MySQL est un choix classique pour un serveur de production ; il est très répandu et facile à configurer. En revanche, il n'est pas toujours possible de le configurer aussi finement qu'on le voudrait, et a tendance à voir ses performances varier étrangement au grès des versions (la plupart du temps dans le bon sens, mais pas toujours) . C'est donc un bon choix si vous le connaissez déjà, et que vous ne visez pas des volumes importants de données (pour quelques centaines de milliers de fiches ça devrait être satisfaisant -- ça dépend de votre matériel évidemment).<br />
<br />
<br />
<br />
Pour que Crème puisse utiliser MySQL, il faut créer une base de données et un utilisateur qui a les droits sur celle-ci. Vous pouvez bien entendu le faire en graphique grâce à un outil d'administration de BD.<br />
<br />
<br />
<br />
Voici comment le faire en console. Notez qu'en fonction de la version de MySQL les commandes peuvent changer ; les instructions suivantes fonctionnent avec MySQL 8 ; référez vous à la documentation de votre version de MySQL si les commandes ne fonctionnent pas.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> :<br />
<br />
- les versions 10.5 et supérieures sont officiellement gérées par Django. En revanche nous sommes tombés plusieurs fois sur des erreurs un peu ésotériques (c'est aussi vrai avec MySQL ceci dit) et ce n'est pas forcément la base que nous vous conseillerions.<br />
<br />
- si vous utilisez MariaDB 10.7 ou plus et que vous mettez à jour depuis une installation existante, copiez le script "creme/creme_core/migrations/migrate_uuid.sql", éditez votre version pour supprimer les lignes qui concernent des apps que vous n'avez pas installées, puis exécutez-le (il permet de convertir certains champs en vrais champs UUID pour éviter des plantages).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. Par exemple dans PHPMyadmin, si vous allez sur votre ancienne base, il y  a un onglet "Opérations" qui contient une section "Copier la base de données vers" (qui permet de conserver les privilèges -- normalement la case pour les conserver est cochée par défaut). N'oubliez pas plus bas de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
D'abord logguez vous dans MySQL avec la commande suivante : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
<br />
Puis passez sur la base de configuration avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>use mysql;</code></div></div><br />
<br />
Ajoutez maintenant votre utilisateur (en remplaçant les valeurs d'exemple par vos propres valeurs) avec la commande : <br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE USER 'cremeuser'@'localhost' IDENTIFIED BY '34jkfue1dioaA';</code></div></div><br />
<br />
Puis nous créons la base de données :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE DATABASE cremecrmdb;</code></div></div><br />
<br />
et enfin nous donnons à votre l'utilisateur toutes les permissions sur la base de données de Creme :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON cremecrmdb.* TO 'cremeuser'@'localhost' WITH GRANT OPTION;</code></div></div><br />
<br />
Éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez si nécessaire remplacer les noms de la base, de l'utilisateur et son mot de passe par les valeurs que vous avez défini précédemment)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.mysql',<br />
        'NAME':     'cremecrmdb',<br />
        'USER':     'cremeuser',<br />
        'PASSWORD': '34jkfue1dioaA',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">PostgreSQL</span></span><br />
<br />
<br />
<br />
PostgreSQL est sûrement le meilleur choix pour les volumes de données importants ; non seulement ses performances sont excellentes, mais c'est aussi le SGBDR le plus rigoureux en terme de cohérence des données.<br />
<br />
<br />
<br />
Les instructions du début de ce tutoriel étaient plutôt faites pour un déploiement avec MySQL ; aussi il va falloir installer des paquets supplémentaires si vous souhaitez utiliser PostgreSQL.<br />
<br />
<br />
<br />
Comme pour MySQL, il vous faut maintenant créer un utilisateur dédié à Creme, ainsi qu'une base sur lequel l'utilisateur a tous les droits. Là encore c'est possible en console comme en graphique (en graphique, le programme "pgAdmin III" fait un très bon travail).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : comme déjà dit, il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. N'oubliez pas ci-dessous de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
<br />
<br />
Lorsque c'est fait, éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez remplacer les noms de la base de l'utilisateur et son mot de passe par les valeurs que vous avez choisies juste avant)  :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.postgresql',<br />
        'NAME':     'nom_de_la_base',<br />
        'USER':     'nom_de_l_utilisateur',<br />
        'PASSWORD': 'm0t_de_p4&#36;&#36;',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Remplissage de la base de données</span></span><br />
<br />
<br />
<br />
Toujours dans le répertoire racine "my_project27/", tapez la commande suivante pour créer les tables de la base :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme migrate --settings=my_project27.settings</code></div></div><br />
Puis on remplit la base avec les données initiales (utilisateur administrateur, société initiale, configuration par défaut etc…) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_populate --settings=my_project27.settings</code></div></div><br />
<br />
Ne vous inquiétez pas des messages du genre <Disable populate for "vcfs": it does not have any "populate.py" script>, ils indiquent juste que certaines apps n'ont pas besoin de créer des données initiales.<br />
<br />
<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Génération des <span style="font-style: italic;" class="mycode_i">bundles d'assets</span> statiques</span></span><br />
<br />
<br />
<br />
Il s'agit de créer des fichiers optimisés pour le CSS et le JavaScript, ainsi que des images avec des noms pensés pour être mises en cache intelligemment :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme generatemedia --settings=my_project27.settings</code></div></div><br />
<br />
Voici la sortie que vous devriez avoir :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>Generating l10n.js with variation {'language': 'en'}<br />
Generating l10n.js with variation {'language': 'fr'}<br />
Generating lib.js with variation {}<br />
Generating main.js with variation {}<br />
Generating testlib.js with variation {}<br />
Generating testcore.js with variation {}<br />
Generating icecreammain.css with variation {}<br />
Generating chantillymain.css with variation {}</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Choix des apps installées</span></span><br />
<br />
<br />
<br />
Pour des raisons de simplicité, nous avons choisi d'installer Creme avec sa liste d'apps par défaut, qui couvre la plupart des besoins courants. Sont écartées de cette liste l'app "mobile" pour proposer en plus un ensemble de vues plus adaptées aux smartphones, et "polls" qui permet de faire des questionnaires/sondages internes.<br />
<br />
<br />
<br />
Creme étant modulaire, vous pouvez choisir plus finement les apps installées ; même si pour une première installation, vous devriez sûrement garder la liste de base (vous pouvez passer au chapitre suivant). Pour avoir une liste personnalisée, modifiez variable INSTALLED_APPS comme indiqué dans les commentaires de "project/settings.py".<br />
<br />
<br />
<br />
2 points importants :<br />
<br />
- vous ne pouvez enlever (en pratique mettez plutôt en commentaire avec un '#' en début de ligne) que les apps dans la section CREME OPTIONAL APPS, qui sont optionnelles comme l'indique le nom.<br />
<br />
- dans la liste sont indiquées des dépendances ; certaines apps nécessitent la présence d'autres apps. Cependant pas de craintes, si vous oubliez une dépendance, Creme générera une erreur assez claire à ce sujet.<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Choix avant l'installation</span></span><br />
<br />
<br />
<br />
Si vous n'avez pas encore créé la base de données, vous pouvez juste commenter/dé-commenter les noms des apps optionnelles, avant de faire les étapes des chapitres précédents (migrate, creme_populate, generatemedia).<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Ajouter des apps après l'installation</span></span><br />
<br />
<br />
<br />
Si vous souhaitez ajouter des apps après installation (ex: après plusieurs jours/mois d'utilisation un besoin apparaît), dé-commentez les apps voulues (toujours en respectant les dépendances -- ex: si vous voulez "events", "opportunities" doit aussi être dé-commenté), puis lancez les même commandes que pour l'installation initiale: migrate, creme_populate, generatemedia.<br />
<br />
<br />
<br />
(en effet il faut bien créer les nouvelles tables, les peupler, et aussi installer le nouveau JavaScript/CSS/...)<br />
<br />
<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Désinstaller une app après l'installation</span></span><br />
<br />
<br />
<br />
Il existe plusieurs mécanismes, comme la configuration visuelle du menu ou la désactivation des type de relation, qui permettent de rendre très peu visible une app globalement inutile, et vous devriez commencer par là (car aucun risque de casser quoi que ce soit). Mais si vous le souhaitez vraiment, vous pouvez réellement désinstaller une app.<br />
<br />
<br />
<br />
C'est une opération un peu délicate, car des données relatives à l'app que vous voulez désinstaller peuvent exister en base, et être reliées à des données qui elles ne doivent pas être supprimées (car relatives à des apps que vous garder), tout en gardant un système cohérent... Donc :<br />
<br />
<br />
<br />
- privilégiez les apps pour lesquelles vous n'avez pas créé de données (typiquement aucune fiche).<br />
<br />
- faites une sauvegarde avant.<br />
<br />
<br />
<br />
La désinstallation d'une app se fait grâce à une commande, "creme_uninstall". Notez qu'il faut désinstaller une app à la fois (c'est déjà assez délicat comme ça...) ; si vous voulez désinstaller plusieurs apps, alors appliquez la méthode de désinstallation plusieurs fois, en respectant là encore les dépendances (ex: pour désinstaller "events" et "opportunities", faites le dans cet ordre, pour qu'à aucun moment une app n'ait pas ses dépendances installées). L'app que vous désinstallez doit être présente dans votre INSTALLED_APPS.<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_uninstall --settings=my_project27.settings app_a_desinstaller</code></div></div><br />
<br />
Si tout s'est bien déroulé, la commande vous demandera une fois finie de mettre en commentaire l'app dans votre INSTALLED_CREME_APPS.<br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du serveur</span></span><br />
<br />
<br />
<br />
Une fois cela fait il ne nous reste plus qu'à lancer le serveur de test en faisant :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme runserver --settings=my_project27.settings</code></div></div><br />
<br />
Vous pouvez maintenant vous connecter sur <a href="http://localhost:8000" target="_blank" rel="noopener" class="mycode_url">http://localhost:8000</a> pour voir que votre Crème fonctionne. La commande 'creme_populate' vous a indiqué qu'elle a créé un utilisateur "root" (mot de passe "root") ; utilisez cet utilisateur pour vous connecter. Vous êtes <span style="font-weight: bold;" class="mycode_b">très vivement</span> encouragé à changer immédiatement le mot de passe  (dans le menu en haut > icône rouage > Utilisateurs).<br />
<br />
<br />
<br />
Mais, et je vais le répéter, ce serveur de développement n'est pas fait pour être utiliser dans un contexte de production. Par exemple, pour mettre en production avec Apache et mod_wsgi, vous pouvez suivre cet autre billet: <a href="https://www.cremecrm.com/forum/showthread.php?tid=110" target="_blank" rel="noopener" class="mycode_url">https://www.cremecrm.com/forum/showthread.php?tid=110</a><br />
<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du gestionnaire de jobs</span></span><br />
<br />
<br />
<br />
Certaines fonctionnalités (import des fichiers CSV/XLS, envoi des campagnes d'e-mails...) sont effectuées par des jobs tournant en parallèle du serveur Web. Ces jobs sont gérés par un gestionnaire qui s'occupent de créer ces processus lorsque c'est nécessaire.<br />
<br />
<br />
<br />
Ce gestionnaire doit être lancé à part, et tourner en permanence  ; si ce n'est pas le cas, la majorité de Creme fonctionnera parfaitement, mais pas les fonctionnalités basées sur les jobs. Si vous allez sur la liste des jobs (menu > Outils > Jobs) un message d'erreur vous indiquera si le gestionnaire est injoignable. Pour lancer le gestionnaire :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_job_manager --settings=my_project27.settings</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mise à jour</span></span><br />
<br />
<br />
<br />
Il est évidemment conseillé de régulièrement faire des sauvegarde de votre base de données, ainsi que des fichiers télé-versés dans "my_project27/media/upload/" ; c'est d'autant plus vrai avant une mise-à-jour.<br />
<br />
<br />
<br />
Vous pouvez vous tenir à jour des nouvelles <span style="font-style: italic;" class="mycode_i">releases</span> grâce par exemple à la <a href="https://pypi.org/project/creme-crm/#history" target="_blank" rel="noopener" class="mycode_url">page du paquet sur pyPI</a> qui explique comment faire faire (par exemple en suivant le flux RSS fait pour).<br />
<br />
<br />
<br />
Plus tard lorsque sortiront des versions de corrections pour Creme2.6, vous pourrez mettre à jour Creme et ses dépendances avec (adaptez avec le tag utilisé auparavant suivant votre SGBD -- MySQL dans cet exemple) :<br />
<br />
<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install -U creme-crm[mysql]==2.7.XYZ</code></div></div><br />
<br />
Le fichier CHANGELOG.TXT contient les nouveautés, ainsi que des notes sur les commandes. Dans le doute vous pouvez toujours mettre à jour la base de données avec les commandes "migrate" & "creme_populate"  (au pire les commandes ne feront rien) et ré-générer les <span style="font-style: italic;" class="mycode_i">assets</span> statiques comme au dessus avec "generatemedia".]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Installation de Crème CRM 2.6]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=256</link>
			<pubDate>Mon, 05 Aug 2024 15:44:39 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=256</guid>
			<description><![CDATA[<span style="font-size: small;" class="mycode_size">Corrections:</span><br />
<span style="font-size: small;" class="mycode_size">- </span><span style="font-size: small;" class="mycode_size">19 décembre 2024: utilisation de <span style="font-style: italic;" class="mycode_i">venv</span> à la place de <span style="font-style: italic;" class="mycode_i">virtualenvwrapper</span>.</span><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Il s'agira ici d'installer Creme 2.6 soit depuis zéro, soit depuis une installation de Creme 2.5 (notez que vous ne devriez migrer que d'une version à la fois -- donc si vous êtes en 2.4, vous devez migrer vers 2.5 avant de pouvoir migrer vers 2.6 par exemple).<br />
<br />
Ce tutoriel d'installation parle des plateformes suivantes :<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">GNU/Linux</span> en se concentrant sur Debian & Ubuntu ; lorsque des noms de paquets sont donnés, ce sont les noms dans ces 2 distributions, et il vous faudra chercher les équivalents sur votre propre distribution (n'hésitez pas pas à nous indiquer si vous avez des noms de paquets différents -- ils peuvent changer selon les versions de Debian par example -- ou si vous avez installé sur une autre distribution, afin que nous puissions améliorer ce tutoriel).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Windows</span> ; attention l'installation sous Windows est un peu plus complexe à cause du manque par défaut d'un gestionnaire de paquets. En plus ce n'est pas la plateforme la plus testée (mais si vous avez des problèmes/retours/patches vous pouvez en parler dans les commentaires notamment).<br />
</li>
</ul>
Le code de Creme ne faisant pas spécialement de "linuxeries", l'installer sur d'autres Unix (comme MacOSX) ne devrait pas dans l'absolu poser de souci particulier. Il nous est cependant difficile pour le moment de vous indiquer une marche à suivre précise n'utilisant pas (encore) ces systèmes. Là encore, tout retour de personnes ayant essayé est le bienvenu ; nous savons par exemple que des gens font tourner Creme avec succès sur FreeBSD.<br />
<br />
Pour ce tutoriel d'installation de Crème CRM on va faire les choses du mieux possible. On va donc installer des choses qui pourraient vous sembler inutiles mais qui à terme permettront d'avoir une installation pérenne et qui ne rentrera pas en collision avec d'autres logiciels que vous pourriez vouloir installer. <br />
<br />
Ce tutoriel vous permet d'installer tout le nécessaire pour faire fonctionner Crème avec le serveur de développement intégré dans Django. Le serveur de développement n'est pas une façon pérenne de faire fonctionner une application Django. Mais c'est un moyen simple de vérifier que tout fonctionne et vous pouvez faire quelques tests avec pour vérifier que Crème vous convient.  Le tutoriel vous permettant d'utiliser Apache avec Crème (plus compliqué à faire fonctionner, mais c'est une façon pérenne de faire les choses) est le sujet d'un autre billet indiqué à la fin. <br />
<br />
Une remarque très importante : si l'utilisation du serveur de développement est déconseillé pour une utilisation sur du long terme dans le cadre d'une machine personnelle, elle est par contre totalement interdite dans le cadre d'un hébergement sur un serveur. Si vous comptez installer Crème  tout de suite sur un serveur, il ne faut pas, pas une seule seconde, utiliser le serveur de développement. En effet celui-ci est fait pour le test et rien d'autre. Il n'est pas prévu, ni en terme de performance ni en terme de sécurité, pour être utilisé dans un vrai contexte de production. <br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Avant propos</span></span><br />
<br />
Notre objectif est d'installer & configurer un environnement <a href="http://www.virtualenv.org/en/latest/" target="_blank" rel="noopener" class="mycode_url">Virtualenv</a>. Virtualenv vous permet en effet d'avoir plusieurs environnements virtuels Python. L’intérêt est de pouvoir cloisonner les dépendances par projet. Vous êtes ainsi sûr que votre Crème n’arrêtera pas de fonctionner juste parce que vous avez dû mettre à jour une librairie Python pour pouvoir installer un autre logiciel. On ne va pas se contenter d'installer Virtualenv et on va installer aussi <a href="http://www.doughellmann.com/docs/virtualenvwrapper" target="_blank" rel="noopener" class="mycode_url">Virtualenvwrapper</a> qui est une surcouche à Virtualenv et qui vous simplifiera les choses.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : nous allons installer Creme 2.6 en parallèle de votre installation de Creme 2.5, en dupliquant les données. Ainsi en cas de gros problèmes vous pourrez revenir à votre installation précédente, que nous n'aurons pas détruite ; les éventuelles nouvelles données rentrées dans Creme 2.6 seront évidemment absentes de votre vieille installation, mais il s'agit ici plutôt de détecter les gros dysfonctionnements que vous auriez immédiatement.<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de Python</span></span><br />
<br />
Pour commencer, il vous faut avoir Python 3 (au moins 3.8) sur votre système ainsi que l'installeur 'pip' qui permet de télécharger & installer des paquets python.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Windows :</span><br />
Il faut vous rendre ici : <a href="https://www.python.org/downloads/windows/" target="_blank" rel="noopener" class="mycode_url">https://www.python.org/downloads/windows/</a><br />
L'installeur pour Windows contient l'interpréteur Python ainsi que 'pip'.<br />
Note: il est important que vous partiez d'une installation vide de Python ; si vous avez déjà des paquets externes pour Python qui ne sont pas installés dans un Virtual Env, ces derniers prendront le pas sur les paquets du Virtual Env (et donc de mauvaises versions de paquets pourront être utilisées empêchant Creme de fonctionner) (ce problème étant spécifique à Windows).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Linux :</span><br />
Utilisez le gestionnaire de paquet de votre distribution ; si vous êtes sous Debian ou Ubuntu il vous suffit de faire : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>sudo apt-get install python3<br />
sudo apt-get install python-setuptools<br />
sudo apt-get install python-pip</code></div></div><br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation des logiciels externes</span></span><br />
<br />
En plus de Python il va vous falloir installer :<ul class="mycode_list"><li>Un serveur web compatible avec Python. Il y a le choix mais le grand classique reste Apache (version 2.4 actuellement). Comme indiqué plus haut vous pouvez aussi dans un premier temps utiliser le serveur de développement (inclus avec Django) avant de passer à un serveur de production comme Apache ou NginX.<br />
</li>
<li>Un serveur de base de données: MySQL (8 ou plus), MariaDB (10.4 ou plus) ou PostGreSQL (12 ou plus) ; dans un premier temps vous pouvez aussi tester avec une base SQLite (rien besoin d'installer c'est fourni avec Python).<br />
</li>
<li>Redis ; ça fonctionne avec des versions anciennes (3.X) ou récentes (4.X +) donc cela ne devrait pas être un problème (préférez les versions plus récentes évidemment): <a href="https://redis.io/download" target="_blank" rel="noopener" class="mycode_url">https://redis.io/download</a><br />
Note: sous Unix il est possible de s'en passer et d'utiliser une socket Unix afin de communiquer avec le serveur de job (vous pourrez regarder, une fois votre installation globalement fonctionnelle au setting JOBMANAGER_BROKER).<br />
</li>
</ul>
Sous Windows, <a href="http://www.wampserver.com/" target="_blank" rel="noopener" class="mycode_url">wampserver</a> vous facilitera sûrement la vie si vous comptez installer Apache et MySQL.<br />
<br />
Sous Linux, vérifiez que vous avez les paquets suivants (ce sont les noms sous Ubuntu ; ils peuvent être différents sous une autre distribution évidemment) :<ul class="mycode_list"><li>mysql-client & mysql-server (si vous utilisez MySQL)<br />
</li>
<li>postgresql & postgresql-client-common (si vous utilisez PostGreSQL)<br />
</li>
<li>redis-server (sauf si vous utilisez une socket Unix comme indiqué plus haut)<br />
</li>
<li>language-pack-fr<br />
</li>
</ul>
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">(Linux) Installation des bibliothèques "système"</span></span><br />
<br />
Pour pouvoir installer certains paquets dans votre environnement Python, il vous faudra certaines bibliothèques de développement afin de pouvoir compiler certains paquets.<br />
<br />
Avant d'aller plus loin, il faut que vous vérifiez que les packages suivants sont bien installés, sinon, installez les : <ul class="mycode_list"><li>python3-dev<br />
</li>
<li>libmysqlclient-dev (si vous utilisez MySQL)<br />
</li>
<li>libpq-dev  (si vous utilisez PostGreSQL)<br />
</li>
<li>libjpeg-dev (et potentiellement les autres bibliothèques de gestion d'images selon vos besoins, comme libpng*-dev, libtiff*-dev, libgif-dev...)<br />
</li>
<li>libcairo-dev<br />
</li>
</ul>
<br />
Là encore, il s'agit des noms sous Debian/Ubuntu ; sous Fedora le suffixe est plutôt"-devel", donc "libpq-dev" s’appellera par exemple "libpq-devel".<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de l'environnement virtuel</span></span><br />
<br />
Nous allons créer un environnement virtuel Python (<span style="font-style: italic;" class="mycode_i">virtualenv</span>) pour Crème, qui contiendra toutes les bibliothèques Python nécessaires dans les bonnes versions (donc sans que votre système n'aient à les fournir). <br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : créez un nouveau Virtualenv pour Creme 2.6, et gardez donc intact celui de de votre Creme 2.5 .<br />
<br />
Une fois cela fait et après avoir rechargé votre configuration, vous pouvez créer votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> en tapant la commande : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>python3  -m venv ~/venv/creme_2_6</code></div></div><br />
Notes :<br />
 - "python3" désigne l'exécutable de Python 3 sur votre OS (sous Unix vous aurez souvent un lien python3.XX qui référence le même binaire).<br />
 -  on a choisi ici de créer un répertoire "venv" (qui pourrait contenir tous vos <span style="font-style: italic;" class="mycode_i">virtualenv</span>) dans votre répertoire HOME, mais ce n'est évidemment pas une obligation. Sous <span style="font-weight: bold;" class="mycode_b">Windows</span> le chemin ressemblerait plus à "C:\chemin\vers\nouveau\virtual\environment".<br />
<br />
Une fois que votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> est créé, il faut l'activer pour votre console. Vous allez en effet installer de nouveaux packages Python et faire des commandes Django et tout doit se faire dans votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>. <br />
<br />
Sous Unix+Bash, vous activez comme ceci :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>source ~/venv/creme_2_6/bin/activate</code></div></div><br />
Sous Windows avec l'invite de commande classique :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>&lt;chemin_vers_venv&gt;&#92;Scripts&#92;activate.bat</code></div></div><br />
La commande "deactivate" permet de sortir d'un <span style="font-style: italic;" class="mycode_i">virtualenv</span> pour revenir à votre environnement système classique. <br />
<br />
Pour plus de détails (si vous utilisez un autre système/shell par exemple), regardez la <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noopener" class="mycode_url">documentation officielle</a>.<br />
<br />
Maintenant que vous avez activé votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>, il vous faut installer le paquet creme-crm, qui installera aussi les dépendances nécessaires. Il existe des variantes, principalement pour choisir votre serveur de base de données (MySQL ou PostgreSQL -- SQLite n'ayant pas de besoin particulier). Les avantages et inconvénients des différents types de base sont expliqués plus bas si vous avez des doutes.<br />
<br />
Si vous souhaitez utiliser SQLite, il vous suffit de taper :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm~=2.6</code></div></div><br />
Pour MySQL :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[mysql]~=2.6</code></div></div><br />
Pour PostgreSQL :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[pgsql]~=2.6</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Notes sur MariaDB</span><br />
<br />
Si vous avez installé MariaDB plutôt que MySQL (paquet "<span style="font-style: italic;" class="mycode_i">libmariadbclient-dev</span>" sur Debian10), et que vous avez une erreur "<span style="font-weight: bold;" class="mycode_b"> /bin/sh: 1: mysql_config: not found</span>", créez le lien symbolique suivant :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>ln -s /usr/bin/mariadb_config /usr/bin/mysql_config</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes pour Windows:</span><br />
<br />
Certains paquets (comme "<span style="font-style: italic;" class="mycode_i">mysqlclient</span>") peuvent être retords à s'installer, et le site suivant, qui contient des paquets pré-compilés, pourrait grandement vous aider: <a href="https://www.lfd.uci.edu/~gohlke/pythonlibs/" target="_blank" rel="noopener" class="mycode_url">https://www.lfd.uci.edu/~gohlke/pythonlibs/</a><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Création de votre projet</span></span><br />
<br />
Dans Creme 2.6, une instance est bien séparée des sources de Creme elles-mêmes. Nous allons lancer une commande qui va créer un répertoire contenant entre autres la configuration de votre instance. Placez vous donc dans votre arborescence à un endroit adéquate, et faîtes :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_start_project my_project26</code></div></div><br />
Un répertoire "my_project26" a normalement été créé (note: c'est lui que vous devriez mettre sous version, avec git/mercurial/svn...). Déplacez vous dans ce répertoire (les commandes qui suivront partirons du principe qu'on est resté dans ce premier répertoire "my_project26") :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>cd my_project26</code></div></div><br />
Il contient principalement un autre répertoire s'appelant lui aussi "my_project26", dans lequel on trouve un fichier nommé "settings.py" qui va contenir la configuration de notre instance. Si vous ouvrez ce fichier vous trouverez quelques valeurs de bases définies par défaut, et pas mal d'explications sur les quelques valeurs qu'il reste à définir pour avoir une instance  fonctionnelle. On vous y explique aussi qu'il est important pour faire les choses proprement de séparer les <span style="font-style: italic;" class="mycode_i">settings</span> liés à votre projet, et ceux liés à une instance en particulier. Mettons que plusieurs développeurs interviennent sur le projet, avec chacun une instance du projet sur sa machine en local (chaque instance utilisant une base de données de test en local) ; on voit que certains paramètres vont être partagés au niveau du projet (la langue, les modules installés...), et certains vont être spécifiques à chaque instance (la base de données...).<br />
<br />
Éditez le fichier "my_project26/settings.py", et changez les valeurs suivantes, pour la langue et le fuseau horaire de base :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>LANGUAGE_CODE = 'fr'<br />
TIME_ZONE = 'Europe/Paris'</code></div></div><br />
(on garde la listes des apps -- les modules Creme/Django -- par défaut ; elle est contenue par le <span style="font-style: italic;" class="mycode_i">setting</span> INSTALLED_APP pour information).  <br />
<br />
En ce qui concerne les paramètres liés à votre instance, les commentaires dans "settings.py" expliquent les différentes approches. Les administrateurs confirmés choisiront leur méthode préférée ; ici nous allons partir sur une méthode simple, facile à expliquer et à mettre en place. À la fin du fichier "settings.py", ajoutez ces quelques lignes qui importent les paramètres venant du fichier "local_settings.py" :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>try:<br />
    from .local_settings import *<br />
except ImportError:<br />
    pass</code></div></div><br />
Note: un fichier "my_project26/local_settings.py", que nous allons remplir juste après, a normalement déjà été créé par la commande "creme_start_project". Si vous optez pour une autre méthode pour gérer vos paramètres d'instances (comme la méthode à base de variables d'environnement), vous pourrez le supprimer.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une nouvelle installation</span></span><br />
<br />
Depuis le répertoire "my_project26/" (celui le plus haut niveau), lancez la commande suivante :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme build_secret_key --settings=my_project26.settings</code></div></div><br />
Celle-ci a généré votre clé secrète, qu'il faudra mettre dans votre "local_settings.py", dans la variable SECRET_KEY (entre les '', à la place de la valeur par défaut). <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une migration depuis Creme 2.5</span></span><br />
<br />
Copiez les valeurs présentes dans les fichiers "settings.py" & "local_settings.py" de votre vieille installation dans ceux de votre projet, notamment SECRET_KEY & DATABASES (nous revenons sur cette dernière juste après évidemment).<br />
<br />
Dans votre installation de Creme 2.5, allez dans le répertoire configuré comme MEDIA_ROOT dans les vieux <span style="font-style: italic;" class="mycode_i">settings</span> ("my_project25/my_project25/media/upload" par défaut). Si vous avez utilisé des Documents dans Creme, ou bien exporté des factures/Devis en PDF, vous devriez avoir des sous-répertoires ("documents", "billing" etc...). Si c'est bien le cas, <span style="font-weight: bold;" class="mycode_b">copier</span> ces répertoires (et leur contenu évidemment) dans le répertoire MEDIA_ROOT du nouveau projet ("my_project26/my_project26/media/upload", par défaut).<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Configuration de la base de données</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Attention, en cas de migration depuis Creme 2.5</span>:  comme nous l'avons dit en introduction, nous allons dupliquer la base de données plutôt que d'en créer une nouvelle, donc n'oublier pas de <span style="font-weight: bold;" class="mycode_b">mettre le nom de votre nouvelle base</span> dans le fichier "local_settings.py" de votre projet. En effet comme il contient le nom de votre ancienne base, c'est celle-ci qui serait migrée (mas de panique si vous avez bien dupliqué au préalable, au pire votre ancienne base n'est pas perdu elle a juste un nouveau nom).<br />
<br />
Pour le moment, la variable DATABASES doit contenir la valeur suivante (que nous allons modifier/compléter par la suite) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        # Possible backends: 'postgresql', 'mysql', 'sqlite3'.<br />
        'ENGINE': 'django.db.backends.sqlite3',<br />
<br />
        # Name of the database, or path to the database file if using 'sqlite3'.<br />
        'NAME': BASE_DIR / 'db.sqlite3',<br />
<br />
        # Not used with sqlite3.<br />
        'USER': '',<br />
        'PASSWORD': '',<br />
<br />
        # Set to empty string for localhost. Not used with 'sqlite3'.<br />
        'HOST': '',<br />
<br />
        # Set to empty string for default. Not used with 'sqlite3'.<br />
        'PORT': '',<br />
<br />
        # Extra parameters for database connection.<br />
        # Consult backend module's document for available keywords.<br />
        # 'OPTIONS': {},<br />
    },<br />
}</code></div></div><br />
Avant de passer au déploiement de Crème proprement dit, on va devoir configurer la base de données. Creme est testé avec trois systèmes de gestion de base de données: SQLite, MySQL & PostgreSQL. Django permet aussi d'utiliser une base Oracle, mais nous n'avons jamais eu l'occasion de tester une telle configuration (mais pourquoi utiliser un SGBDR propriétaire quand l'offre libre est aussi bonne ?). Il existe aussi des <span style="font-style: italic;" class="mycode_i">backends</span> pour d'autres SGBDR (firebird, sqlserver ...) qui sont distribués à part de Django ; là encore nous ne les avons pas testés, et ne pouvons garantir leur fonctionnement (mais si vous avez essayé, vos retours sont évidemment les bienvenus, ne serait-ce que par curiosité technique).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">SQLite</span></span><br />
<br />
SQLite est surtout utile si vous êtes un développeur, afin de tester rapidement votre travail. C'est aussi envisageable si vous comptez utiliser Creme<br />
en tant qu'application monoposte et avec peu de données (c'est sûrement une mauvaise idée pour des dizaines de milliers de fiches). Si vous n'êtes pas dans ces 2 cas, nous vous <span style="font-weight: bold;" class="mycode_b">déconseillons vivement</span> une telle configuration.<br />
<br />
Si vous choisissez SQLite, la configuration est très simple (pas d'utilisateur ou de mot de passe) ; éditez la variable DATABASES de votre local_settings.py ainsi :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.sqlite3',<br />
        'NAME':     '/chemin/absolu/vers/un/fichier.db',<br />
        'HOST':     '',<br />
        'PORT':     '',<br />
    },<br />
}</code></div></div><br />
Vous devez évidemment mettre une chemin valide en tant que NAME (le fichier sera créé s'il n'existe pas, mais faites attention que Creme ait bien les permissions d'écrire dans le répertoire choisi).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : pour dupliquer une base SQLite il suffit de copier l'ancien fichier.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">MySQL</span></span><br />
<br />
MySQL est un choix classique pour un serveur de production ; il est très répandu et facile à configurer. En revanche, il n'est pas toujours possible de le configurer aussi finement qu'on le voudrait, et a tendance à voir ses performances varier étrangement au grès des versions (la plupart du temps dans le bon sens, mais pas toujours) . C'est donc un bon choix si vous le connaissez déjà, et que vous ne visez pas des volumes importants de données (pour quelques centaines de milliers de fiches ça devrait être satisfaisant -- ça dépend de votre matériel évidemment).<br />
<br />
Pour que Crème puisse utiliser MySQL, il faut créer une base de données et un utilisateur qui a les droits sur celle-ci. Vous pouvez bien entendu le faire en graphique grâce à un outil d'administration de BD.<br />
<br />
Voici comment le faire en console. Notez qu'en fonction de la version de MySQL les commandes peuvent changer ; les instructions suivantes fonctionnent avec MySQL 8 ; référez vous à la documentation de votre version de MySQL si les commandes ne fonctionnent pas.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> :<br />
- les versions 10.4 et supérieures sont officiellement gérées par Django. En revanche nous sommes tombés plusieurs fois sur des erreurs un peu ésotériques (c'est aussi vrai avec MySQL ceci dit) et ce n'est pas forcément la base que nous vous conseillerions.<br />
- certains utilisateurs ont rencontrés des soucis en migrant depuis leur instance de Creme 2.5 (sous MariaDB donc) ; les détails dans la section "Remplissage de la base données"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. Par exemple dans PHPMyadmin, si vous allez sur votre ancienne base, il y  a un onglet "Opérations" qui contient une section "Copier la base de données vers" (qui permet de conserver les privilèges -- normalement la case pour les conserver est cochée par défaut). N'oubliez pas plus bas de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
D'abord logguez vous dans MySQL avec la commande suivante : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
Puis passez sur la base de configuration avec la commande : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>use mysql;</code></div></div><br />
Ajoutez maintenant votre utilisateur (en remplaçant les valeurs d'exemple par vos propres valeurs) avec la commande : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE USER 'cremeuser'@'localhost' IDENTIFIED BY '34jkfue1dioaA';</code></div></div><br />
Puis nous créons la base de données :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE DATABASE cremecrmdb;</code></div></div><br />
et enfin nous donnons à votre l'utilisateur toutes les permissions sur la base de données de Creme :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON cremecrmdb.* TO 'cremeuser'@'localhost' WITH GRANT OPTION;</code></div></div><br />
Éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez si nécessaire remplacer les noms de la base, de l'utilisateur et son mot de passe par les valeurs que vous avez défini précédemment)  :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.mysql',<br />
        'NAME':     'cremecrmdb',<br />
        'USER':     'cremeuser',<br />
        'PASSWORD': '34jkfue1dioaA',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">PostgreSQL</span></span><br />
<br />
PostgreSQL est sûrement le meilleur choix pour les volumes de données importants ; non seulement ses performances sont excellentes, mais c'est aussi le SGBDR le plus rigoureux en terme de cohérence des données.<br />
<br />
Les instructions du début de ce tutoriel étaient plutôt faites pour un déploiement avec MySQL ; aussi il va falloir installer des paquets supplémentaires si vous souhaitez utiliser PostgreSQL.<br />
<br />
Comme pour MySQL, il vous faut maintenant créer un utilisateur dédié à Creme, ainsi qu'une base sur lequel l'utilisateur a tous les droits. Là encore c'est possible en console comme en graphique (en graphique, le programme "pgAdmin III" fait un très bon travail).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : comme déjà dit, il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. N'oubliez pas ci-dessous de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
Lorsque c'est fait, éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez remplacer les noms de la base de l'utilisateur et son mot de passe par les valeurs que vous avez choisies juste avant)  :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.postgresql',<br />
        'NAME':     'nom_de_la_base',<br />
        'USER':     'nom_de_l_utilisateur',<br />
        'PASSWORD': 'm0t_de_p4&#36;&#36;',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Remplissage de la base de données</span></span><br />
<br />
Toujours dans le répertoire racine "my_project26/", tapez la commande suivante pour créer les tables de la base :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme migrate --settings=my_project26.settings</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> : certains utilisateurs ont rencontrés des soucis en migrant depuis leur instance de Creme 2.5, une erreur apparaissant lors ce cette étape. Ils s'en sont sorti avec la méthode (plutôt moche, on ne va pas se le cacher) suivante. Ils relancent la commande "migrate" tant que ça fait progresser le processus (l'erreur étant différente) ; si à un moment l'erreur provoquée reste toujours la même, ils génèrent le code SQL brute avec la commande "sqlmigrate" (en donnant le nom de la migration fautive en argument), exécutent ces commandes SQL une à une dans un shell MariaDB (des erreurs sont rencontrées pour les opérations déjà faites, c'est normal), puis finissent par relancer la commande "migrate".<br />
<br />
<br />
Puis on remplit la base avec les données initiales (utilisateur administrateur, société initiale, configuration par défaut etc…) :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_populate --settings=my_project26.settings</code></div></div><br />
Ne vous inquiétez pas des messages du genre <Disable populate for "vcfs": it does not have any "populate.py" script>, ils indiquent juste que certaines apps n'ont pas besoin de créer des données initiales.<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Génération des <span style="font-style: italic;" class="mycode_i">bundles d'assets</span> statiques</span></span><br />
<br />
Il s'agit de créer des fichiers optimisés pour le CSS et le JavaScript, ainsi que des images avec des noms pensés pour être mises en cache intelligemment :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme generatemedia --settings=my_project26.settings</code></div></div><br />
Voici la sortie que vous devriez avoir :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>Generating l10n.js with variation {'language': 'en'}<br />
Generating l10n.js with variation {'language': 'fr'}<br />
Generating lib.js with variation {}<br />
Generating main.js with variation {}<br />
Generating testlib.js with variation {}<br />
Generating testcore.js with variation {}<br />
Generating icecreammain.css with variation {}<br />
Generating chantillymain.css with variation {}</code></div></div><br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Choix des apps installées</span></span><br />
<br />
Pour des raisons de simplicité, nous avons choisi d'installer Creme avec sa liste d'apps par défaut, qui couvre la plupart des besoins courants. Sont écartées de cette liste l'app "mobile" pour proposer en plus un ensemble de vues plus adaptées aux smartphones, et "polls" qui permet de faire des questionnaires/sondages internes.<br />
<br />
Creme étant modulaire, vous pouvez choisir plus finement les apps installées ; même si pour une première installation, vous devriez sûrement garder la liste de base (vous pouvez passer au chapitre suivant). Pour avoir une liste personnalisée, modifiez variable INSTALLED_APPS comme indiqué dans les commentaires de "project/settings.py".<br />
<br />
2 points importants :<br />
- vous ne pouvez enlever (en pratique mettez plutôt en commentaire avec un '#' en début de ligne) que les apps dans la section CREME OPTIONAL APPS, qui sont optionnelles comme l'indique le nom.<br />
- dans la liste sont indiquées des dépendances ; certaines apps nécessitent la présence d'autres apps. Cependant pas de craintes, si vous oubliez une dépendance, Creme générera une erreur assez claire à ce sujet.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Choix avant l'installation</span></span><br />
<br />
Si vous n'avez pas encore créé la base de données, vous pouvez juste commenter/dé-commenter les noms des apps optionnelles, avant de faire les étapes des chapitres précédents (migrate, creme_populate, generatemedia).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Ajouter des apps après l'installation</span></span><br />
<br />
Si vous souhaitez ajouter des apps après installation (ex: après plusieurs jours/mois d'utilisation un besoin apparaît), dé-commentez les apps voulues (toujours en respectant les dépendances -- ex: si vous voulez "events", "opportunities" doit aussi être dé-commenté), puis lancez les même commandes que pour l'installation initiale: migrate, creme_populate, generatemedia.<br />
<br />
(en effet il faut bien créer les nouvelles tables, les peupler, et aussi installer le nouveau JavaScript/CSS/...)<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Désinstaller une app après l'installation</span></span><br />
<br />
Il existe plusieurs mécanismes, comme la configuration visuelle du menu ou la désactivation des type de relation, qui permettent de rendre très peu visible une app globalement inutile, et vous devriez commencer par là (car aucun risque de casser quoi que ce soit). Mais si vous le souhaitez vraiment, vous pouvez réellement désinstaller une app.<br />
<br />
C'est une opération un peu délicate, car des données relatives à l'app que vous voulez désinstaller peuvent exister en base, et être reliées à des données qui elles ne doivent pas être supprimées (car relatives à des apps que vous garder), tout en gardant un système cohérent... Donc :<br />
<br />
- privilégiez les apps pour lesquelles vous n'avez pas créé de données (typiquement aucune fiche).<br />
- faites une sauvegarde avant.<br />
<br />
La désinstallation d'une app se fait grâce à une commande, "creme_uninstall". Notez qu'il faut désinstaller une app à la fois (c'est déjà assez délicat comme ça...) ; si vous voulez désinstaller plusieurs apps, alors appliquez la méthode de désinstallation plusieurs fois, en respectant là encore les dépendances (ex: pour désinstaller "events" et "opportunities", faites le dans cet ordre, pour qu'à aucun moment une app n'ait pas ses dépendances installées). L'app que vous désinstallez doit être présente dans votre INSTALLED_APPS.<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_uninstall --settings=my_project26.settings app_a_desinstaller</code></div></div><br />
Si tout s'est bien déroulé, la commande vous demandera une fois finie de mettre en commentaire l'app dans votre INSTALLED_CREME_APPS.<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du serveur</span></span><br />
<br />
Une fois cela fait il ne nous reste plus qu'à lancer le serveur de test en faisant :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme runserver --settings=my_project26.settings</code></div></div><br />
Vous pouvez maintenant vous connecter sur <a href="http://localhost:8000" target="_blank" rel="noopener" class="mycode_url">http://localhost:8000</a> pour voir que votre Crème fonctionne. La commande 'creme_populate' vous a indiqué qu'elle a créé un utilisateur "root" (mot de passe "root") ; utilisez cet utilisateur pour vous connecter. Vous êtes <span style="font-weight: bold;" class="mycode_b">très vivement</span> encouragé à changer immédiatement le mot de passe  (dans le menu en haut > icône rouage > Utilisateurs).<br />
<br />
Mais, et je vais le répéter, ce serveur de développement n'est pas fait pour être utiliser dans un contexte de production. Par exemple, pour mettre en production avec Apache et mod_wsgi, vous pouvez suivre cet autre billet: <a href="https://www.cremecrm.com/forum/showthread.php?tid=110" target="_blank" rel="noopener" class="mycode_url">https://www.cremecrm.com/forum/showthread.php?tid=110</a><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du gestionnaire de jobs</span></span><br />
<br />
Certaines fonctionnalités (import des fichiers CSV/XLS, envoi des campagnes d'e-mails...) sont effectuées par des jobs tournant en parallèle du serveur Web. Ces jobs sont gérés par un gestionnaire qui s'occupent de créer ces processus lorsque c'est nécessaire.<br />
<br />
Ce gestionnaire doit être lancé à part, et tourner en permanence  ; si ce n'est pas le cas, la majorité de Creme fonctionnera parfaitement, mais pas les fonctionnalités basées sur les jobs. Si vous allez sur la liste des jobs (menu > Outils > Jobs) un message d'erreur vous indiquera si le gestionnaire est injoignable. Pour lancer le gestionnaire :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_job_manager --settings=my_project26.settings</code></div></div><br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mise à jour</span></span><br />
<br />
Il est évidemment conseillé de régulièrement faire des sauvegarde de votre base de données, ainsi que des fichiers télé-versés dans "my_project26/media/upload/" ; c'est d'autant plus vrai avant une mise-à-jour.<br />
<br />
Vous pouvez vous tenir à jour des nouvelles <span style="font-style: italic;" class="mycode_i">releases</span> grâce par exemple à la <a href="https://pypi.org/project/creme-crm/#history" target="_blank" rel="noopener" class="mycode_url">page du paquet sur pyPI</a> qui explique comment faire faire (par exemple en suivant le flux RSS fait pour).<br />
<br />
Plus tard lorsque sortiront des versions de corrections pour Creme2.6, vous pourrez mettre à jour Creme et ses dépendances avec (adaptez avec le tag utilisé auparavant suivant votre SGBD -- MySQL dans cet exemple) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install -U creme-crm[mysql]==2.6.XYZ</code></div></div><br />
Le fichier CHANGELOG.TXT contient les nouveautés, ainsi que des notes sur les commandes. Dans le doute vous pouvez toujours mettre à jour la base de données avec les commandes "migrate" & "creme_populate"  (au pire les commandes ne feront rien) et ré-générer les <span style="font-style: italic;" class="mycode_i">assets</span> statiques comme au dessus avec "generatemedia".]]></description>
			<content:encoded><![CDATA[<span style="font-size: small;" class="mycode_size">Corrections:</span><br />
<span style="font-size: small;" class="mycode_size">- </span><span style="font-size: small;" class="mycode_size">19 décembre 2024: utilisation de <span style="font-style: italic;" class="mycode_i">venv</span> à la place de <span style="font-style: italic;" class="mycode_i">virtualenvwrapper</span>.</span><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Introduction</span></span><br />
<br />
Il s'agira ici d'installer Creme 2.6 soit depuis zéro, soit depuis une installation de Creme 2.5 (notez que vous ne devriez migrer que d'une version à la fois -- donc si vous êtes en 2.4, vous devez migrer vers 2.5 avant de pouvoir migrer vers 2.6 par exemple).<br />
<br />
Ce tutoriel d'installation parle des plateformes suivantes :<ul class="mycode_list"><li><span style="font-weight: bold;" class="mycode_b">GNU/Linux</span> en se concentrant sur Debian & Ubuntu ; lorsque des noms de paquets sont donnés, ce sont les noms dans ces 2 distributions, et il vous faudra chercher les équivalents sur votre propre distribution (n'hésitez pas pas à nous indiquer si vous avez des noms de paquets différents -- ils peuvent changer selon les versions de Debian par example -- ou si vous avez installé sur une autre distribution, afin que nous puissions améliorer ce tutoriel).<br />
</li>
<li><span style="font-weight: bold;" class="mycode_b">Windows</span> ; attention l'installation sous Windows est un peu plus complexe à cause du manque par défaut d'un gestionnaire de paquets. En plus ce n'est pas la plateforme la plus testée (mais si vous avez des problèmes/retours/patches vous pouvez en parler dans les commentaires notamment).<br />
</li>
</ul>
Le code de Creme ne faisant pas spécialement de "linuxeries", l'installer sur d'autres Unix (comme MacOSX) ne devrait pas dans l'absolu poser de souci particulier. Il nous est cependant difficile pour le moment de vous indiquer une marche à suivre précise n'utilisant pas (encore) ces systèmes. Là encore, tout retour de personnes ayant essayé est le bienvenu ; nous savons par exemple que des gens font tourner Creme avec succès sur FreeBSD.<br />
<br />
Pour ce tutoriel d'installation de Crème CRM on va faire les choses du mieux possible. On va donc installer des choses qui pourraient vous sembler inutiles mais qui à terme permettront d'avoir une installation pérenne et qui ne rentrera pas en collision avec d'autres logiciels que vous pourriez vouloir installer. <br />
<br />
Ce tutoriel vous permet d'installer tout le nécessaire pour faire fonctionner Crème avec le serveur de développement intégré dans Django. Le serveur de développement n'est pas une façon pérenne de faire fonctionner une application Django. Mais c'est un moyen simple de vérifier que tout fonctionne et vous pouvez faire quelques tests avec pour vérifier que Crème vous convient.  Le tutoriel vous permettant d'utiliser Apache avec Crème (plus compliqué à faire fonctionner, mais c'est une façon pérenne de faire les choses) est le sujet d'un autre billet indiqué à la fin. <br />
<br />
Une remarque très importante : si l'utilisation du serveur de développement est déconseillé pour une utilisation sur du long terme dans le cadre d'une machine personnelle, elle est par contre totalement interdite dans le cadre d'un hébergement sur un serveur. Si vous comptez installer Crème  tout de suite sur un serveur, il ne faut pas, pas une seule seconde, utiliser le serveur de développement. En effet celui-ci est fait pour le test et rien d'autre. Il n'est pas prévu, ni en terme de performance ni en terme de sécurité, pour être utilisé dans un vrai contexte de production. <br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Avant propos</span></span><br />
<br />
Notre objectif est d'installer & configurer un environnement <a href="http://www.virtualenv.org/en/latest/" target="_blank" rel="noopener" class="mycode_url">Virtualenv</a>. Virtualenv vous permet en effet d'avoir plusieurs environnements virtuels Python. L’intérêt est de pouvoir cloisonner les dépendances par projet. Vous êtes ainsi sûr que votre Crème n’arrêtera pas de fonctionner juste parce que vous avez dû mettre à jour une librairie Python pour pouvoir installer un autre logiciel. On ne va pas se contenter d'installer Virtualenv et on va installer aussi <a href="http://www.doughellmann.com/docs/virtualenvwrapper" target="_blank" rel="noopener" class="mycode_url">Virtualenvwrapper</a> qui est une surcouche à Virtualenv et qui vous simplifiera les choses.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : nous allons installer Creme 2.6 en parallèle de votre installation de Creme 2.5, en dupliquant les données. Ainsi en cas de gros problèmes vous pourrez revenir à votre installation précédente, que nous n'aurons pas détruite ; les éventuelles nouvelles données rentrées dans Creme 2.6 seront évidemment absentes de votre vieille installation, mais il s'agit ici plutôt de détecter les gros dysfonctionnements que vous auriez immédiatement.<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de Python</span></span><br />
<br />
Pour commencer, il vous faut avoir Python 3 (au moins 3.8) sur votre système ainsi que l'installeur 'pip' qui permet de télécharger & installer des paquets python.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Windows :</span><br />
Il faut vous rendre ici : <a href="https://www.python.org/downloads/windows/" target="_blank" rel="noopener" class="mycode_url">https://www.python.org/downloads/windows/</a><br />
L'installeur pour Windows contient l'interpréteur Python ainsi que 'pip'.<br />
Note: il est important que vous partiez d'une installation vide de Python ; si vous avez déjà des paquets externes pour Python qui ne sont pas installés dans un Virtual Env, ces derniers prendront le pas sur les paquets du Virtual Env (et donc de mauvaises versions de paquets pourront être utilisées empêchant Creme de fonctionner) (ce problème étant spécifique à Windows).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">Sous Linux :</span><br />
Utilisez le gestionnaire de paquet de votre distribution ; si vous êtes sous Debian ou Ubuntu il vous suffit de faire : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>sudo apt-get install python3<br />
sudo apt-get install python-setuptools<br />
sudo apt-get install python-pip</code></div></div><br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation des logiciels externes</span></span><br />
<br />
En plus de Python il va vous falloir installer :<ul class="mycode_list"><li>Un serveur web compatible avec Python. Il y a le choix mais le grand classique reste Apache (version 2.4 actuellement). Comme indiqué plus haut vous pouvez aussi dans un premier temps utiliser le serveur de développement (inclus avec Django) avant de passer à un serveur de production comme Apache ou NginX.<br />
</li>
<li>Un serveur de base de données: MySQL (8 ou plus), MariaDB (10.4 ou plus) ou PostGreSQL (12 ou plus) ; dans un premier temps vous pouvez aussi tester avec une base SQLite (rien besoin d'installer c'est fourni avec Python).<br />
</li>
<li>Redis ; ça fonctionne avec des versions anciennes (3.X) ou récentes (4.X +) donc cela ne devrait pas être un problème (préférez les versions plus récentes évidemment): <a href="https://redis.io/download" target="_blank" rel="noopener" class="mycode_url">https://redis.io/download</a><br />
Note: sous Unix il est possible de s'en passer et d'utiliser une socket Unix afin de communiquer avec le serveur de job (vous pourrez regarder, une fois votre installation globalement fonctionnelle au setting JOBMANAGER_BROKER).<br />
</li>
</ul>
Sous Windows, <a href="http://www.wampserver.com/" target="_blank" rel="noopener" class="mycode_url">wampserver</a> vous facilitera sûrement la vie si vous comptez installer Apache et MySQL.<br />
<br />
Sous Linux, vérifiez que vous avez les paquets suivants (ce sont les noms sous Ubuntu ; ils peuvent être différents sous une autre distribution évidemment) :<ul class="mycode_list"><li>mysql-client & mysql-server (si vous utilisez MySQL)<br />
</li>
<li>postgresql & postgresql-client-common (si vous utilisez PostGreSQL)<br />
</li>
<li>redis-server (sauf si vous utilisez une socket Unix comme indiqué plus haut)<br />
</li>
<li>language-pack-fr<br />
</li>
</ul>
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">(Linux) Installation des bibliothèques "système"</span></span><br />
<br />
Pour pouvoir installer certains paquets dans votre environnement Python, il vous faudra certaines bibliothèques de développement afin de pouvoir compiler certains paquets.<br />
<br />
Avant d'aller plus loin, il faut que vous vérifiez que les packages suivants sont bien installés, sinon, installez les : <ul class="mycode_list"><li>python3-dev<br />
</li>
<li>libmysqlclient-dev (si vous utilisez MySQL)<br />
</li>
<li>libpq-dev  (si vous utilisez PostGreSQL)<br />
</li>
<li>libjpeg-dev (et potentiellement les autres bibliothèques de gestion d'images selon vos besoins, comme libpng*-dev, libtiff*-dev, libgif-dev...)<br />
</li>
<li>libcairo-dev<br />
</li>
</ul>
<br />
Là encore, il s'agit des noms sous Debian/Ubuntu ; sous Fedora le suffixe est plutôt"-devel", donc "libpq-dev" s’appellera par exemple "libpq-devel".<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Installation de l'environnement virtuel</span></span><br />
<br />
Nous allons créer un environnement virtuel Python (<span style="font-style: italic;" class="mycode_i">virtualenv</span>) pour Crème, qui contiendra toutes les bibliothèques Python nécessaires dans les bonnes versions (donc sans que votre système n'aient à les fournir). <br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : créez un nouveau Virtualenv pour Creme 2.6, et gardez donc intact celui de de votre Creme 2.5 .<br />
<br />
Une fois cela fait et après avoir rechargé votre configuration, vous pouvez créer votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> en tapant la commande : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>python3  -m venv ~/venv/creme_2_6</code></div></div><br />
Notes :<br />
 - "python3" désigne l'exécutable de Python 3 sur votre OS (sous Unix vous aurez souvent un lien python3.XX qui référence le même binaire).<br />
 -  on a choisi ici de créer un répertoire "venv" (qui pourrait contenir tous vos <span style="font-style: italic;" class="mycode_i">virtualenv</span>) dans votre répertoire HOME, mais ce n'est évidemment pas une obligation. Sous <span style="font-weight: bold;" class="mycode_b">Windows</span> le chemin ressemblerait plus à "C:\chemin\vers\nouveau\virtual\environment".<br />
<br />
Une fois que votre <span style="font-style: italic;" class="mycode_i">virtualenv</span> est créé, il faut l'activer pour votre console. Vous allez en effet installer de nouveaux packages Python et faire des commandes Django et tout doit se faire dans votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>. <br />
<br />
Sous Unix+Bash, vous activez comme ceci :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>source ~/venv/creme_2_6/bin/activate</code></div></div><br />
Sous Windows avec l'invite de commande classique :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>&lt;chemin_vers_venv&gt;&#92;Scripts&#92;activate.bat</code></div></div><br />
La commande "deactivate" permet de sortir d'un <span style="font-style: italic;" class="mycode_i">virtualenv</span> pour revenir à votre environnement système classique. <br />
<br />
Pour plus de détails (si vous utilisez un autre système/shell par exemple), regardez la <a href="https://docs.python.org/3/library/venv.html" target="_blank" rel="noopener" class="mycode_url">documentation officielle</a>.<br />
<br />
Maintenant que vous avez activé votre <span style="font-style: italic;" class="mycode_i">virtualenv</span>, il vous faut installer le paquet creme-crm, qui installera aussi les dépendances nécessaires. Il existe des variantes, principalement pour choisir votre serveur de base de données (MySQL ou PostgreSQL -- SQLite n'ayant pas de besoin particulier). Les avantages et inconvénients des différents types de base sont expliqués plus bas si vous avez des doutes.<br />
<br />
Si vous souhaitez utiliser SQLite, il vous suffit de taper :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm~=2.6</code></div></div><br />
Pour MySQL :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[mysql]~=2.6</code></div></div><br />
Pour PostgreSQL :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install creme-crm[pgsql]~=2.6</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">Notes sur MariaDB</span><br />
<br />
Si vous avez installé MariaDB plutôt que MySQL (paquet "<span style="font-style: italic;" class="mycode_i">libmariadbclient-dev</span>" sur Debian10), et que vous avez une erreur "<span style="font-weight: bold;" class="mycode_b"> /bin/sh: 1: mysql_config: not found</span>", créez le lien symbolique suivant :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>ln -s /usr/bin/mariadb_config /usr/bin/mysql_config</code></div></div><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Notes pour Windows:</span><br />
<br />
Certains paquets (comme "<span style="font-style: italic;" class="mycode_i">mysqlclient</span>") peuvent être retords à s'installer, et le site suivant, qui contient des paquets pré-compilés, pourrait grandement vous aider: <a href="https://www.lfd.uci.edu/~gohlke/pythonlibs/" target="_blank" rel="noopener" class="mycode_url">https://www.lfd.uci.edu/~gohlke/pythonlibs/</a><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Création de votre projet</span></span><br />
<br />
Dans Creme 2.6, une instance est bien séparée des sources de Creme elles-mêmes. Nous allons lancer une commande qui va créer un répertoire contenant entre autres la configuration de votre instance. Placez vous donc dans votre arborescence à un endroit adéquate, et faîtes :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_start_project my_project26</code></div></div><br />
Un répertoire "my_project26" a normalement été créé (note: c'est lui que vous devriez mettre sous version, avec git/mercurial/svn...). Déplacez vous dans ce répertoire (les commandes qui suivront partirons du principe qu'on est resté dans ce premier répertoire "my_project26") :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>cd my_project26</code></div></div><br />
Il contient principalement un autre répertoire s'appelant lui aussi "my_project26", dans lequel on trouve un fichier nommé "settings.py" qui va contenir la configuration de notre instance. Si vous ouvrez ce fichier vous trouverez quelques valeurs de bases définies par défaut, et pas mal d'explications sur les quelques valeurs qu'il reste à définir pour avoir une instance  fonctionnelle. On vous y explique aussi qu'il est important pour faire les choses proprement de séparer les <span style="font-style: italic;" class="mycode_i">settings</span> liés à votre projet, et ceux liés à une instance en particulier. Mettons que plusieurs développeurs interviennent sur le projet, avec chacun une instance du projet sur sa machine en local (chaque instance utilisant une base de données de test en local) ; on voit que certains paramètres vont être partagés au niveau du projet (la langue, les modules installés...), et certains vont être spécifiques à chaque instance (la base de données...).<br />
<br />
Éditez le fichier "my_project26/settings.py", et changez les valeurs suivantes, pour la langue et le fuseau horaire de base :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>LANGUAGE_CODE = 'fr'<br />
TIME_ZONE = 'Europe/Paris'</code></div></div><br />
(on garde la listes des apps -- les modules Creme/Django -- par défaut ; elle est contenue par le <span style="font-style: italic;" class="mycode_i">setting</span> INSTALLED_APP pour information).  <br />
<br />
En ce qui concerne les paramètres liés à votre instance, les commentaires dans "settings.py" expliquent les différentes approches. Les administrateurs confirmés choisiront leur méthode préférée ; ici nous allons partir sur une méthode simple, facile à expliquer et à mettre en place. À la fin du fichier "settings.py", ajoutez ces quelques lignes qui importent les paramètres venant du fichier "local_settings.py" :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>try:<br />
    from .local_settings import *<br />
except ImportError:<br />
    pass</code></div></div><br />
Note: un fichier "my_project26/local_settings.py", que nous allons remplir juste après, a normalement déjà été créé par la commande "creme_start_project". Si vous optez pour une autre méthode pour gérer vos paramètres d'instances (comme la méthode à base de variables d'environnement), vous pourrez le supprimer.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une nouvelle installation</span></span><br />
<br />
Depuis le répertoire "my_project26/" (celui le plus haut niveau), lancez la commande suivante :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme build_secret_key --settings=my_project26.settings</code></div></div><br />
Celle-ci a généré votre clé secrète, qu'il faudra mettre dans votre "local_settings.py", dans la variable SECRET_KEY (entre les '', à la place de la valeur par défaut). <br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Cas d'une migration depuis Creme 2.5</span></span><br />
<br />
Copiez les valeurs présentes dans les fichiers "settings.py" & "local_settings.py" de votre vieille installation dans ceux de votre projet, notamment SECRET_KEY & DATABASES (nous revenons sur cette dernière juste après évidemment).<br />
<br />
Dans votre installation de Creme 2.5, allez dans le répertoire configuré comme MEDIA_ROOT dans les vieux <span style="font-style: italic;" class="mycode_i">settings</span> ("my_project25/my_project25/media/upload" par défaut). Si vous avez utilisé des Documents dans Creme, ou bien exporté des factures/Devis en PDF, vous devriez avoir des sous-répertoires ("documents", "billing" etc...). Si c'est bien le cas, <span style="font-weight: bold;" class="mycode_b">copier</span> ces répertoires (et leur contenu évidemment) dans le répertoire MEDIA_ROOT du nouveau projet ("my_project26/my_project26/media/upload", par défaut).<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Configuration de la base de données</span></span><br />
<br />
<span style="font-weight: bold;" class="mycode_b">Attention, en cas de migration depuis Creme 2.5</span>:  comme nous l'avons dit en introduction, nous allons dupliquer la base de données plutôt que d'en créer une nouvelle, donc n'oublier pas de <span style="font-weight: bold;" class="mycode_b">mettre le nom de votre nouvelle base</span> dans le fichier "local_settings.py" de votre projet. En effet comme il contient le nom de votre ancienne base, c'est celle-ci qui serait migrée (mas de panique si vous avez bien dupliqué au préalable, au pire votre ancienne base n'est pas perdu elle a juste un nouveau nom).<br />
<br />
Pour le moment, la variable DATABASES doit contenir la valeur suivante (que nous allons modifier/compléter par la suite) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        # Possible backends: 'postgresql', 'mysql', 'sqlite3'.<br />
        'ENGINE': 'django.db.backends.sqlite3',<br />
<br />
        # Name of the database, or path to the database file if using 'sqlite3'.<br />
        'NAME': BASE_DIR / 'db.sqlite3',<br />
<br />
        # Not used with sqlite3.<br />
        'USER': '',<br />
        'PASSWORD': '',<br />
<br />
        # Set to empty string for localhost. Not used with 'sqlite3'.<br />
        'HOST': '',<br />
<br />
        # Set to empty string for default. Not used with 'sqlite3'.<br />
        'PORT': '',<br />
<br />
        # Extra parameters for database connection.<br />
        # Consult backend module's document for available keywords.<br />
        # 'OPTIONS': {},<br />
    },<br />
}</code></div></div><br />
Avant de passer au déploiement de Crème proprement dit, on va devoir configurer la base de données. Creme est testé avec trois systèmes de gestion de base de données: SQLite, MySQL & PostgreSQL. Django permet aussi d'utiliser une base Oracle, mais nous n'avons jamais eu l'occasion de tester une telle configuration (mais pourquoi utiliser un SGBDR propriétaire quand l'offre libre est aussi bonne ?). Il existe aussi des <span style="font-style: italic;" class="mycode_i">backends</span> pour d'autres SGBDR (firebird, sqlserver ...) qui sont distribués à part de Django ; là encore nous ne les avons pas testés, et ne pouvons garantir leur fonctionnement (mais si vous avez essayé, vos retours sont évidemment les bienvenus, ne serait-ce que par curiosité technique).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">SQLite</span></span><br />
<br />
SQLite est surtout utile si vous êtes un développeur, afin de tester rapidement votre travail. C'est aussi envisageable si vous comptez utiliser Creme<br />
en tant qu'application monoposte et avec peu de données (c'est sûrement une mauvaise idée pour des dizaines de milliers de fiches). Si vous n'êtes pas dans ces 2 cas, nous vous <span style="font-weight: bold;" class="mycode_b">déconseillons vivement</span> une telle configuration.<br />
<br />
Si vous choisissez SQLite, la configuration est très simple (pas d'utilisateur ou de mot de passe) ; éditez la variable DATABASES de votre local_settings.py ainsi :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.sqlite3',<br />
        'NAME':     '/chemin/absolu/vers/un/fichier.db',<br />
        'HOST':     '',<br />
        'PORT':     '',<br />
    },<br />
}</code></div></div><br />
Vous devez évidemment mettre une chemin valide en tant que NAME (le fichier sera créé s'il n'existe pas, mais faites attention que Creme ait bien les permissions d'écrire dans le répertoire choisi).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : pour dupliquer une base SQLite il suffit de copier l'ancien fichier.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">MySQL</span></span><br />
<br />
MySQL est un choix classique pour un serveur de production ; il est très répandu et facile à configurer. En revanche, il n'est pas toujours possible de le configurer aussi finement qu'on le voudrait, et a tendance à voir ses performances varier étrangement au grès des versions (la plupart du temps dans le bon sens, mais pas toujours) . C'est donc un bon choix si vous le connaissez déjà, et que vous ne visez pas des volumes importants de données (pour quelques centaines de milliers de fiches ça devrait être satisfaisant -- ça dépend de votre matériel évidemment).<br />
<br />
Pour que Crème puisse utiliser MySQL, il faut créer une base de données et un utilisateur qui a les droits sur celle-ci. Vous pouvez bien entendu le faire en graphique grâce à un outil d'administration de BD.<br />
<br />
Voici comment le faire en console. Notez qu'en fonction de la version de MySQL les commandes peuvent changer ; les instructions suivantes fonctionnent avec MySQL 8 ; référez vous à la documentation de votre version de MySQL si les commandes ne fonctionnent pas.<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> :<br />
- les versions 10.4 et supérieures sont officiellement gérées par Django. En revanche nous sommes tombés plusieurs fois sur des erreurs un peu ésotériques (c'est aussi vrai avec MySQL ceci dit) et ce n'est pas forcément la base que nous vous conseillerions.<br />
- certains utilisateurs ont rencontrés des soucis en migrant depuis leur instance de Creme 2.5 (sous MariaDB donc) ; les détails dans la section "Remplissage de la base données"<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. Par exemple dans PHPMyadmin, si vous allez sur votre ancienne base, il y  a un onglet "Opérations" qui contient une section "Copier la base de données vers" (qui permet de conserver les privilèges -- normalement la case pour les conserver est cochée par défaut). N'oubliez pas plus bas de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
D'abord logguez vous dans MySQL avec la commande suivante : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>mysql -u root -p</code></div></div><br />
Puis passez sur la base de configuration avec la commande : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>use mysql;</code></div></div><br />
Ajoutez maintenant votre utilisateur (en remplaçant les valeurs d'exemple par vos propres valeurs) avec la commande : <br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE USER 'cremeuser'@'localhost' IDENTIFIED BY '34jkfue1dioaA';</code></div></div><br />
Puis nous créons la base de données :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>CREATE DATABASE cremecrmdb;</code></div></div><br />
et enfin nous donnons à votre l'utilisateur toutes les permissions sur la base de données de Creme :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>GRANT ALL PRIVILEGES ON cremecrmdb.* TO 'cremeuser'@'localhost' WITH GRANT OPTION;</code></div></div><br />
Éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez si nécessaire remplacer les noms de la base, de l'utilisateur et son mot de passe par les valeurs que vous avez défini précédemment)  :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.mysql',<br />
        'NAME':     'cremecrmdb',<br />
        'USER':     'cremeuser',<br />
        'PASSWORD': '34jkfue1dioaA',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">PostgreSQL</span></span><br />
<br />
PostgreSQL est sûrement le meilleur choix pour les volumes de données importants ; non seulement ses performances sont excellentes, mais c'est aussi le SGBDR le plus rigoureux en terme de cohérence des données.<br />
<br />
Les instructions du début de ce tutoriel étaient plutôt faites pour un déploiement avec MySQL ; aussi il va falloir installer des paquets supplémentaires si vous souhaitez utiliser PostgreSQL.<br />
<br />
Comme pour MySQL, il vous faut maintenant créer un utilisateur dédié à Creme, ainsi qu'une base sur lequel l'utilisateur a tous les droits. Là encore c'est possible en console comme en graphique (en graphique, le programme "pgAdmin III" fait un très bon travail).<br />
<br />
<span style="font-weight: bold;" class="mycode_b">À propos des migrations</span> : comme déjà dit, il ne faut pas créer pas une base depuis 0, il faut dupliquer l'ancienne, et mettre les mêmes privilèges sur la nouvelle base. N'oubliez pas ci-dessous de mettre le nouveau nom dans la variable 'NAME'.<br />
<br />
Lorsque c'est fait, éditez la variable DATABASES de votre local_settings.py ainsi (vous devrez remplacer les noms de la base de l'utilisateur et son mot de passe par les valeurs que vous avez choisies juste avant)  :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>DATABASES = {<br />
    'default': {<br />
        'ENGINE':   'django.db.backends.postgresql',<br />
        'NAME':     'nom_de_la_base',<br />
        'USER':     'nom_de_l_utilisateur',<br />
        'PASSWORD': 'm0t_de_p4&#36;&#36;',<br />
        'HOST':     '',    # Une chaîne vide pour le localhost.<br />
        'PORT':     '',    # Une chaîne vide pour le port par défaut.<br />
    },</code></div></div><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Remplissage de la base de données</span></span><br />
<br />
Toujours dans le répertoire racine "my_project26/", tapez la commande suivante pour créer les tables de la base :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme migrate --settings=my_project26.settings</code></div></div><br />
<span style="font-weight: bold;" class="mycode_b">À propos de MariaDB</span> : certains utilisateurs ont rencontrés des soucis en migrant depuis leur instance de Creme 2.5, une erreur apparaissant lors ce cette étape. Ils s'en sont sorti avec la méthode (plutôt moche, on ne va pas se le cacher) suivante. Ils relancent la commande "migrate" tant que ça fait progresser le processus (l'erreur étant différente) ; si à un moment l'erreur provoquée reste toujours la même, ils génèrent le code SQL brute avec la commande "sqlmigrate" (en donnant le nom de la migration fautive en argument), exécutent ces commandes SQL une à une dans un shell MariaDB (des erreurs sont rencontrées pour les opérations déjà faites, c'est normal), puis finissent par relancer la commande "migrate".<br />
<br />
<br />
Puis on remplit la base avec les données initiales (utilisateur administrateur, société initiale, configuration par défaut etc…) :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_populate --settings=my_project26.settings</code></div></div><br />
Ne vous inquiétez pas des messages du genre <Disable populate for "vcfs": it does not have any "populate.py" script>, ils indiquent juste que certaines apps n'ont pas besoin de créer des données initiales.<br />
<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Génération des <span style="font-style: italic;" class="mycode_i">bundles d'assets</span> statiques</span></span><br />
<br />
Il s'agit de créer des fichiers optimisés pour le CSS et le JavaScript, ainsi que des images avec des noms pensés pour être mises en cache intelligemment :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme generatemedia --settings=my_project26.settings</code></div></div><br />
Voici la sortie que vous devriez avoir :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>Generating l10n.js with variation {'language': 'en'}<br />
Generating l10n.js with variation {'language': 'fr'}<br />
Generating lib.js with variation {}<br />
Generating main.js with variation {}<br />
Generating testlib.js with variation {}<br />
Generating testcore.js with variation {}<br />
Generating icecreammain.css with variation {}<br />
Generating chantillymain.css with variation {}</code></div></div><br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Choix des apps installées</span></span><br />
<br />
Pour des raisons de simplicité, nous avons choisi d'installer Creme avec sa liste d'apps par défaut, qui couvre la plupart des besoins courants. Sont écartées de cette liste l'app "mobile" pour proposer en plus un ensemble de vues plus adaptées aux smartphones, et "polls" qui permet de faire des questionnaires/sondages internes.<br />
<br />
Creme étant modulaire, vous pouvez choisir plus finement les apps installées ; même si pour une première installation, vous devriez sûrement garder la liste de base (vous pouvez passer au chapitre suivant). Pour avoir une liste personnalisée, modifiez variable INSTALLED_APPS comme indiqué dans les commentaires de "project/settings.py".<br />
<br />
2 points importants :<br />
- vous ne pouvez enlever (en pratique mettez plutôt en commentaire avec un '#' en début de ligne) que les apps dans la section CREME OPTIONAL APPS, qui sont optionnelles comme l'indique le nom.<br />
- dans la liste sont indiquées des dépendances ; certaines apps nécessitent la présence d'autres apps. Cependant pas de craintes, si vous oubliez une dépendance, Creme générera une erreur assez claire à ce sujet.<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Choix avant l'installation</span></span><br />
<br />
Si vous n'avez pas encore créé la base de données, vous pouvez juste commenter/dé-commenter les noms des apps optionnelles, avant de faire les étapes des chapitres précédents (migrate, creme_populate, generatemedia).<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Ajouter des apps après l'installation</span></span><br />
<br />
Si vous souhaitez ajouter des apps après installation (ex: après plusieurs jours/mois d'utilisation un besoin apparaît), dé-commentez les apps voulues (toujours en respectant les dépendances -- ex: si vous voulez "events", "opportunities" doit aussi être dé-commenté), puis lancez les même commandes que pour l'installation initiale: migrate, creme_populate, generatemedia.<br />
<br />
(en effet il faut bien créer les nouvelles tables, les peupler, et aussi installer le nouveau JavaScript/CSS/...)<br />
<br />
<span style="font-weight: bold;" class="mycode_b"><span style="text-decoration: underline;" class="mycode_u">Désinstaller une app après l'installation</span></span><br />
<br />
Il existe plusieurs mécanismes, comme la configuration visuelle du menu ou la désactivation des type de relation, qui permettent de rendre très peu visible une app globalement inutile, et vous devriez commencer par là (car aucun risque de casser quoi que ce soit). Mais si vous le souhaitez vraiment, vous pouvez réellement désinstaller une app.<br />
<br />
C'est une opération un peu délicate, car des données relatives à l'app que vous voulez désinstaller peuvent exister en base, et être reliées à des données qui elles ne doivent pas être supprimées (car relatives à des apps que vous garder), tout en gardant un système cohérent... Donc :<br />
<br />
- privilégiez les apps pour lesquelles vous n'avez pas créé de données (typiquement aucune fiche).<br />
- faites une sauvegarde avant.<br />
<br />
La désinstallation d'une app se fait grâce à une commande, "creme_uninstall". Notez qu'il faut désinstaller une app à la fois (c'est déjà assez délicat comme ça...) ; si vous voulez désinstaller plusieurs apps, alors appliquez la méthode de désinstallation plusieurs fois, en respectant là encore les dépendances (ex: pour désinstaller "events" et "opportunities", faites le dans cet ordre, pour qu'à aucun moment une app n'ait pas ses dépendances installées). L'app que vous désinstallez doit être présente dans votre INSTALLED_APPS.<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_uninstall --settings=my_project26.settings app_a_desinstaller</code></div></div><br />
Si tout s'est bien déroulé, la commande vous demandera une fois finie de mettre en commentaire l'app dans votre INSTALLED_CREME_APPS.<br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du serveur</span></span><br />
<br />
Une fois cela fait il ne nous reste plus qu'à lancer le serveur de test en faisant :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme runserver --settings=my_project26.settings</code></div></div><br />
Vous pouvez maintenant vous connecter sur <a href="http://localhost:8000" target="_blank" rel="noopener" class="mycode_url">http://localhost:8000</a> pour voir que votre Crème fonctionne. La commande 'creme_populate' vous a indiqué qu'elle a créé un utilisateur "root" (mot de passe "root") ; utilisez cet utilisateur pour vous connecter. Vous êtes <span style="font-weight: bold;" class="mycode_b">très vivement</span> encouragé à changer immédiatement le mot de passe  (dans le menu en haut > icône rouage > Utilisateurs).<br />
<br />
Mais, et je vais le répéter, ce serveur de développement n'est pas fait pour être utiliser dans un contexte de production. Par exemple, pour mettre en production avec Apache et mod_wsgi, vous pouvez suivre cet autre billet: <a href="https://www.cremecrm.com/forum/showthread.php?tid=110" target="_blank" rel="noopener" class="mycode_url">https://www.cremecrm.com/forum/showthread.php?tid=110</a><br />
<br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Lancement du gestionnaire de jobs</span></span><br />
<br />
Certaines fonctionnalités (import des fichiers CSV/XLS, envoi des campagnes d'e-mails...) sont effectuées par des jobs tournant en parallèle du serveur Web. Ces jobs sont gérés par un gestionnaire qui s'occupent de créer ces processus lorsque c'est nécessaire.<br />
<br />
Ce gestionnaire doit être lancé à part, et tourner en permanence  ; si ce n'est pas le cas, la majorité de Creme fonctionnera parfaitement, mais pas les fonctionnalités basées sur les jobs. Si vous allez sur la liste des jobs (menu > Outils > Jobs) un message d'erreur vous indiquera si le gestionnaire est injoignable. Pour lancer le gestionnaire :<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>creme creme_job_manager --settings=my_project26.settings</code></div></div><br />
<span style="font-size: xx-large;" class="mycode_size"><span style="font-weight: bold;" class="mycode_b">Mise à jour</span></span><br />
<br />
Il est évidemment conseillé de régulièrement faire des sauvegarde de votre base de données, ainsi que des fichiers télé-versés dans "my_project26/media/upload/" ; c'est d'autant plus vrai avant une mise-à-jour.<br />
<br />
Vous pouvez vous tenir à jour des nouvelles <span style="font-style: italic;" class="mycode_i">releases</span> grâce par exemple à la <a href="https://pypi.org/project/creme-crm/#history" target="_blank" rel="noopener" class="mycode_url">page du paquet sur pyPI</a> qui explique comment faire faire (par exemple en suivant le flux RSS fait pour).<br />
<br />
Plus tard lorsque sortiront des versions de corrections pour Creme2.6, vous pourrez mettre à jour Creme et ses dépendances avec (adaptez avec le tag utilisé auparavant suivant votre SGBD -- MySQL dans cet exemple) :<br />
<br />
<div class="codeblock"><div class="title">Code :</div><div class="body" dir="ltr"><code>pip install -U creme-crm[mysql]==2.6.XYZ</code></div></div><br />
Le fichier CHANGELOG.TXT contient les nouveautés, ainsi que des notes sur les commandes. Dans le doute vous pouvez toujours mettre à jour la base de données avec les commandes "migrate" & "creme_populate"  (au pire les commandes ne feront rien) et ré-générer les <span style="font-style: italic;" class="mycode_i">assets</span> statiques comme au dessus avec "generatemedia".]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.6) : bouton d'appel non abouti]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=255</link>
			<pubDate>Mon, 05 Aug 2024 15:02:44 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=255</guid>
			<description><![CDATA[Un nouveau bouton est disponible pour les Contacts: "Créer un appel non abouti".<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_unsuccessful_detail.png" loading="lazy"  alt="[Image: creme26_FR_unsuccessful_detail.png]" class="mycode_img" /><br />
<br />
Il permet de créer en un seul clic un appel téléphonique infructueux afin d'en garder une trace. Les 2 participants à l'appel sont vous et le Contact dont vous regardez la vue détaillée. Vous pouvez configurer certains champs de cet appel dans le portail de configuration des Activités :<br />
 - le sous-type d'appel ("Sortant" par défaut)<br />
 - le titre<br />
 - le statut<br />
 - la durée en minutes (la fin de l'appel est le moment où vous cliquez sur le bouton, le début est calculé automatiquement grâce à cette durée).<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_unsuccessful_config.png" loading="lazy"  alt="[Image: creme26_FR_unsuccessful_config.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Un nouveau bouton est disponible pour les Contacts: "Créer un appel non abouti".<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_unsuccessful_detail.png" loading="lazy"  alt="[Image: creme26_FR_unsuccessful_detail.png]" class="mycode_img" /><br />
<br />
Il permet de créer en un seul clic un appel téléphonique infructueux afin d'en garder une trace. Les 2 participants à l'appel sont vous et le Contact dont vous regardez la vue détaillée. Vous pouvez configurer certains champs de cet appel dans le portail de configuration des Activités :<br />
 - le sous-type d'appel ("Sortant" par défaut)<br />
 - le titre<br />
 - le statut<br />
 - la durée en minutes (la fin de l'appel est le moment où vous cliquez sur le bouton, le début est calculé automatiquement grâce à cette durée).<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_unsuccessful_config.png" loading="lazy"  alt="[Image: creme26_FR_unsuccessful_config.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.6) : filtres spécifiques aux Rapports]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=254</link>
			<pubDate>Mon, 05 Aug 2024 15:00:34 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=254</guid>
			<description><![CDATA[Les Rapports utilisent généralement un filtre, afin d'affiner leurs résultats. Ces filtres sont les mêmes que ceux qu'utilisent les vues en liste (ex: si vous faites un Rapport sur les Devis, il peut utiliser les filtres disponibles sur la liste des Devis).<br />
<br />
Un problème que cela entraîne est que beaucoup d'utilisateurs créent des filtres un peu spécifiques afin de les utiliser dans leurs Rapports, mais ces filtres viennent "polluer" la vue en liste correspondante (car la sélection de filtres proposent de nombreux filtres non pertinents). Afin de corriger ce souci, Crème 2.6 propose des créer des filtres utilisables uniquement dans les Rapports. Les Rapports peuvent bien sûr continuer à utiliser les filtres classiques, mais les filtres spécifiques aux Rapports ne sont pas utilisables dans les vues en liste évidemment.<br />
<br />
Lorsque vous créez un Rapport, dans le champ du filtre vous avez un lien vous permettant de créer un de ces nouveaux filtres.<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_report_form_link.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_report_form_link.png]" class="mycode_img" /><br />
<br />
Une fois créés, ces filtres sont disponibles dans la sélection des filtres, et on et les distingue des filtres classiques par leur marqueur "[Rapport]".<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_available.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_available.png]" class="mycode_img" /><br />
<br />
Vous pouvez retrouver la liste des filtres pour Rapports dans le portail de configuration de l'app "Rapports".<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_config.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_config.png]" class="mycode_img" /><br />
<br />
Notez que si vous cliquez sur le nom d'un Filtre, vous avez accès à une vue détaillée du Filtre (autre nouveauté de Crème 2.6).<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_detail.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_detail.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Les Rapports utilisent généralement un filtre, afin d'affiner leurs résultats. Ces filtres sont les mêmes que ceux qu'utilisent les vues en liste (ex: si vous faites un Rapport sur les Devis, il peut utiliser les filtres disponibles sur la liste des Devis).<br />
<br />
Un problème que cela entraîne est que beaucoup d'utilisateurs créent des filtres un peu spécifiques afin de les utiliser dans leurs Rapports, mais ces filtres viennent "polluer" la vue en liste correspondante (car la sélection de filtres proposent de nombreux filtres non pertinents). Afin de corriger ce souci, Crème 2.6 propose des créer des filtres utilisables uniquement dans les Rapports. Les Rapports peuvent bien sûr continuer à utiliser les filtres classiques, mais les filtres spécifiques aux Rapports ne sont pas utilisables dans les vues en liste évidemment.<br />
<br />
Lorsque vous créez un Rapport, dans le champ du filtre vous avez un lien vous permettant de créer un de ces nouveaux filtres.<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_report_form_link.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_report_form_link.png]" class="mycode_img" /><br />
<br />
Une fois créés, ces filtres sont disponibles dans la sélection des filtres, et on et les distingue des filtres classiques par leur marqueur "[Rapport]".<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_available.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_available.png]" class="mycode_img" /><br />
<br />
Vous pouvez retrouver la liste des filtres pour Rapports dans le portail de configuration de l'app "Rapports".<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_config.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_config.png]" class="mycode_img" /><br />
<br />
Notez que si vous cliquez sur le nom d'un Filtre, vous avez accès à une vue détaillée du Filtre (autre nouveauté de Crème 2.6).<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_report_filters_detail.png" loading="lazy"  alt="[Image: creme26_FR_report_filters_detail.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.6) : configuration des calendriers]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=253</link>
			<pubDate>Mon, 05 Aug 2024 14:55:40 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=253</guid>
			<description><![CDATA[Avant Crème 2.6, si vous vouliez modifier le calendrier, vous deviez bidouiller pour écraser un fichier JavaScript. Il est maintenant possible de modifier certains paramètres directement via l'interface graphique, en allant dans la configuration des Activités. Cerise sur le gateau, la configuration peut être spécifique à chaque rôle (comme c'est le cas en général).<br />
<br />
Paramètres configurable en 2.6 :<br />
- vue par défaut (mois ou semaine).<br />
- premier jour de la semaine.<br />
- jours travaillés<br />
- plage horaire (heures de début et de fin de journée).<br />
- durée des intervalles de temps (dans la vue par semaine).<br />
- le glisser-déposer est-il actif (oui par défaut).<br />
- l'état de navigation doit-il être conservé (non par défaut).<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_calendar_config.png" loading="lazy"  alt="[Image: creme26_FR_calendar_config.png]" class="mycode_img" />]]></description>
			<content:encoded><![CDATA[Avant Crème 2.6, si vous vouliez modifier le calendrier, vous deviez bidouiller pour écraser un fichier JavaScript. Il est maintenant possible de modifier certains paramètres directement via l'interface graphique, en allant dans la configuration des Activités. Cerise sur le gateau, la configuration peut être spécifique à chaque rôle (comme c'est le cas en général).<br />
<br />
Paramètres configurable en 2.6 :<br />
- vue par défaut (mois ou semaine).<br />
- premier jour de la semaine.<br />
- jours travaillés<br />
- plage horaire (heures de début et de fin de journée).<br />
- durée des intervalles de temps (dans la vue par semaine).<br />
- le glisser-déposer est-il actif (oui par défaut).<br />
- l'état de navigation doit-il être conservé (non par défaut).<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_calendar_config.png" loading="lazy"  alt="[Image: creme26_FR_calendar_config.png]" class="mycode_img" />]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.6) : notifications]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=252</link>
			<pubDate>Mon, 05 Aug 2024 14:54:01 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=252</guid>
			<description><![CDATA[Depuis toujours Crème possède un système de Mémentos (<span style="font-style: italic;" class="mycode_i">Reminders</span>), qui permet de recevoir des e-mails pour vous prévenir d'une échéance. Ce système est utilisé par les Alertes & les ToDos ; par exemple vous recevez un e-mail lorsqu'une Alerte qui vous est attribuée va expirer dans 30 minutes. Et comme vous pouvez créer des Alertes dont la date d'expiration est un champ date de la fiche associée, cela permet par exemple d'être prévenu qu'une activité importante à laquelle vous participez va bientôt avoir lieu.<br />
<br />
Dans Crème 2.6, un système de notification a été introduit, amenant 2 principales avancées :<br />
- les notifications envoyées ne sont pas limitées à des e-mails, vous pouvez aussi les voir dans votre navigateur (donc sans quitter Crème).<br />
- si les mémentos ont été retravaillés pour utiliser ce nouveau système, d'autres parties de Crème en profitent aussi. Par exemple, une notification vous est envoyée si un administrateur a changé votre mot de passe ; ou bien quand un job d'import CSV vient de s'achever.<br />
<br />
Pas de notification :<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_empty.png" loading="lazy"  alt="[Image: creme26_FR_notifications_empty.png]" class="mycode_img" /><br />
<br />
Une notification vient d'arriver :<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_one.png" loading="lazy"  alt="[Image: creme26_FR_notifications_one.png]" class="mycode_img" /><br />
<br />
Si vous survolez la zone des notifications, vous voyez le détail :<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_panel.png" loading="lazy"  alt="[Image: creme26_FR_notifications_panel.png]" class="mycode_img" /><br />
<br />
Chaque notification est associée à un canal, et vos pouvez configurer les canaux pour savoir si la notification est envoyée dans le navigateur, par e-mail ou bien les 2. Si le canal n'est pas obligatoire, vous pouvez aussi choisir de ne pas recevoir les notifications du tout. Chaque utilisateur peut utiliser sa propre configuration si la configuration générale du canal ne lui convient pas.<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_config.png" loading="lazy"  alt="[Image: creme26_FR_notifications_config.png]" class="mycode_img" /><br />
<br />
Pour les administrateurs: une commande "creme_announce" a été créée, afin d'envoyer à tous les utilisateurs une notification leur donnant la date d'une future mise à jour (et donc d'une période de maintenance).]]></description>
			<content:encoded><![CDATA[Depuis toujours Crème possède un système de Mémentos (<span style="font-style: italic;" class="mycode_i">Reminders</span>), qui permet de recevoir des e-mails pour vous prévenir d'une échéance. Ce système est utilisé par les Alertes & les ToDos ; par exemple vous recevez un e-mail lorsqu'une Alerte qui vous est attribuée va expirer dans 30 minutes. Et comme vous pouvez créer des Alertes dont la date d'expiration est un champ date de la fiche associée, cela permet par exemple d'être prévenu qu'une activité importante à laquelle vous participez va bientôt avoir lieu.<br />
<br />
Dans Crème 2.6, un système de notification a été introduit, amenant 2 principales avancées :<br />
- les notifications envoyées ne sont pas limitées à des e-mails, vous pouvez aussi les voir dans votre navigateur (donc sans quitter Crème).<br />
- si les mémentos ont été retravaillés pour utiliser ce nouveau système, d'autres parties de Crème en profitent aussi. Par exemple, une notification vous est envoyée si un administrateur a changé votre mot de passe ; ou bien quand un job d'import CSV vient de s'achever.<br />
<br />
Pas de notification :<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_empty.png" loading="lazy"  alt="[Image: creme26_FR_notifications_empty.png]" class="mycode_img" /><br />
<br />
Une notification vient d'arriver :<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_one.png" loading="lazy"  alt="[Image: creme26_FR_notifications_one.png]" class="mycode_img" /><br />
<br />
Si vous survolez la zone des notifications, vous voyez le détail :<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_panel.png" loading="lazy"  alt="[Image: creme26_FR_notifications_panel.png]" class="mycode_img" /><br />
<br />
Chaque notification est associée à un canal, et vos pouvez configurer les canaux pour savoir si la notification est envoyée dans le navigateur, par e-mail ou bien les 2. Si le canal n'est pas obligatoire, vous pouvez aussi choisir de ne pas recevoir les notifications du tout. Chaque utilisateur peut utiliser sa propre configuration si la configuration générale du canal ne lui convient pas.<br />
<br />
<img src="https://img.hybird.org/creme/img/creme26/creme26_FR_notifications_config.png" loading="lazy"  alt="[Image: creme26_FR_notifications_config.png]" class="mycode_img" /><br />
<br />
Pour les administrateurs: une commande "creme_announce" a été créée, afin d'envoyer à tous les utilisateurs une notification leur donnant la date d'une future mise à jour (et donc d'une période de maintenance).]]></content:encoded>
		</item>
		<item>
			<title><![CDATA[Nouveauté (Creme 2.5) : configuration des campagnes d'e-mails]]></title>
			<link>https://www.cremecrm.com/forum/showthread.php?tid=243</link>
			<pubDate>Mon, 11 Sep 2023 13:25:53 +0200</pubDate>
			<dc:creator><![CDATA[<a href="https://www.cremecrm.com/forum/member.php?action=profile&uid=5">genglert</a>]]></dc:creator>
			<guid isPermaLink="false">https://www.cremecrm.com/forum/showthread.php?tid=243</guid>
			<description><![CDATA[Creme permet depuis longtemps de créer des campagnes d'envoi d'e-mails. Une campagne est associée à des listes d'envoi (créées par exemple en filtrant vos contacts), et à chaque envoi vous choisissez un patron de message qui va permettre de générer le sujet et le corps des e-mails.<br />
<br />
La configuration du serveur SMTP utilisé pour envoyer les e-mails était définie dans votre fichier 'settings.py', via les variables EMAILCAMPAIGN_HOST/EMAILCAMPAIGN_PASSWORD/...; ce n'était pas évident à comprendre que c'est là qu'il fallait chercher (car pas forcément très bien documenté), et en plus cela limitait cette configuration à l'administrateur uniquement.<br />
<br />
Avec Creme 2.5, cette configuration se fait désormais graphiquement, dans la configuration de l'app "E-mails" :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme25/creme25_FR_email_campaign_config01.png" loading="lazy"  alt="[Image: creme25_FR_email_campaign_config01.png]" class="mycode_img" /><br />
<br />
Notez qu'en plus du confort de créer la configuration via un formulaire, vous avez en plus la possibilité de configurer autant de serveurs SMTP que vous le voulez.<br />
<br />
Puis, lorsque vous créez un nouvel envoi (depuis la vue détaillée d'une campagne), vous choisissez le serveur à utiliser :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme25/creme25_FR_email_campaign_config02.png" loading="lazy"  alt="[Image: creme25_FR_email_campaign_config02.png]" class="mycode_img" /><br />
<br />
Si vous migrez depuis Creme 2.4 et que vous aviez une configuration de serveur d'envoi, cette configuration sera importée automatiquement via une migration de base. C'est le seul moment où les anciennes variables (EMAILCAMPAIGN_HOST...) sont utilisées ; elles seront supprimées avec Creme 2.6.]]></description>
			<content:encoded><![CDATA[Creme permet depuis longtemps de créer des campagnes d'envoi d'e-mails. Une campagne est associée à des listes d'envoi (créées par exemple en filtrant vos contacts), et à chaque envoi vous choisissez un patron de message qui va permettre de générer le sujet et le corps des e-mails.<br />
<br />
La configuration du serveur SMTP utilisé pour envoyer les e-mails était définie dans votre fichier 'settings.py', via les variables EMAILCAMPAIGN_HOST/EMAILCAMPAIGN_PASSWORD/...; ce n'était pas évident à comprendre que c'est là qu'il fallait chercher (car pas forcément très bien documenté), et en plus cela limitait cette configuration à l'administrateur uniquement.<br />
<br />
Avec Creme 2.5, cette configuration se fait désormais graphiquement, dans la configuration de l'app "E-mails" :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme25/creme25_FR_email_campaign_config01.png" loading="lazy"  alt="[Image: creme25_FR_email_campaign_config01.png]" class="mycode_img" /><br />
<br />
Notez qu'en plus du confort de créer la configuration via un formulaire, vous avez en plus la possibilité de configurer autant de serveurs SMTP que vous le voulez.<br />
<br />
Puis, lorsque vous créez un nouvel envoi (depuis la vue détaillée d'une campagne), vous choisissez le serveur à utiliser :<br />
<br />
<img src="https://img.hybird.org/creme/img/creme25/creme25_FR_email_campaign_config02.png" loading="lazy"  alt="[Image: creme25_FR_email_campaign_config02.png]" class="mycode_img" /><br />
<br />
Si vous migrez depuis Creme 2.4 et que vous aviez une configuration de serveur d'envoi, cette configuration sera importée automatiquement via une migration de base. C'est le seul moment où les anciennes variables (EMAILCAMPAIGN_HOST...) sont utilisées ; elles seront supprimées avec Creme 2.6.]]></content:encoded>
		</item>
	</channel>
</rss>