Changes

Jump to navigation Jump to search
163,027 bytes added ,  03:33, 6 September 2018
RC-001
<!--__NOTOC__ -->
__TOC__


<center>
{| class="wikitable" style="width: 80%; background-color:#FFEED9;border:2px dotted red"
|- style="vertical-align:top;"
|[[Image:015-IconeASurveiller_APT.png|25px]]&nbsp;&nbsp;<span style="font-size:120%">'''Mise en garde:'''</span><br>
<DIV align="center"><span style="font-size:120%;">Cette marche à suivre fonctionne correctement aujourd'hui&nbsp;&nbsp;''(5 septembre 2018)''.<br>Le développement étant très rapide vu la mise à jour quotidienne d'Odoo, elle peut ne pas fonctionner demain.</span></DIV>
<br>
|}
</center>

= Description générale =

=== Introduction ===

Cette marche à suivre décrit l'installation d'Odoo-11 sur un Serveur SME-9.2.

'''Le logiciel Odoo'''

''Référence'': [http://fr.wikipedia.org/wiki/Odoo http://fr.wikipedia.org/wiki/Odoo]

Odoo, anciennement OpenERP et Tiny ERP, est initialement un progiciel LIBRE de gestion intégrée comprenant de très nombreux modules permettant de simplifier la gestion d'une société dans son ensemble. Le logiciel est utilisé par plus de deux millions d’utilisateurs pour gérer leur entreprise à travers le monde. Odoo est le système ERP LIBRE le plus populaire.
Il existe une version Communautaire gratuite, sous licence LGPLv3, et une version Entreprise sous licence propriétaire Odoo Enterprise Edition License v1.0.<br>
À l’origine un ERP, le logiciel s’est vu étendre ses fonctionnalités à des applications de "front office" ''(CMS, e-commerce, blogs, forums, nouvelles, événements, chat en direct, offre d'emplois…)''.<br>
L’aspect LIBRE du logiciel a permis le développement de nombreux modules tiers créés par sa communauté de développeurs. Ces applications sont pour certaines, officiellement validées par l’éditeur tandis que d’autres ne sont destinées qu’à des versions spécifiques.

Le logiciel compte 260 modules officiels et 7300 modules communautaires. En décembre 2012, la version 7.0 d'OpenERP est lancée et peut être testée en ligne, téléchargée ou vue en version de démonstration. Mai 2014: OpenERP change de nom et devient Odoo.

'''La société éditrice OpenERP SA'''

OpenERP S.A. est également le nom de l’entreprise qui édite le logiciel. Dans le reste de ce document, on utilise le terme Odoo pour désigner le logiciel et OpenERP SA pour désigner l’entreprise de façon univoque.

=== Étapes ===
[[Image:Contrib_Odoo-11_2018-07-16_20h05.png|top|right|700px]]
* Installer le serveur de bases de données PostgreSQL-10.
* Installer la Collection RH-Python36, pour ne pas interférer avec la version de Python fourni par défaut avec le Serveur SME.
* Remplir les prérequis pour Odoo.
* Télécharger avec git, le dernier code Odoo et créer un script de lancement compatible avec le Serveur SME.
* Programmer un script de sauvegarde pour la base de données PostgreSQL et créer une tâche cron qui l'activera quotidiennement. Ainsi, la sauvegarde PostgreSQL sera intégrée à la sauvegarde régulière du Serveur SME.

Cette marche à suivre assume que:
* Vous avez réalisé l'installation d'un Serveur SME-9.2/64 sur votre réseau local et, dédié à Odoo seulement.
* Vous allez rouler Odoo-11 et PostgreSQL-10 sur le même serveur.
* L'adresse IP du serveur est: 192.168.1.11/24


= Préparation du serveur =

<span style="font-size:125%">'''Mise à jour du Serveur'''</span>

Avant de commencer quoi que ce soit, il est toujours préférable de mettre à jour le Serveur SME.


<span style="font-size:125%">'''Mode de fonctionnement du Serveur SME'''</span>

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Si nous sommes sur un réseau local ou sur une machine virtuelle, il est recommandé de choisir '''''<u>Serveur uniquement</u>''''' comme '''''Mode de fonctionnement''''' car, il pourrait y avoir certaines difficultés à accéder à Odoo par le réseau externe du serveur.

<center>
{| class="wikitable" style="width: 80%;"
|- style="vertical-align:bottom;font-family: Courier New;text-align: center;"
|Mode de fonctionnement:<br>Serveur uniquement.
||Interface de liaison de canaux: Désactivé.
||Configuration du serveur DHCP: Désactivé.
|- style="vertical-align:top;"
|[[Image:0000-Odoo-11-ModeDeFonctionnement.png|center|top|325px|border]]
||[[Image:0000-Odoo11-LisaisonDeCanaux.png|center|top|325px|border]]
||[[Image:0000-Odoo-11-ServeurDHCP.png|center|top|325px|border]]
|}
</center>



<span style="font-size:125%">'''Configuration des paramètres d'Accès à distance'''</span>

{|style="width: 100%;"
|- style="vertical-align:top;"
| '''''Gestion à distance'''''
- il n’est pas nécessaire d’ajouter le réseau LOCAL 192.168.1.0/24 pour la gestion à distance car, il est autorisé par défaut.


'''''Paramètres SSH'''''

- Accès par terminal sécurisé (SSH): '''''Autoriser l’accès que depuis les réseaux locaux'''''

- Autoriser l'administrateur à se connecter au serveur par SSH: '''''Oui'''''

- Autoriser l'authentification par SSH à l'aide de mots de passe standards: '''''Oui'''''

- Port TCP pour l’accès SSH: '''''2222'''''

<nowiki>*** </nowiki>On change le port SSH de 22 à 2222 pour dérouter, un peu plus, les intrusions malveillantes
|[[Image:0000-Odoo-11-AccesADistance-A.png|top|right|600px|border]]
|}

<span style="font-size:125%">'''Paramètres FTP'''</span>

{|style="width: 100%;"
|- style="vertical-align:top;"
|
- Pour conserver votre sécurité, il n'est pas obligatoire d'accorder l'Accès FTP à l'Internet complet, on peut choisir: '''''N'autoriser l'accès que depuis les réseaux locaux seulement.'''''

- Idem pour l'Accès FTP par mot de passe, on peut choisir '''''N'autoriser l'authentification que depuis les réseaux locaux seulement'''''.

- Cliquer '''''Enregistrer''''' pour sauvegarder tous les nouveaux paramètres de cette page.

[[Image:015-IconeASurveiller_APT.png|25px]]&nbsp;&nbsp;Si Odoo possède des clients qui doivent téléverser des fichiers, il faudra ajuster ''Accès FTP'' et ''Accès FTP par mot de passe''.

[[Image:003-BPC-IconeAstuce.png|25px]]&nbsp;&nbsp;Après avoir enregistrer les nouveaux paramètres, si le gestionnaire vous refuse l'accès, supprimez l'historique récent de votre navigateur et reloguez-vous au gestionnaire.

|[[Image:0000-Odoo-11-AccesADistance-B.png|top|right|600px|border]]
|}


<span style="font-size:125%">'''Serveur DNS du domaine'''</span>

[[Image:015-IconeASurveiller_APT.png|25px]]&nbsp;&nbsp;Pour les ''Serveurs DNS du domaine'', il faut toujours utiliser '''''Serveurs DNS de l'Internet''''' pour un site dans l'i-bay Primary et '''''Résolu localement''''' pour tous les sites dans une autre i-bay, que vous ayez un domaine FQDN ou non.

[[Image:018-IconeTruc.png|25px]]&nbsp;&nbsp;Notre Serveur SME n'est pas accessible depuis l'Internet. Dans un tel cas, il nous faut obligatoirement spécifier '''''Résolu Localement''''', même si nous utilisons l'i-bay Primary sinon, nous ne pourrons pas accéder à notre serveur.

<center>
{| class="wikitable" style="width: 80%;"
|- style="vertical-align:bottom;font-family: Courier New;text-align: center;"
|Domaines > Modifier.
||Résolu localement > Modifier.
|- style="vertical-align:top;"
|[[Image:0000-Odoo-11-DNSduDomaine-A.png|center|top|450px|border]]
||[[Image:0000-Odoo-11-DNSduDomaine-B.png|center|top|450px|border]]
|}
</center>

[[Image:003-BPC-IconeAstuce.png|25px]]&nbsp;&nbsp;Si nous avons un serveur DNS sur le réseau local, nous pouvons accéder à notre site Odoo en spécifiant son FQDN sinon, nous devons utiliser son adresse IP.


<span style="font-size:125%">'''Fail2ban'''</span>

Il est fortement recommandé d'installer Fail2ban pour sécuriser votre futur site Odoo.


<span style="font-size:125%">'''Certificat Let's Encrypt'''</span>

On devrait installer un certificat de sécurité SSL de Let's Encrypt.


<span style="font-size:125%">'''Création d'usagers dans le gestionnaire Server Manager'''</span>

* '''michelandre''': usager pour des tests à la console PostgreSQL.
<center>
{| class="wikitable" style="width: 80%; background-color:#ffffff;"
|- style="vertical-align:top;"
|[[Image:0000-Odoo-11-michelandre-A.png|center|top|200px|border]]
||[[Image:0000-Odoo-11-michelandre-B.png|center|top|200px|border]]
||[[Image:0000-Odoo-11-michelandre-C.png|center|top|200px|border]]
||[[Image:0000-Odoo-11-michelandre-D.png|center|top|200px|border]]
||[[Image:0000-Odoo-11-michelandre-E.png|center|top|200px|border]]
|}
</center>


'''Autoriser un utilisateur à exploiter la ligne de commande'''

''Référence'': http://smeserver.fr/astuces.php?astuce=user_shell.

Par défaut, sous SME, seuls les comptes admin et root peuvent ouvrir une session; admin accède directement à la console du serveur et root à un shell ''(bash, par défaut)''.

Par mesure de sécurité, aucun utilisateur ajouté au système ne peut ouvrir de session en ligne de commande. Le shell par défaut est le programme <code>/usr/bin/rssh</code> qui n'autorise l'utilisateur qu'à ouvrir une session en SCP, SFTP ou rsync. En cas de tentative d'ouverture d'une session shell, un message d'avertissement apparaît, indiquant cette limitation.

Mais en cas de besoin avéré, vous avez la possibilité de modifier cette restriction en vous loguant root et en changeant le shell par défaut de l'utilisateur en question.


'''''Changement du shell de l'usager michelandre'''''

On affiche le shell de michelandre.
# cat /etc/passwd | grep michelandre

michelandre:x:5000:5000:Michel-Andre Rob:/home/e-smith/files/users/michelandre:<span style="color:red">/usr/bin/rssh</span>

On change le shell.
# db accounts setprop michelandre Shell /bin/bash

On signale le changement pour qu'il devienne permanent.
# signal-event user-modify michelandre

On vérifie.
# cat /etc/passwd | grep michelandre

michelandre:x:5000:5000:Michel-Andre Rob:/home/e-smith/files/users/michelandre:/<span style="color:red">bin/bash</span>


'''Mot de passe pour les usagers SME'''

''Référence'': https://www.micronator.org/affaires/manuel-de-ladministrateur/.

Il n'est pas possible pour l'administrateur de récupérer un mot de passe oublié par un utilisateur. Tout ce qu'il peut faire est de définir un nouveau mot de passe pour l'utilisateur.

Le système de vérification de la complexité du mot de passe demande une valeur trop élevée, comment puis-je la changer?

D'abord, un avertissement - Beaucoup trop de systèmes ont des mots de passe faibles et cela créé une vulnérabilité pour le serveur. Il faut éduquer les utilisateurs sur la nécessité de mots de passe robustes ou complexes; ceci reste la meilleure option. Si cette éducation échoue, vous pouvez, en passant par le terminal root du serveur ou en installant la Contrib '''Password''', changer le contrôle de la complexité du mot de passe de "fort" à "normal" qui était le réglage par défaut des versions précédentes du Serveur SME.


'''''Paramètres'''''

'''strong''' Le mot de passe est envoyé au programme '''Cracklib''' pour vérifier qu'il ne fasse pas partie d'un dictionnaire et qu'il possède des majuscules, des minuscules, un nombre, des caractères non alphanumériques et une longueur minimum de 7 caractères.

'''normal''' Le mot de passe nécessite des caractères majuscules, minuscules, numérique, non alphanumériques et une longueur minimale de 7 caractères.

'''none''' Le mot de passe n'a aucune vérification d'effectuer.

Veuillez noter que "none" ne veut pas dire aucun mot de passe mais, signifie simplement qu'aucune vérification de la complexité du mot de passe ne sera faite. Vous pouvez entrer un mot de passe ''(faible)'' si vous voulez, tant qu'il possède au moins 7 caractères.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Veillez à utiliser la casse exacte dans un terminal root.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Les exemples ci-dessous n'ont pas à être exécutés. Ils ne servent qu'à la démonstration des paramètres des mots de passe.

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<nowiki># </nowiki>config setprop passwordstrength <span style="color:red">Users</span> normal<br>
|}

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<nowiki># </nowiki>config setprop passwordstrength <span style="color:red">Ibays</span> normal<br>
|}

Il est également possible, mais fortement déconseillé, de désactiver la vérification de la complexité du mot de passe en mettant le paramètre à "none".

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<nowiki># </nowiki>config setprop passwordstrength Users <span style="color:red">none</span><br>
|}

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<nowiki># </nowiki>config setprop passwordstrength Ibays <span style="color:red">none</span><br>
|}

Après une modification, il faut signaler le(s) changement(s).

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<nowiki># </nowiki>signal-event password-modify<br>
|}

On vérifie.

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<nowiki># </nowiki>config show passwordstrength<br>
<span style="color:blue">Admin=strong</span><br>
<span style="color:blue">Ibays=strong</span><br>
<span style="color:blue">Users=strong</span><br>
|}


'''''Changement du mot de passe par l'utilisateur lui-même'''''

Une fois qu'ils ont un compte actif, les utilisateurs peuvent définir leurs propres mots de passe en accédant à l'URL user-password qui est seulement accessible à partir du réseau local. Ils le font par le biais de leur navigateur Web en visitant l'URL http://mon-domaine.xxx/user-password ''(où "mon-domaine.xxx" est le nom du domaine qu'on a entré dans le gestionnaire du serveur)''.

Pour faire le changement, un utilisateur entrera son nom de compte ''(les caractères avant "@")'', l'ancien mot de passe et le nouveau ''(pour assurer l'exactitude, l'écran demandera deux fois le nouveau mot de passe)''. Notez que la modification du mot de passe d'un utilisateur dans le gestionnaire du serveur remplace tout précédent mot de passe entré par l'utilisateur. Par conséquent, lorsqu'un utilisateur oublie son mot de passe, l'usager '''admin''' peut le réinitialiser dans le gestionnaire du serveur.


'''''Changement d'un mot de passe à la console du serveur'''''

Sur un Serveur SME, un utilisateur possède en réalité deux mots de passe. Le premier est celui auquel nous sommes tous habitués et qui est utilisé pour se connecter au serveur. Le deuxième est celui utilisé par l'usager pour tout ce qui a trait à Samba. Habituellement, les deux mots de passe sont identiques. Lorsque le gestionnaire Server Manager crée/change le mot de passe d'un usager ou d'une i-bay, il commence par vérifier si le mot de passe répond aux critères définis pour ceux-ci: longueur, composition, robustesse etc. Ensuite, il crée/change non seulement le mot de passe standard mais aussi, il change automatiquement celui utilisé pour Samba. L'opération est invisible.

Le gestionnaire Server Manager utilise deux commandes distinctes pour créer/changer un mot de passe: <code>passwd</code> pour le mot de passe standard et <code>smbpasswd</code> pour celui utilisé pour Samba. Ces deux commandes sont identiques en tous points et sont utilisées avec les mêmes paramètres.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Si on utilise ces commandes à la console du serveur, elles ne vérifient pas la conformité du mot de passe.


'''''Mot de passe standard de michelandre'''''

Pour faciliter les <code>login</code> pour cette marche à suivre, on passe outre à la conformité des mots de passe et on utilise la console du serveur pour changer nos mots de passe afin de profiter d'un mot simple. Tous les mots de passe seront celui du célèbre Général Toto qui utilise toujours <span style="color:red">fghtbgh</span>.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;<u>Non recommandé pour un serveur en production.</u>

Mot de passe standard de l'usager michelandre.
# passwd michelandre

Changement de mot de passe pour l'utilisateur michelandre.
Entrez le nouveau mot de passe UNIX :<span style="color:red">fghtbgh</span>
Retapez le nouveau mot de passe UNIX :<span style="color:red">fghtbgh</span>
passwd : mise à jour réussie de tous les jetons d'authentification.


'''''Mot de passe Samba de michelandre'''''

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;<u>Non recommandé pour un serveur en production.</u>

Changement du mot de passe Samba de l'usager michelandre.
# smbpasswd michelandre

New SMB password:<span style="color:red">fghtbgh</span>
Retype new SMB password:<span style="color:red">fghtbgh</span>


'''Usager odoo'''

* '''odoo''': usager qui sera le propriétaire/groupe de l'environnement Odoo.

<center>
{| class="wikitable" style="width: 60%; background-color:#ffffff;"
|- style="vertical-align:top;"
|[[Image:0000-Odoo-11-Usager-odoo-A.png|center|top|250px|border]]
||[[Image:0000-Odoo-11-Usager-odoo-B.png|center|top|600px|border]]
|}
</center>


'''''Changement du shell de l'usager odoo'''''

On affiche le shell de l'usager odoo.
# cat /etc/passwd | grep odoo

odoo:x:5001:5001:Utilisateur Environnement virtuel:/home/e-smith/files/users/odoo:<span style="color:red">/usr/bin/rssh</span>

On change le shell.
# db accounts setprop odoo Shell /bin/bash

On signale le changement pour qu'il devienne permanent.
# signal-event user-modify odoo

On vérifie.
# cat /etc/passwd | grep odoo

odoo:x:5001:5001:Utilisateur Environnement virtuel:/home/e-smith/files/users/odoo:<span style="color:red">/bin/bash</span>


'''''Mot de passe standard de l'usager odoo'''''

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;<u>Non recommandé pour un serveur en production.</u>

Changement du mot de passe standard de l'usager odoo.
# passwd odoo

Changement de mot de passe pour l'utilisateur odoo.
Entrez le nouveau mot de passe UNIX :<span style="color:red">fghtbgh</span>
Retapez le nouveau mot de passe UNIX :<span style="color:red">fghtbgh</span>
passwd : mise à jour réussie de tous les jetons d'authentification.


'''''Mot de passe Samba de l'usager odoo'''''

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;<u>Non recommandé pour un serveur en production.</u>

Changement du mot de passe Samba de l'usager odoo
# smbpasswd odoo

New SMB password:<span style="color:red">fghtbgh</span>
Retype new SMB password:<span style="color:red">fghtbgh</span>


<span style="font-size:125%">'''Paramètres SSHD'''</span>

'''''Désactivation d'AutoBlock'''''

Vu que nous avons installé Fail2ban sur notre serveur, il n'est plus nécessaire de surveiller les connexions avec <code>AutoBlock</code>; Fail2ban s'en occupe.

# config setprop sshd AutoBlock disabled

# signal-event remoteaccess-update

# config show sshd | grep AutoBlock

AutoBlock=<span style="color:red">disabled</span>
AutoBlockTime=900
AutoBlockTries=4


<span style="font-size:125%">'''i-bay Primary'''</span>

'''''Ajustement des paramètres de l'i-bay Primary'''''

Les valeurs de certains paramètres de PHP ne sont pas suffisants. Ces paramètres sont: <code>MemoryLimit</code>, <code>PostMaxSize</code> et <code>UploadMaxFilesize</code>. Il faut les ajuster.

L'installation d'Odoo se fera dans l'i-bay Primary et vu qu'on pourrait utiliser une Collection PHP, on ajuste alors les paramètres de l'i-bay Primary.

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Il faut obligatoirement que le paramètre PostMaxSize soit plus grand que celui de UploadMaxFilesize. Si on modifie l'un, il faut vérifier l'autre pour que la correspondance des grandeurs soit respectée. <u>MemoryLimit (512M) > PostMaxSize (52M) > UploadMaxFilesize (50M)</u>.


'''''MemoryLimit'''''

Chaque fois qu'un client fait une requête au serveur Web, PHP génère un processus PHP. Le travail de ce processus est de générer du code HTML qu'il envoie au client. Le processus fournit un temps d'exécution à un script qui crée la réponse à la requête. La limite de mémoire ''MemoryLimit'' est la quantité maximale de mémoire que ce processus peut utiliser. Si la limite est atteinte ou dépassée, le processus échoue et Apache signale une erreur HTTP 500.

On ajuste le paramètre pour l'i-bay Primary.
<nowiki># db accounts setprop Primary MemoryLimit 512M</nowiki>


'''''PostMaxSize'''''

Le paramètre ''PostMaxSize'' définit la taille maximale autorisée pour les données d'un post. Ce paramètre affecte également le téléchargement de fichiers. Pour télécharger des fichiers volumineux, cette valeur doit absolument être toujours supérieure à ''UploadMaxFilesize''.

On ajuste le paramètre pour l'i-bay Primary.
<nowiki># db accounts setprop Primary PostMaxSize 52M</nowiki>


'''''UploadMaxFilesize'''''

Pour certaines extensions, on doit autoriser le téléversement de fichiers et la grandeur de ceux-ci ne peut dépasser la limite définie par le paramètre ''UploadMaxFilesize'' de PHP.

On ajuste le paramètre pour l'i-bay Primary.
<nowiki># db accounts setprop Primary UploadMaxFilesize 50M</nowiki>


'''''Répertoire temporaire de téléchargement'''''

On doit spécifier un répertoire temporaire à l'i-bay Primary pour le téléchargement de fichiers, extensions, modules, etc. Ce répertoire servira pour tous les programmes PHP installés dans l'i-bay Primary ou ses sous-répertoires, lorsque ceux-ci auront besoin d'un répertoire temporaire pour leurs téléchargements. Si ce répertoire n'existe pas, certains CMS pourraient afficher le message suivant:

<center>
{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|Le fichier que vous voulez téléverser semble vide. Ceci peut être dû à une erreur dans le nom du fichier. Veuillez vérifier que vous désirez vraiment téléverser ce fichier.
|}
</center>

On active la propriété.
<nowiki># db accounts setprop Primary </nowiki>PHPBaseDir /home/e-smith/files/ibays/Primary:/tmp


'''''Apache'''''

* Permettre à Apache de lire les fichiers <code>.htaccess</code> de l'i-bay Primary et de ses sous-répertoires.
<nowiki># </nowiki>db accounts setprop Primary AllowOverride all

* Permettre à Apache de suivre les liens symboliques.
<nowiki># db accounts setprop Primary </nowiki>FollowSymLinks enabled

* Défendre à Apache d'afficher le contenu des répertoires.
<nowiki># db accounts setprop Primary </nowiki>Indexes disabled


'''Signalisation des changements'''

On signale les changements pour qu'ils deviennent permanents.
<nowiki># signal-event </nowiki>ibay-modify Primary

On vérifie.
<nowiki># </nowiki>db accounts show Primary

Primary=ibay
<span style="color:red">AllowOverride</span>=all
CgiBin=enabled
<span style="color:red">FollowSymLinks</span>=enabled
Group=shared
<span style="color:red">Indexe</span>s=disabled
<span style="color:purple">MemoryLimit</span>=512M
Modifiable=no
Name=Primary i-bay
<span style="color:red">PHPBaseDi</span>r=/home/e-smith/files/ibays/Primary:/tmp
PasswordSet=no
Passwordable=no
<span style="color:purple">PostMaxSize</span>=52M
PublicAccess=global
Removable=no
<span style="color:purple">UploadMaxFilesize</span>e=52M=50M
UserAccess=wr-admin-rd-group

* Les grandeurs maximales sont maintenant de: ''MemoryLimit (512M) > PostMaxSize (52M) > UploadMaxFilesize (50M)''.
* ''PHPBaseDir'' pointe vers <code>/tmp</code>.
* Apache lira les fichiers <code>.htaccess</code>, suivra les liens symboliques et n'affichera pas le contenu des répertoires.


<center><span style="font-size:125%">'''Les prérequis pour le Serveur SME sont tous remplis.'''</span></center>


= PostgreSQL =

=== Dépôt de logiciels PostgreSQL (pgdg) et clé ===

'''''Version CentOS'''''

Pour connaître la version CentOS dont notre serveur est issu.
# cat /etc/centos-release

CentOS release <span style="color:red">6.10</span> (Final)


'''''Lien du dépôt PostgreSQL'''''
[[Image:Odoo-11-PostgreSQL.png|right|top|300px|border]]
Pour connaître le lien URL du dépôt ''(repository)'' de la dernière version de PostgreSQL, on se rends au site suivant: [http://yum.postgresql.org/repopackages.php#pg10 http://yum.postgresql.org/repopackages.php#pg10].<br>


On claque ''(clic droit)'' sur '''CentOS 6 - x86 64''' et on copie l'a­dres­se du lien.

Le lien pour notre serveur est: https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-6-x86_64/pgdg-centos10-10-2.noarch.rpm.


<span style="font-size:125%">'''Création du dépôt'''</span>


'''''Téléchargement du dépôt pgdg-10-centos.repo'''''

Le dépôt ''pgdg-10-centos.repo'' contient les descriptions de quatre dépôts CentOS relatifs à PostgreSQL: ''pgdg10'', ''pgdg10-source'', ''pgdg10-updates-testing'' et ''pgdg10-source-updates-testing''.

La commande pour télécharger ces dépôts est composé de 2 parties:

* yum install -y
* l'URL du paquet de ces dépôt

On installe le paquet décrivant le dépôt de logiciels de PostgreSQL pour les serveurs CentOS-6 dont le Serveur SME-9 est issu.

On entre '''''yum install -y''''' (suivi d'un espace) et on colle l'URL copié précédemment.

<nowiki># </nowiki>yum install -y https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-6-x86_64/pgdg-centos10-10-2.noarch.rpm

...
Installation de 1 paquet(s)
Taille totale : 2.7 k
Taille d'installation : 2.7 k
...


'''''Importation de la clé PKI'''''

On affiche les clés PKI pour ces dépôts.
# ls -als /etc/pki/rpm-gpg/

total 28
4 drwxr-xr-x 2 root root 4096 17 juin 13:17 .
4 drwxr-xr-x 11 root root 4096 17 juin 09:36 ..
4 -rw-r--r-- 1 root root 1706 28 mars 2017 RPM-GPG-KEY-CentOS-6
4 -rw-r--r-- 1 root root 1730 28 mars 2017 RPM-GPG-KEY-CentOS-Debug-6
4 -rw-r--r-- 1 root root 1730 28 mars 2017 RPM-GPG-KEY-CentOS-Security-6
4 -rw-r--r-- 1 root root 1734 28 mars 2017 RPM-GPG-KEY-CentOS-Testing-6
4 -rw-r--r-- 1 root root 1726 24 sept. 2017 <span style="color:red">RPM-GPG-KEY-PGDG-10</span>

On importe la clé.
#<nowiki></nowiki> rpm --import /etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-10


'''''Affichage des paramètres du dépôt pgdg-10-centos.repo'''''

# cat /etc/yum.repos.d/pgdg-10-centos.repo

<span style="color:red">[pgdg10]</span>
name=PostgreSQL 10 $releasever - $basearch
baseurl=https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-$releasever-$basearch
enabled=1
gpgcheck=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-10

<nowiki>[pgdg10-source]</nowiki>
name=PostgreSQL 10 $releasever - $basearch - Source
...


'''''Transformation du dépôt pgdg10 vers le format SME'''''

On crée le dépôt ''pgdg10'' sous format SME et on l'ajoute à la base de données des dépôts de SME-9.2.

Porter une attention particulière aux: ['], [\], et [:///].

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.

/sbin/e-smith/db yum_repositories set pgdg10 repository <span style="color:red">\</span>
Name 'PostgreSQL 10' <span style="color:red">\</span>
BaseURL 'https://download.postgresql.org/pub/repos/yum/10/redhat/rhel-$releasever-$basearch' <span style="color:red">\</span>
EnableGroups no <span style="color:red">\</span>
GPGCheck yes <span style="color:red">\</span>
GPGKey file:///etc/pki/rpm-gpg/RPM-GPG-KEY-PGDG-10 <span style="color:red">\</span>
Visible no <span style="color:red">\</span>
status disabled


=== Exclusion des rpm absolete ===
On ne veut pas de RPM "absolete" donc, on les exclut du dépôt de base ''(base)'' car autrement, on rencontrera des difficultés lorsqu'on fera des mises à jour du Serveur SME-9.2.

Cette commande ajoute seulement ''postgresql*'' aux exclusions déjà présentes dans le dépôt de base.

<nowiki># db yum_repositories </nowiki>setprop base Exclude 'initscripts,libgsf<span style="color:red">,postgresql</span>*'

On signale la modification.
<nowiki># signal-event </nowiki>yum-modify

Après une commande <code>yum-modify</code>, <u>attendre 20-30 secondes avant de lancer une commande d'installation</u>.

[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;Ce délais est nécessaire afin que <code>yum</code> ait le temps d'accomplir sa mise à jour sinon, le message suivant s'affichera en boucle jusqu'à ce que <code>yum</code> ait terminé son travail.

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|Verrou /var/run/yum.pid existant : une autre copie est lancée avec le pid 2322.<br>
<nowiki></nowiki>&nbsp;Une autre application verrouille actuellement l'utilisation de yum ; <span style="color:red">attente de déverrouillage...</span><br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;L'autre application est : yum<br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mémoire : 20 M RSS (765 MB VSZ)<br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Débuté : il y a Wed May 30 08:28:45 2018 - 00:04<br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;État : Mise en attente, pid : 2322<br>
<nowiki></nowiki>&nbsp;Une autre application verrouille actuellement l'utilisation de yum ; <span style="color:red">attente de déverrouillage...</span><br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;L'autre application est : yum<br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Mémoire : 20 M RSS (765 MB VSZ)<br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Débuté : il y a Wed May 30 08:28:45 2018 - 00:06<br>
<nowiki></nowiki>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;État : Mise en attente, pid : 2322<br>
<nowiki></nowiki>&nbsp;...<br>
|}

Vérification du dépôt ''base''.
<nowiki># db yum_repositories </nowiki>show base

base=repository
EnableGroups=no
Exclude=initscripts,libgsf<span style="color:red">,postgresql*</span>
GPGCheck=yes
MirrorList=http://mirrorlist.centos.org/?release=$releasever&arch=$basearch&repo=os
Name=CentOS - os
Visible=yes
status=enabled


=== Installation de PostgreSQL ===
Maintenant, on peut procéder à l'installation de PostgreSQL-10.<br>
<u>La commande s'étale sur deux lignes.</u>
# yum install -y --enablerepo=pgdg10 postgresql10 postgresql10-libs postgresql10-server <span style="color:red">\</span>
postgresql10-contrib postgresql10-devel postgresql10-docs postgresql10-test

...
Installation de 9 paquet(s)
Taille totale des téléchargements : 31 M
Taille d'installation : 115 M
...


'''''Initialisation de la base de données'''''

<nowiki># </nowiki>/etc/init.d/postgresql-10 initdb


'''''Lancement manuel de PostgreSQL'''''

<nowiki># /etc/init.d/postgresql-10 start</nowiki>

On vérifie.
<nowiki># /etc/init.d/postgresql-10 status</nowiki>

postgresql-10 (pid 2435) <span style="color:red">en cours d'exécution...</span>


'''''Démarrage/arrêt automatiques'''''

On veut que PostgreSQL se lance automatiquement à tous les amorçages du Serveur SME-9.2. On ajoute un lien vers <code>/etc/rc.d/init.d/postgresql-10</code> dans le répertoire <code>/etc/rc.d/rc7.d</code>.
<nowiki># ln -s /etc/rc.d/init.d/postgresql-10 /etc/rc.d/rc7.d/S51postgresql-10</nowiki>

Un lien pour l'arrêt a déjà été créé, par l'installation de PostgreSQL, dans <code>/etc/rc.d/rc6.d/K36postgresql-10</code>. Ce lien ne fonctionne pas bien. On <u>force</u> donc son remplacement.
# ln -s<span style="color:red">'''f'''</span> /etc/rc.d/init.d/postgresql-10 /etc/rc.d/rc6.d/K36postgresql-10


'''''Signalisation des changements'''''

Nous avons fait plusieurs changements, on signale ceux-ci de manière traditionnelle et on pourra en profiter pour vérifier l'arrêt et le redémarrage de PostgreSQL-10.<br>
<nowiki># signal-event post-upgrade; signal-event reboot</nowiki>

# Arrêt de PostgreSQL.
# Démarrage de PostgreSQL.
<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:top;"
|[[Image:Odoo-11-ArretPSQL.png|center|top|450px|border]]
||[[Image:Odoo-11-DemarragePSQL.png|center|top|450px|border]]
|}
</center>


Après le ré-amorçage, on se logue et on vérifie le statut de PostgreSQL.
<nowiki># /etc/init.d/postgresql-10 status</nowiki>

postgresql-10 (pid 1706) <span style="color:red">en cours d'exécution...</span>


'''''Pour en savoir un peu plus'''''

Consulter l'URL: [http://www.ird.fr/us191/spip.php?article16 http://www.ird.fr/us191/spip.php?article16].


= Premiers pas avec PostgreSQL =
<br>
''Référence'': Cette section s'est inspirée de l'article suivant: [https://wiki.postgresql.org/wiki/First_steps https://wiki.postgresql.org/wiki/First_steps]. Elle démontre quelques commandes à la console <code>psql</code>.

On se connecte au Serveur SME en tant que <span style="color:red">root</span> puis, on change d'usager pour devenir le super-utilisateur <span style="color:red">postgres</span>.
<nowiki># </nowiki>su - postgres

On lance le terminal interactif de PostgreSQL.
$ psql

(<span style="color:red">10.5</span>)
Saisissez « help » pour l'aide.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;L'invite <code>#</code> est devenu <code>$</code> car, ''postgres'' est un utilisateur standard dans SME.


On vérifie que l'aide fonctionne.

<nowiki># HELP</nowiki>

Vous utilisez psql, l'interface en ligne de commande de PostgreSQL.
Saisissez:
\copyright pour les termes de distribution
\h pour l'aide-mémoire des commandes SQL
\? pour l'aide-mémoire des commandes psql
\g ou point-virgule en fin d'instruction pour exécuter la requête
\q pour quitter

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp; Lorsque l'utilisateur ''postgres'' est entré dans <code>psql</code>, l'invite est devenu <code>#</code> car, il est le super-utilisateur de PostgreSQL.



'''''SCHEMA'''''

Une base de données contient un ou plusieurs schémas, qui eux, contiennent des tables. Les schémas con­tien­nent aussi d'autres types d'objets y compris des types de données, fonctions et opérateurs. Seul le nom d'objet peut être utilisé sans conflit i.e. schema1 et mon_schema peuvent tous les deux contenir des tables mytable. Contrairement aux bases de données; les schémas ne sont pas séparés de manière rigide; un utilisateur peut accéder aux objets de n'importe lequel des schémas de la base de données auxquels il se connecte s'il a les privilèges pour le faire.
On crée un schéma qu'on appellera test dans la base de données par défaut appelée postgres.
# CREATE SCHEMA test;

CREATE SCHEMA


'''''RÔLE'''''

Un rôle est une entité qui peut posséder des objets de la base de données et avoir des droits sur la base. Il peut être considéré comme un "utilisateur", un "groupe" ou les deux suivant la façon dont il est utilisé.

On crée un rôle ''(rôle = user = usager)'' avec un mot de passe.

L'usager ''michelandre'' que PostgreSQL va créer n'a rien à voir avec l'utilisateur standard SME ''michelandre''.
# CREATE USER michelandre PASSWORD '<span style="color:red">fghtbgh</span>';

CREATE ROLE


'''''GRANT'''''

La commande GRANT a deux variantes de base: la première donne des droits sur un objet de la base de données ''(table, vue, séquence, base de données, fonction, langage de procédure, schéma ou espace logique)'', la seconde gère les appartenances à un rôle.

On donne au nouveau rôle tous les droits ''(tel que la possibilité de créer des tables)'' sur le nouveau schéma.
# GRANT ALL ON SCHEMA test TO michelandre;

GRANT

On donne au nouveau rôle tous les droits ''(tel que la possibilité d'insertion)'' sur toutes les tables du nouveau schéma.
# GRANT ALL ON ALL TABLES IN SCHEMA test TO michelandre;

GRANT


'''''Sortie de la console PostgreSQL'''''

On se déconnecte.
# \q


On se déconnecte de l'usager ''postgres'' et on retourne à l'usager ''root''.
$ exit

logout


'''''Usager standard SME (michelandre) et PostgreSQL'''''

On se substitue à l'usager michelandre ''(celui du Serveur SME)''.
# su - michelandre


'''''Connexion à la BD avec un usager standard SME'''''

Par défaut, le mode d'authentification pour se loguer dans PostgreSQL est "'''ident'''" qui signifie qu'un usager xxx de Linux ne peut se connecter qu'en tant qu'usager PostgreSQL xxx.

On se logue, en tant qu'usager ordinaire ''(michelandre qui a été créé précédemment dans PostgreSQL par le super-utilisateur postgres)'' à la base de données par défaut i.e. la BD '''''postgres'''''.
$ psql -d postgres

psql (<span style="color:red">10.5</span>)
Saisissez « help » pour l'aide.

<span style="color:red">=></span>
[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp; Lorsque l'utilisateur ''michelandre'' de SME est entré dans <code>psql</code> et se connectant au schéma ''postgres'', il est devenu l'usager michelandre de PostgreSQL et il est, dans ce contexte, un usager standard PostgreSQL dont l'invite est <span style="color:red">=></span> pour un tel rôle.


'''''HELP'''''

On essaie l'aide.
=> HELP

Vous utilisez psql, l'interface en ligne de commande de PostgreSQL.
Saisissez:
\copyright pour les termes de distribution
\h pour l'aide-mémoire des commandes SQL
\? pour l'aide-mémoire des commandes psql
\g ou point-virgule en fin d'instruction pour exécuter la requête
\q pour quitter


'''''CREATE'''''

Dans le schéma ''test'', on crée une table <code>test</code>.

=> CREATE TABLE test.test (testdecol varchar(20));

CREATE TABLE


'''''INSERT'''''

On insère une entrée dans la nouvelle table.
=> insert into test.test (testdecol) values ('<span style="color:red">Ça fonctionne!</span>');

INSERT 0 1


'''''SELECT'''''

Sélection depuis une table.
=> SELECT * from test.test;

testdecol
-----------
<span style="color:red">Ça fonctionne!</span>
(1 ligne)


'''''Déconnexion'''''

On se déconnecte de PostgreSQL.
<nowiki>=> </nowiki>\q


L'invite redevient <code>$</code> et on retourne à l'usager root.
$ exit

Nous sommes revenu à l'usager root et son invite est toujours <code>#</code>.
# whoami

<span style="color:red">root</span>


<center><span style="font-size:125%">'''PostgreSQL-10.5 fonctionne correctement.'''</span></center>


= Configuration finale de PostgreSQL =

=== MD5 ===
Maintenant, il nous faut configurer PostgreSQL pour qu'il accepte les connexions avec mots de passe chiffrés MD5 pour être ainsi compatible avec les modules Python.

En tant qu'usager <span style="color:red">root</span>, on remplace <code>ident</code> par <code>md5</code> dans le fichier <code>pg_hba.conf</code>.
<nowiki># </nowiki>sed -i "/^host/s/ident/md5/g" /var/lib/pgsql/10/data/pg_hba.conf

On vérifie.
# cat /var/lib/pgsql/10/data/pg_hba.conf | grep md5

# METHOD can be "trust", "reject", "md5", "password", "scram-sha-256",
# Note that "password" sends passwords in clear text; "md5" or
host all all 127.0.0.1/32 <span style="color:red">md5</span>
host all all ::1/128 <span style="color:red">md5</span>
host replication all 127.0.0.1/32 <span style="color:red">md5</span>
host replication all ::1/128 <span style="color:red">md5</span>


=== Création de l'usager odoo dans PostgreSQL ===
[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;On peut choisir le mot de passe qu'on veut mais, l'important est de le mémoriser. De plus, <u>il est préférable qu'il réponde aux normes de SME pour les mots de passe</u>.

<u>Pour notre démonstration seulement</u>, on déroge aux normes de SME et on choisit "fghtbgh" qui est le mot de passe préféré du fameux Général Toto.
# echo -e "<span style="color:red">fghtbgh</span>\n<span style="color:red">fghtbgh</span>\n" | <span style="color:blue">su - postgres</span> -c "createuser --createdb --username postgres --no-createrole --no-superuser --pwprompt odoo"

Le mot de passe a été donné à l'intérieur de la commande.<br>
L'usager odoo a été créé dans PostgreSQL par le super-utilisateur ''postgres'' &nbsp;&nbsp;<code><span style="color:blue">su - postgres</span></code>&nbsp;&nbsp;et non dans le Serveur SME.


=== Sécurité ===
''Référence'': [https://www.odoo.com/documentation/11.0/setup/deploy.html https://www.odoo.com/documentation/11.0/setup/deploy.html].

'''''Sécurité de base'''''

Pour commencer, gardez à l'esprit que la sécurisation d'un système d'information est un processus continu et non pas une opération ponctuelle. A tout moment, vous ne serez pas plus sécurisé que le maillon le plus faible de votre environnement.

* Alors, s'il vous plaît, ne prenez pas ce paragraphe comme la liste ultime des mesures qui préviendront tous les problèmes de sécurité. Il est seulement conçu comme un résumé des premières mesures importantes que vous devriez être certain d'inclure dans votre plan d'action de sécurité. Le reste proviendra des meilleures pratiques de sécurité pour votre système d'exploitation/distribution de même que des meilleures pratiques en termes d'utilisateurs, mot de passe, gestion du contrôle d'accès, etc.
* Lors du déploiement d'un serveur connecté à l'Internet, veillez à prendre en compte les sujets suivants relatifs à la sécurité:
* Définissez toujours un mot de passe administrateur ''(super-utilisateur)'' robuste et restreignez l'accès aux pages de gestion de base de données dès que le système est configuré. Voir: Sécurité du gestionnaire de base de données au prochain paragraphe.
* Choisissez des login uniques et des mots de passe robustes pour tous les comptes d'administrateur sur toutes les bases de données. N'utilisez pas 'admin' comme identifiant. N'utilisez pas ces login pour les opérations quotidiennes mais, uniquement pour contrôler/gérer l'installation. N'utilisez jamais de mot de passe par défaut comme admin/admin, même pour les bases de données de test.
* Utilisez les filtres de base de données appropriés ''(--db-filter)'' pour restreindre la visibilité de vos bases de données en fonction du nom d'hôte. Vous pouvez également utiliser -d pour fournir votre propre liste ''(séparée par des virgules)'' de bases de données disponibles à filtrer, au lieu de laisser le système les récupérer à partir de l'arrière-plan de la base de données
* Une fois que vos paramètres db_name et db_filter sont configurés et ne correspondent qu'à une seule base de données par nom d'hôte, vous devez définir l'option de configuration list_db à False pour empêcher l'affichage complet des bases de données et bloquer l'accès aux écrans de gestion de BD. ''(Ce paramètre est également présenté comme option de ligne de commande: --no-database-list.'')
* Assurez-vous que l'utilisateur PostgreSQL ''(--db_user)'' n'est pas un super-utilisateur et que vos bases de données appartiennent à un utilisateur différent. Par exemple, elles pourraient être la propriété du super-utilisateur postgres si vous utilisez un utilisateur db_user non privilégié.
* Maintenez les installations à jour en installant régulièrement les dernières versions, soit via GitHub, soit en téléchargeant la dernière version de https://www.odoo.com/page/download ou http://nightly.odoo.com.
* Configurez votre serveur en mode multiprocessus1 avec des limites adaptées à votre utilisation habituelle ''(mémoire/CPU/délais d'attente)''. Voir Builtin server sur la page de référence.
* Exécutez Odoo derrière un serveur Web fournissant une connexion HTTPS avec Certificat SSL valide, afin d'empêcher l'écoute clandestine des communications, en texte clair. De nos jours, les Certificats SSL ne sont plus aussi dispendieux qu'autrefois et, de nombreuses options gratuites existent ''(Let's Encrypt - voir: https://www.micronator.org/affaires/produit/micronator-101-cahier-4certificat-lets-encrypt/)''.
* Configurez le mandataire ''(proxy)'' Web pour limiter la taille des demandes, définissez des délais d'attente appropriés puis, activez le mode du mandataire. Voir HTTPS server sur la page de référence.
* Si vous devez autoriser l'accès SSH à distance à vos serveurs, veillez à définir un mot de passe robuste pour tous les comptes et non pas seulement pour root.
* Il est fortement recommandé de désactiver complètement l'authentification par mot de passe et d'autoriser uniquement l'authentification par clé publique. Envisagez également de restreindre l'accès via un VPN, en autorisant uniquement les adresses IP approuvées dans le pare-feu et/ou en installant un système de détection d'attaque de force brute tel que Fail2ban ou équivalent. ''(Voir: https://www.micronator.org/affaires/produit/sme-9-x8-x-fail2ban/.)''
* Dans la mesure du possible, hébergez vos instances de démo/test sur des machines différentes de celles de production et leur appliquer les mêmes précautions de sécurité que celles pour les serveurs en production.
* Si vous hébergez plusieurs clients, isolez les données des clients et leurs fichiers les uns des autres en utilisant des conteneurs ou des techniques appropriées de "jail".
* Configurez les sauvegardes quotidiennes de vos bases de données/fichiers et copiez-les sur un serveur d'archivage distant qui n'est pas accessible depuis le serveur lui-même.


'''''Sécurité du gestionnaire des bases de données'''''

Sur la page de référence, le paragraphe ''Configuring Odoo'' mentionne le paramètre&nbsp;&nbsp;<code>admin_passwd</code>.
"Les écrans de gestion de base de données sont protégés par le paramètre admin_passwd. Ce paramètre ne peut être défini qu'à l'aide de fichiers de configuration et il est toujours vérifié avant d'effectuer des modifications sur une base de données. Il doit être défini sur une valeur générée aléatoirement pour s'assurer que les tiers ne peuvent pas utiliser cette interface."
Ce paramètre est utilisé sur tous les écrans de gestion de base de données ''(créer, supprimer, vider ou restaurer des bases de données)''.

Si les écrans de gestion ne doivent pas être accessibles du tout, vous devez définir l'option de configuration list_db à False pour bloquer l'accès à tous les écrans de sélection et de gestion de bases de données. Il faut absolument vous assurer de configurer un paramètre db_name approprié ''(et éventuellement aussi db_filter)'' afin que le système puisse déterminer la base de données cible pour chaque requête sinon, les utilisateurs seront bloqués car, ils ne seront pas autorisés à choisir eux-mêmes la base de données.

Si les écrans de gestion ne doivent être accessibles qu'à partir d'un ensemble de machines sélectionnées, utilisez les fonctions du serveur mandataire pour bloquer l'accès à toutes les routes commençant par /web/database sauf (peut-être) /web/database/selector qui affiche l'écran de sélection de la BD.

Si l'écran de gestion de la base de données doit toujours demeurer accessible, le paramètre admin_passwd doit être modifié par rapport à l'admin par défaut: ce mot de passe est vérifié avant d'autoriser les opérations de modification de la BD.

Il devrait être stocké en toute sécurité et être généré de manière aléatoire.

Exemple qui générera une chaîne imprimable pseudo-aléatoire de 32 caractères:

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
| python -c 'import base64, os; print(base64.b64encode(os.urandom(24)))'<br>
|}


<center><span style="font-size:125%">'''PostgreSQL est parfaitement fonctionnel et prêt à recevoir les requêtes d'Odoo.'''</span></center>


= Collection RH-Python36 =

Les développeurs de RedHat ont pensé qu'un inconvénient avec leurs versions de Python, PHP, etc... allait survenir tôt ou tard et ont écrit les paquets des Collections.

Nous allons installer la Collection RH-Python36 pour pouvoir utiliser la version Python-3.6 qui est une version plus récente que celle installée par défaut avec le Serveur SME-9.2 ''(Python 2.6.6)''.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Toutes les Collections Centos-6.10 x86 ou 64 se trouvent à l'URL: http://mirror.centos.org/centos/6/sclo/x86_64/rh/


=== Dépôt centos-sclo-rh ===

Pour installer un logiciel, il faut indiquer à yum de quel URL il doit le télécharger. Pour ce faire, il faut configurer une description du dépôt de logiciels et y décrire la source du téléchargement.

'''''Description du dépôt de logiciels sous format SME'''''

On décrit un dépôt '''centos-sclo-rh''' au format SME et on l'ajoute à la base de données des dépôts de SME-9.2.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Porter une attention particulière aux: ['], [\], et [:///].

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.

/sbin/e-smith/db yum_repositories set centos-sclo-rh repository <span style="color:red">\</span>
Name 'Centos - RH Software Collections' <span style="color:red">\</span>
BaseURL 'http://mirror.centos.org/centos/6/sclo/x86_64/rh/' <span style="color:red">\</span>
EnableGroups no <span style="color:red">\</span>
GPGCheck yes <span style="color:red">\</span>
GPGKey file:///etc/pki/rpm-gpg/RPM-GPG-KEY-CentOS-6 <span style="color:red">\</span>
Visible no <span style="color:red">\</span>
status disabled

On signale la modification.
# signal-event yum-modify

[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;Attendre 20-30 secondes pour que yum ait terminé sa mise à jour.


=== Installation de la Collection RH-Python36 ===

[[Image:0000-Odoo-11-Depot-RH-Python.png|top|right|350px|border]]
À l'URL: http://mirror.centos.org/centos/6/sclo/x86_64/rh/, la dernière version disponible pour CentOS-6.10, donc pour SME-9.2, est RP-Python36.

On lance l'installation.
# yum install -y --enablerepo=centos-sclo-rh rh-python36*

Modules complémentaires chargés : fastestmirror, smeserver
...
Résolution des dépendances
...
Dépendances résolues
...
Résumé de la transaction
==========================================================
Installation de 66 paquet(s)

Taille totale des téléchargements : 77 M
Taille d'installation : 346 M
...
Installé:
rh-python36.x86_64 0:2.0-1.el6
...
Dépendance(s) installée(s) :
atlas.x86_64 0:3.8.4-2.el6
...
Terminé !

Une fois la Collection RH-Python36 installée, on peut vérifier sa présence sur le serveur.
# scl -l

httpd24
<span style="color:red">rh-python36</span>

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;La collection http24 est incluse dans l'installation de la collection RH-Python36.


'''''Vérification de la version Python de la Collection RH-Python36'''''

Le chemin de <code>python</code> de la collection est: <code>/opt/rh/rh-python36/root/usr/bin/python</code>.
# ls -als /opt/rh/rh-python36/root/usr/bin/python

0 lrwxrwxrwx 1 root root 7 31 août 22:30 /opt/rh/rh-python36/root/usr/bin/python -> python3

On affiche la version Python de la Collection RH-Python36.
# /opt/rh/rh-python36/root/usr/bin/python --version

Python 3.6.3


=== Activation de l'environnement RH-Python36 au démarrage ===

''Référence'': http://appdev.oit.umn.edu/2015/02/11/scl/.

Pour activer de manière permanente l'environnement '''scl python36''' à la reconnexion ou au ''(re'')démarrage, on ajoute un script personnalisé appelé <code>activer-rh-python36.sh</code> dans le répertoire <code>/etc/profile.d/</code>.

On crée le script et on y ajoute son contenu avec la commande ci-dessous.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /etc/profile.d/activer-rh-python36.sh <<'EOT'
#!/bin/bash
source /opt/rh/rh-python36/enable
<nowiki>if [[ "$X_SCLS" != *rh-python36* ]]; then</nowiki>
<nowiki>src="`scl enable rh-python36 'echo $X_SCLS'`"</nowiki>
<nowiki>pkgs=(${src// / })</nowiki>
<nowiki>uniq=($(printf "%s\n" "${pkgs[@]}" | sort -u));</nowiki>
<nowiki>export X_SCLS="${uniq[@]}"</nowiki>
fi
EOT

On rend le script exécutable.
# chmod +x /etc/profile.d/activer-rh-python36.sh

On vérifie.
# ls -ls /etc/profile.d/activer-rh-python36.sh

4 -rw<span style="color:red">x</span>r-<span style="color:red">x</span>r-<span style="color:red">x</span> 1 root root 231 31 août 22:37 /etc/profile.d/activer-rh-python36.sh

Ce script prendra effet après une déconnexion/reconnexion ou un réamorçage du serveur.


'''''Vérification'''''

[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;Le moyen le plus simple pour la vérification est de vous déconnecter de la console et de vous reconnecter.

On se déconnecte, on se reconnecte et on vérifie.
# which python

/opt/rh/rh-python36/root/usr/bin/python

# python --version

<span style="color:red">Python 3.6.3</span>


<center><span style="font-size:125%">'''La Collection RH-Python36 est fonctionnelle.'''</span></center>


= Prérequis pour Odoo =

Odoo-11 requière un assez grand nombre de dépendances avant d'être installé.

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Toutes ces dépendances sont installées en tant qu'usager <span style="color:red">root</span>.


=== Logiciels généraux ===

Le compilateur '''''gcc''''' est nécessaire lors de l'installation de certains prérequis qui doivent être compiler avant leur installation. Comme la présence de gcc sur un serveur est un bris majeur de sécurité, une fois l'installation d'Odoo terminée, on le désinstallera et on fera de même de sa dépendance '''''cpp'''''. Voir le paragraphe: [[#Désinstallation des compilateurs gcc et cpp|Désinstallation des compilateurs gcc et cpp]].

'''''Installation'''''

# yum install -y git gcc zlib-devel bzip2-devel openssl-devel <span style="color:red">\</span>
ncurses-devel sqlite-devel readline-devel tk-devel <span style="color:red">\</span>
libffi-devel libxslt libxslt-devel libxml2-devel <span style="color:red">\</span>
openldap-devel libjpeg-turbo-devel openjpeg-devel <span style="color:red">\</span>
libtiff-devel libXext libz.so.1 xorg-x11-fonts-Type1

...
Installation de 50 paquet(s)
Taille totale des téléchargements : 36 M
Taille d'installation : 100 M
...


=== Logiciels du dépôt EPEL ===
Configuration pour le dépôt de logiciels EPEL.

Prendre tout le contenu de l'encadré pour la commande.
db yum_repositories set epel repository <span style="color:red">\</span>
Name 'Epel - EL6' <span style="color:red">\</span>
BaseUrl 'http://download.fedoraproject.org/pub/epel/6/$basearch' <span style="color:red">\</span>
MirrorList 'http://mirrors.fedoraproject.org/mirrorlist?repo=epel-6&arch=$basearch' <span style="color:red">\</span>
EnableGroups no <span style="color:red">\</span>
GPGCheck yes <span style="color:red">\</span>
GPGKey http://dl.fedoraproject.org/pub/epel/RPM-GPG-KEY-EPEL <span style="color:red">\</span>
Visible no <span style="color:red">\</span>
status disabled

On signale les changements à yum.
<nowiki># signal-event yum-modify</nowiki>

Attendre 20-30 secondes pour que yum ait le temps d'accomplir sa mise à jour.


'''''cabextract'''''

L'utilitaire <code>cabextract</code> est un logiciel pour l'extraction des fichiers CAB de Microsoft ''(.cab)'' ou tout fichier binaire qui incorpore un fichier CAB ''(fréquemment trouvé dans les fichiers .exe)''.
<nowiki># yum install -y --enablerepo=epel cabextract</nowiki>

Modules complémentaires chargés : fastestmirror, smeserver
...
Installation de 2 paquet(s)

Taille totale des téléchargements : 110 k
Taille d'installation : 248 k
...
Installé:
cabextract.x86_64 0:1.5-1.el6

Dépendance(s) installée(s) :
<span style="color:red">libmspack.x86_64 0:0.6-0.1.alpha.el6</span>

Terminé !

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;La dépendance qui a été installée, <code>libmspack.x86_64 0:0.6-0.1.alpha.el6</code>, contient les polices de base de Microsoft afin qu'elles soient disponibles lorsque vous générez des rapports dans Odoo.


'''''npm'''''

''Référence'': [https://fr.wikipedia.org/wiki/Npm https://fr.wikipedia.org/wiki/Npm].

L'utilitaire <code>npm</code> est le gestionnaire officiel des paquets de '''Node.js'''. Depuis la version 0.6.3 de Node.js, npm fait partie de l'environnement et est donc automatiquement installé par défaut. L'utilitaire npm fonctionne avec un terminal et gère les dépendances pour les applications. Il permet également d'installer les applications Node.js disponibles dans le dépôt npm.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;<u>Il ne faut pas installer la dernière version</u> car, elle génère une <span style="color:red">erreur de style</span> dûe à l'utilitaire <code>lssc</code> qui n'est pas reconnue.

{| class="wikitable" style="width: 100%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<span style="color:red">'''Style error'''</span>
The style compilation failed, see the error below. Your recent actions may be the cause, please try reverting the changes you made.<br>
(b'', b'The "--no-js" argument is deprecated, as inline JavaScript is disabled by default. Use "--js" to enable inline JavaScript (not recommended).<br>
[TypeError: Object function Object() { [native code] } has no method 'assign']')This error occured while compiling the bundle 'web.assets_common' containing:<br>
<nowiki> - /web/static/lib/bootstrap/less/variables.less</nowiki><br>
...
|}

[[Image:0000-Odoo-11-NPM.png|top|right|350px|border]]
On installe plutôt '''Node.js-10.5.0''' qui installera aussi npm.

Les versions disponibles se trouvent à l'URL: https://nodejs.org/download/release/








On crée un répertoire de travail.
# mkdir /temp

On s'y rend.
# cd /temp/

On télécharge la version '''Node.js-10.5.0'''.
# wget https://nodejs.org/download/release/v10.5.0/node-v10.5.0-linux-x64.tar.gz

--2018-08-31 22:53:58-- https://nodejs.org/download/release/v10.5.0/node-v10.5.0-linux-x64.tar.gz
Résolution de nodejs.org... 104.20.23.46, 104.20.22.46, 2400:cb00:2048:1::6814:172e, ...
Connexion vers nodejs.org|104.20.23.46|:443...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 18362640 (18M) [application/gzip]
Sauvegarde en : «node-v10.5.0-linux-x64.tar.gz»

100%[==================================================>] 18 362 640 1,80M/s ds 9,7s

2018-08-31 22:54:08 (1,80 MB/s) - «node-v10.5.0-linux-x64.tar.gz» sauvegardé [18362640/18362640]

On extraie vers le répertoire <code>/usr</code>.
# tar -C /usr --strip-components 1 -xzf node-v10.5.0-linux-x64.tar.gz

On vérifie.
# which npm

<span style="color:red">/usr/bin/npm</span>

# npm --version

<span style="color:red">6.1.0</span>


=== Logiciels spéciaux ===
'''''less'''''

''Référence'': https://fr.wikipedia.org/wiki/Less_(langage).

L'utilitaire <code>less</code> est un langage dynamique de génération de CSS conçu par Alexis Sellier. Initialement inspiré par Sass, il l'influence à son tour avec l'apparition de la syntaxe SCSS par laquelle Sass reprend des éléments de la syntaxe CSS classique. Le principe de Less est en effet de ne pas rompre avec la syntaxe CSS: tout code CSS est aussi du code Less valide et sémantiquement équivalent. Less y ajoute notamment les mécanismes suivants: variables, imbrication, mixins, opérateurs et fonctions.


'''''less-plugin-clean-css'''''

''Référence'': https://github.com/less/less-plugin-clean-css.

Cet utilitaire compresse la sortie css de less en utilisant <code>clean-css</code>.

[[Image:003-BPC-IconeAstuce.png|25px]]&nbsp;&nbsp;Pour éviter les erreurs de certificats SSL et de téléchargement.
# npm config set strict-ssl false

On installe ces deux logiciels.
# npm install -g less less-plugin-clean-css

/usr/local/bin/lessc -> /usr/local/lib/node_modules/less/bin/lessc
+ less-plugin-clean-css@1.5.1
+ less@3.8.1
added 65 packages from 127 contributors in 4.786s

On vérifie.
# which less

<span style="color:red">/usr/bin/less</span>

# less --version

<span style="color:red">less 436</span>
Copyright (C) 1984-2009 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less

# which lessc

<span style="color:red">/usr/bin/lessc</span>

# lessc --version

<span style="color:red">lessc 3.8.1</span> (Less Compiler) [JavaScript]


'''''wkhtmltox'''''

''Référence'': https://wiki.contribs.org/Odoo.

Les ''wkhtmltox'' disponibles à partir de CentOS ou du dépôt EPEL sont d'une version inférieure à celle requise par Odoo. De plus, ces versions ne convertissent pas les en-têtes et les pieds de page. Il est fortement recommandé d'obtenir la dernière version stable directement de la source.


'''Dépendances pour wkhtmltopdf'''

''Référence'': https://wkhtmltopdf.org/.

<code>wkhtmltopdf</code> et <code>wkhtmltoimage</code> sont des outils de ligne de commande LIBRE ''(LGPLv3)'' pour convertir du code HTML en PDF ou en divers autres formats d'image en utilisant le moteur de rendu Qt WebKit. Ces outils fonctionnent entièrement "sans tête" ''(headless)'' et ne nécessitent pas de service d'écran ou d'affichage.

On installe les dépendances.
# yum install -y fontconfig libpng libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi

Modules complémentaires chargés : fastestmirror, smeserver
...
Résumé de la transaction
Installation de 1 paquet(s)
Taille totale des téléchargements : 2.8 M
Taille d'installation : 2.9 M
...
Installé:
xorg-x11-fonts-75dpi.noarch 0:7.2-11.el6

Terminé !


'''''Installation de wkhtmltox'''''

On se rend dans le répertoire de travail.
# cd /temp

On nettoie le répertoire /temp.
# rm -rf *

On se rend à l'Url: https://github.com/wkhtmltopdf/wkhtmltopdf/releases/.
[[Image:0000-Odoo-11-wkhtmltox.png|top|right|450px|border]]

On claque ''(clic droit)'' sur le fichier: '''wkhtmltox-0.12.4_linux-generic-amd64.tar.xz'''&nbsp;&nbsp;>&nbsp;&nbsp;'''Copier l'adresse du lien'''.


Dans le répertoire de travail on entre <code>wget</code> suivi d'un espace puis, on colle le lien copié ci-dessus.










On télécharge le fichier <code>tar.xz</code>.
# wget https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

--2018-08-31 23:05:16-- https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
Résolution de github.com... 192.30.253.113, 192.30.253.112
Connexion vers github.com|192.30.253.113|:443...connecté.
requête HTTP transmise, en attente de la réponse...302 Found
Emplacement: https://github-production-release-asset-2e65be.s3.amazonaws.com/271714/6b136718-52da-11e7-93f3-2b4ee2eccece?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20180901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20180901T030517Z&X-Amz-Expires=300&X-Amz-Signature=aa11f2fbbf9c4ab3bffdda49c5e1ea2322c8bcc87ebdcbdcc76904402dbedcb9&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dwkhtmltox-0.12.4_linux-generic-amd64.tar.xz&response-content-type=application%2Foctet-stream [suivant]
--2018-08-31 23:05:17-- https://github-production-release-asset-2e65be.s3.amazonaws.com/271714/6b136718-52da-11e7-93f3-2b4ee2eccece?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20180901%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20180901T030517Z&X-Amz-Expires=300&X-Amz-Signature=aa11f2fbbf9c4ab3bffdda49c5e1ea2322c8bcc87ebdcbdcc76904402dbedcb9&X-Amz-SignedHeaders=host&actor_id=0&response-content-disposition=attachment%3B%20filename%3Dwkhtmltox-0.12.4_linux-generic-amd64.tar.xz&response-content-type=application%2Foctet-stream
Résolution de github-production-release-asset-2e65be.s3.amazonaws.com... 52.216.96.235
Connexion vers github-production-release-asset-2e65be.s3.amazonaws.com|52.216.96.235|:443...connecté.
requête HTTP transmise, en attente de la réponse...200 OK
Longueur: 14541904 (14M) [application/octet-stream]
Sauvegarde en : «wkhtmltox-0.12.4_linux-generic-amd64.tar.xz»

100%[==================================================>] 14 541 904 1,80M/s ds 7,9s

2018-08-31 23:05:28 (1,75 MB/s) - «wkhtmltox-0.12.4_linux-generic-amd64.tar.xz» sauvegardé [14541904/14541904]

Une première extraction avec l'utilitaire <code>unxz</code>.
# unxz wkhtmltox-0.12.4_linux-generic-amd64.tar.xz

Une deuxième extraction avec <code>tar</code>.
# tar -xvf wkhtmltox-0.12.4_linux-generic-amd64.tar

...
wkhtmltox/include/wkhtmltox/dllend.inc
wkhtmltox/bin/
<span style="color:red">wkhtmltox/bin/wkhtmltoimage</span>
<span style="color:red">wkhtmltox/bin/wkhtmltopdf</span>
wkhtmltox/share/
...

On déplace le contenu du répertoire <code>wkhtmltox/bin/</code> dans <code>/usr/bin/</code> afin de le rendre disponible à tous les utilisateurs du Serveur SME.
# mv wkhtmltox/bin/* /usr/bin/

On vérifie.
# ls -als /usr/bin/wkhtmlto*

38796 -rwxr-xr-x 1 1000 1000 39723880 22 nov. 2016 /usr/bin/<span style="color:red">wkhtmltoimage</span>
38872 -rwxr-xr-x 1 1000 1000 39804584 22 nov. 2016 /usr/bin/<span style="color:red">wkhtmltopdf</span>

On supprime tout dans le répertoire <code>/temp</code>.
rm -rf /temp/*

On retourne dans le répertoire personnel de root.
# cd


'''''pychart'''''
[[Image:0000-Odoo-11-PyChart.png|top|right|450px|border]]
PyChart est une bibliothèque Python pour la création de PDF, PNG ou graphiques SVG en PostScript encapsulé de haute qualité. Il prend actuellement en charge les traçage linéaires, les graphiques circulaires et par barres. Parce qu'il est basé sur Python, vous pouvez utiliser le pouvoir de scriptage de Python.


On copie le lien depuis: https://centos.pkgs.org/6/centos-i386/pychart-1.39-10.1.el6.noarch.rpm.html










On installation pychart-1.39-10.1.
# rpm -Uvh http://mirror.centos.org/centos/6/os/i386/Packages/pychart-1.39-10.1.el6.noarch.rpm

Récupération de http://mirror.centos.org/centos/6/os/i386/Packages/pychart-1.39-10.1.el6.noarch.rpm
Préparation... ########################################### [100%]
1:pychart ########################################### [100%]

=== Vérifications ===

'''''NPM'''''
# which npm

<span style="color:red">/usr/bin/npm</span>

# npm --version

<span style="color:red">6.1.0</span>


'''''LESS'''''
# which less

<span style="color:red">/usr/bin/less</span>

# less --version

<span style="color:red">less 436</span>
Copyright (C) 1984-2009 Mark Nudelman

less comes with NO WARRANTY, to the extent permitted by law.
For information about the terms of redistribution,
see the file named README in the less distribution.
Homepage: http://www.greenwoodsoftware.com/less


'''''LESSC'''''
# which lessc

<span style="color:red">/usr/bin/lessc</span>

# lessc --version

<span style="color:red">lessc 3.8.1</span> (Less Compiler) [JavaScript]


'''''Signalisation des changements'''''

Nous avons fait plusieurs changements, il est temps de les signaler avec les commandes traditionnelles.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Peut prendre un certain temps, être patient!
# signal-event post-upgrade; signal-event reboot


<center><span style="font-size:125%">'''Tous les prérequis pour Odoo sont remplis, on est prêt pour l'installation.'''</span></center>


= Installation d'Odoo =
=== Usager odoo ===
On a déjà crée l'usager odoo, changer son mot de passe et son shell.

[[Image:004-BPC-IconeNoteAPT.png|30px]]&nbsp;&nbsp;Pour cette contribution, on présume que le mot de passe de l'usager odoo est: <span style="color:red">fghtbgh</span>; le mot de passe qu'utilise habituellement le fameux Général Toto.

On vérifie le shell de l'usager odoo.
# cat /etc/passwd | grep odoo

odoo:x:5001:5001:Utilisateur Environnement virtuel:/home/e-smith/files/users/odoo:<span style="color:red">/bin/bash</span>

=== Répertoire racine d'Odoo ===
On crée le répertoire qui contiendra la suite des logiciels Odoo dans le répertoire racine de l'i-bay Primary.
<nowiki># mkdir /home/e-smith/files/ibays/Primary/html/odoo</nowiki>

On change le propriétaire et le groupe de ce répertoire.
# chown odoo:odoo /home/e-smith/files/ibays/Primary/html/odoo

=== Installation avec git ===
On se substitue à l'usager <span style="color:red">odoo</span>.
<nowiki># su - odoo</nowiki>

L'invite va passer de <span style="color:red">#</span> à <span style="color:red">$</span> car, '''odoo''' est un usager standard de SME.


On se rend dans le répertoire racine de l'i-bay Primary.

$ cd /home/e-smith/files/ibays/Primary/html/

On télécharge la branche 11.0 d'Odoo.
$ git clone https://github.com/odoo/odoo.git --branch 11.0 --depth=1

Initialized empty Git repository in /home/e-smith/files/ibays/Primary/html/odoo/.git/
remote: Counting objects: 418372, done.
remote: Compressing objects: 100% (204776/204776), done.
remote: Total 418372 (delta 320772), reused 265639 (delta 209054), pack-reused 0
Receiving objects: 100% (418372/418372), <span style="color:red">667.04 MiB</span> | 1.80 MiB/s, done.
Resolving deltas: 100% (320772/320772), done.

On revient à l'usager root.
$ exit

=== requirements.txt ===
[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Obligatoirement en tant qu'usager <span style="color:red">root</span>.
<nowiki># cd /home/e-smith/files/ibays/Primary/html/odoo/</nowiki>

Avec l'utilitaire <code>pip</code>, on installe tous les prérequis contenus dans le fichier <code>requirements.txt</code>.
<nowiki># /opt/rh/rh-python36/root/usr/bin/pip install -r requirements.txt</nowiki>

...
Successfully installed Babel-2.3.4 Jinja2-2.8.1 Mako-1.0.4 MarkupSafe-0.23 Pillow-4.0.0 PyPDF2-1.26.0 Werkzeug-0.11.15 XlsxWriter-0.9.3 beautifulsoup4-4.6.3 decorator-4.0.10 docutils-0.12 ebaysdk-2.1.5 feedparser-5.2.1 gevent-1.1.2 greenlet-0.4.10 html2text-2016.9.19 lxml-3.7.1 mock-2.0.0 num2words-0.5.4 ofxparse-0.16 olefile-0.45.1 passlib-1.6.5 pbr-4.2.0 psutil-4.3.1 psycopg2-2.7.3.1 pydot-1.2.3 pyldap-2.4.28 pyparsing-2.1.10 pyserial-3.1.1 python-dateutil-2.5.3 python-stdnum-1.9 pytz-2016.7 pyusb-1.0.0 qrcode-5.3 reportlab-3.3.0 requests-2.11.1 suds-jurko-0.6 vatnumber-1.2 vobject-0.9.3 xlrd-1.0.0 xlwt-1.3.0
You are using pip version 9.0.1, however version 18.0 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.

On retourne dans le répertoire personnel de root.
<nowiki># cd</nowiki>

=== Propriétaire, groupe et droits ===
[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;<u>Après une installation quelconque</u>, on s'assure que le propriétaire et le groupe sont '''odoo:odoo''' en changeant <u>'''R'''</u>écursivement le propriétaire et le groupe dans tout le répertoire d'Odoo.
# chown -R odoo:odoo /home/e-smith/files/ibays/Primary/html/odoo

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;On enlève <u>'''R'''</u>écursivement tous les droits que pourrait avoir "other" dans tout le répertoire d'Odoo.
# chmod -R o-rwx /home/e-smith/files/ibays/Primary/html/odoo

=== Création des répertoires PIDFILE et LOGFILE ===
Répertoires à créer: <code>PIDFILE=/var/run/odoo/odoo-server.pid</code> et <code>LOGFILE=/var/log/odoo/odoo-server.log</code>.

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;On crée les répertoires en prenant tout le contenu de l'encadré pour la commande.
DIR="/var/run/odoo /var/log/odoo"
for NAME in $DIR
do
if [ ! -d $NAME ]; then
mkdir $NAME
chown odoo.odoo $NAME
chmod 770 $NAME
fi
done

=== logrotation ===

Nous autorisons la rotation des journaux d'Odoo de telle sorte qu'ils seront gérés de la même manière que ceux de toutes les autres applications du Serveur SME.
[[Image:0000-Odoo-Journal-odoo-server.png|top|right|500px|border]]
Vous pourrez vérifier les fichiers journaux d'Odoo dans le gestionnaire Server Manager: '''Visualisation des fichiers journaux&nbsp;&nbsp;>&nbsp;&nbsp;odoo/odoo-server.log'''.



[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /etc/logrotate.d/odoo-server << EOF
/var/log/odoo/odoo-server.log {
<nowiki># Fichier de logrotate pour /var/log/odoo/odoo-server.log</nowiki>
<nowiki>#</nowiki>

<nowiki># Si le fichier n'existe pas, pas de problème</nowiki>
missingok

<nowiki># Rotation quotidienne</nowiki>
daily

<nowiki># Grandeur maximale de 100k</nowiki>
maxsize 100k

<nowiki># Ne conserver que 21 fichiers de log</nowiki>
rotate 21

<nowiki># Ne pas faire de rotation si le fichier est vide.</nowiki>
notifempty
}
EOF

=== Fichier de configuration: /etc/odoo-server.conf ===
Pour débuter, nous activons <code>log_handler = :DEBUG</code> pour voir tous les messages d'Odoo dans le fichier journal. Lorsque tout fonctionnera correctement, on remettra la valeur par défaut.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /etc/odoo-server.conf <<'EOT'
<nowiki>[options]</nowiki>
; Ceci est le mot de passe qui autorise les oprérations sur la base de données:
<span style="color:red">admin_passwd = fghtbgh</span>

; OPTIONS DE LA BASE DE DONNÉES>
db_host = localhost
db_port = 5432
db_user = odoo
<span style="color:red">db_password = fghtbgh</span>

; PARAMÈTRES DIVERS
addons_path = /home/e-smith/files/ibays/Primary/html/odoo/addons
load = web
timezone = America/Montreal
without-demo=all
no-xmlrpc = True
no-xmlrpcs = True
no-netrpc = True

; PARAMÈTRES DES JOURNAUX
logfile = /var/log/odoo/odoo-server.log

; - Ceci est le défault
;log_handler = werkzeug:WARNING

; - Pour voir tous les messageS d'Odoo, on active à :DEBUG
<span style="color:blue">log_handler = :DEBUG</span>

;log_level = warn
no-logrotate = True
EOT

[[Image:Arret.png|left|caption|32px]]Faille de sécurité car, ce fichier contient les mots de passe du super-utilisateur et celui de la BD; ils sont lisibles par "other" i.e. tout le monde.


On vérifie les droits du fichier.
<nowiki># ls -als /etc/odoo-server.conf</nowiki>

4 -rw-r--<span style="color:red">'''r'''</span>-- 1 root root 664 31 août 23:38 /etc/odoo-server.conf

On rend le script exécutable et on enlève tous les droits à "other".
# chmod 550 /etc/odoo-server.conf

On change le propriétaire et le groupe pour odoo:odoo
# chown odoo:odoo /etc/odoo-server.conf

On vérifie.
# ls -ls /etc/odoo-server.conf

4 -<span style="color:red">'''r-xr-x---'''</span> 1 <span style="color:red">'''odoo odoo'''</span> 665 31 août 23:38 /etc/odoo-server.conf

=== Fichier /etc/rc.d/init.d/odoo ===
Pour lancer, arrêter, demander le statut... du démon odoo.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /etc/rc.d/init.d/odoo <<'EOT'
#!/bin/bash
# odoo-server - Ce script s'occupe du démarrage et de l'arrêt d'Odoo
# description: Odoo server
# pidfile: /var/run/odoo-server.pid
# config: /etc/odoo-server.conf

### BEGIN INIT INFO
# Provides: odoo-server
# Required-Start: postgresql
# Required-Stop: postgresql
# Should-Start: $network harddrake
# Default-Start: 345
# Short-Description: Démarre le serveur Odoo.
# Description: Ce script démarre le serveur Odoo.
### END INIT INFO

# Source function library.
. /etc/rc.d/init.d/functions

PIDFILE=/var/run/odoo/odoo-server.pid
LOCKFILE=/var/lock/subsys/odoo-server
LOGFILE=/var/log/odoo/odoo-server.log

OPTS="--pidfile=$PIDFILE --logfile=$LOGFILE"

prog="odoo-server"
desc="Odoo Server Daemon"

# Vérifie si le fichier de configuration odoo-server.conf est présent et si oui, il est utilisé
if [ -f /etc/odoo-server.conf ]; then
OPTS="$OPTS -c /etc/odoo-server.conf"
fi
# Source function library
if [ -f /etc/init.d/functions ] ; then
. /etc/init.d/functions
elif [ -f /etc/rc.d/init.d/functions ] ; then
. /etc/rc.d/init.d/functions
else
exit 0
fi

start() {
echo -n $"Starting $desc ($prog): "
<span style="color:red">daemon --user odoo --check odoo-server \
"/opt/rh/rh-python36/root/usr/bin/python /home/e-smith/files/ibays/Primary/html/odoo/odoo-bin \
-c /etc/odoo-server.conf \
--pidfile=$PIDFILE \
--logfile=$LOGFILE &"</span>

RETVAL=$?
echo
[ $RETVAL -eq 0 ] && touch $LOCKFILE
return $RETVAL
}

stop() {
echo -n $"Stopping $desc ($prog): "
kill -TERM `cat $PIDFILE` > /dev/null 2>&1
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
rm -f $LOCKFILE

echo_success
echo
else
echo_failure
echo
fi
return $RETVAL
}

restart() {
stop
start
}

condrestart() {
[ -e $LOCKFILE ] && restart || :
}

status() {
if [ -f $PIDFILE ] ; then
checkpid `cat $PIDFILE`
RETVAL=$?
if [ $RETVAL -eq 0 ] ; then
echo $"$prog is running..."
else
echo $"$prog is stopped"
fi
else
echo $"$prog is stopped"
fi
return $RETVAL
}

case "$1" in
start)
start
<nowiki>;;</nowiki>

stop)
stop
<nowiki>;;</nowiki>

restart|reload)
restart
<nowiki>;;</nowiki>

condrestart)
condrestart
<nowiki>;;</nowiki>

status)
status
<nowiki>;;</nowiki>

probe)
exit 0
<nowiki>;;</nowiki>

<nowiki>*)</nowiki>
echo $"Usage: $0 {start|stop|status|restart|condrestart|reload}"
exit 1
esac
EOT

On rend le script exécutable.
<nowiki># chmod 550 /etc/rc.d/init.d/odoo</nowiki>

=== Démarrage ===
On veut qu'Odoo-11 se lance automatiquement à tous les amorçages du Serveur SME-9.2. On ajoute donc un lien vers <code>/etc/rc.d/init.d/odoo</code> dans le répertoire <code>/etc/rc.d/rc7.d</code>.
<nowiki>ln -s /etc/rc.d/init.d/odoo /etc/rc.d/rc7.d/S99odoo</nowiki>

=== Arrêt ===
On veut qu'Odoo-11 s'arrête automatiquement lorsque le Serveur SME-9.2 s'arrête. On ajoute donc un lien vers <code>/etc/rc.d/init.d/odoo</code> dans le répertoire <code>/etc/rc.d/rc6.d</code>.
<nowiki>ln -s /etc/rc.d/init.d/odoo /etc/rc.d/rc6.d/K95odoo</nowiki>

'''''Signalisation des changements'''''

Nous avons fait plusieurs changements, on signale ceux-ci de manière traditionnelle et on pourra en profiter pour vérifier l'arrêt et le redémarrage d'Odoo-11.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Peut prendre quelques temps avant de voir une réponse à ces commandes.
<nowiki># signal-event post-upgrade; signal-event reboot</nowiki>

Après le ré-amorçage, on se logue et on vérifie le statut d'Odoo.
<nowiki># /etc/init.d/odoo status</nowiki>

odoo-server <span style="color:red">est en cours d'exécution...</span>

== Finalisation de l'installation ==

<span style="font-size:125%">'''Accès à Odoo'''</span>

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Autoriser les témoins et activer JavaScript.

À l'aide d'un fureteur Internet, on se rend à la page de notre site Odoo en spécifiant le port <code>:8069</code>.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;PAS DE http<span style="color:red">s</span>:, SEULEMENT http://192.168.1.11:8069.

L'affichage de la page peut prendre un certain temps (quelques 10 secondes).


<span id="Création d'une nouvelle base de données"></span>
<span style="font-size:125%">'''Création d'une nouvelle base de données'''</span>

* '''''Master password:''''' le mot de passe, <code>db_password =</code> <span style="color:red">fghtbgh</span>, qu'on a spécifié dans le fichier de configuration <code>/etc/odoo-server.conf</code>.
* '''''Database name:''''' le nom de la base de données pour Odoo.
* '''''Email:''''' notre adresse courriel. On utilisera cette adresse pour se loguer en tant qu''''Administrateur d'Odoo'''.
* '''''Password:''''' le mot de passe pour l'Administrateur d'Odoo ''(usager spécifié ci-dessus dans le champ Email)''.
* '''''Language:''''' on choisit, dans le menu déroulant, la langue par défaut pour notre site.
* '''''Country:''''' Choisir le pays pour notre site.
* <big>☑</big> '''''Load demonstration data (Check this box to evaluate Odoo):''''' cocher si on veut installer des données fictives pour l'évaluation d'Odoo. ''<span style="color:red">(<u>Ne pas cocher pour un site en Production.</u>)</span>''

On clique '''Create Database''' pour créer la base de données pour notre société.

<center>
{| class="wikitable"
|-style="vertical-align:top;text-align: center;"
|[[Image:001-Finalisation.png|center|top|450px|border]]||



Après qu'on a cliqué '''Create Database''', Odoo manipule plusieurs fichiers.<br><br>

[[Image:004-BPC-IconeNoteAPT.png|30px]]&nbsp;&nbsp;L'attente de l'affichage de la page des '''Applications''' peut prendre un certain temps ''(quelques minutes)''.<br>

|}
</center>


<center><span style="color:red">'''†''' </span>À droite, en haut de la page, on voit qu'on est logué en tant qu'Administrator.</center>
[[Image:001-Page-Applications.png|top|center|700px|border]]


<center><span style="font-size:125%">'''Nous sommes prêt à utiliser Odoo.'''</span></center>


<span style="font-size:125%">'''Lien de redirection dans l'i-bay Primary'''</span>

{|style="border-spacing:0;"
|-style="vertical-align:top;"
|Si nous n'avons aucun site Web dans l'i-bay Primary et que nous spécifions seulement [http://192.168.1.11/ http://][http://192.168.1.11/ 192.168.1.11] sans spécifier le port 8069, nous verrons s'afficher le contenu du fichier par défaut, <code>index.htm</code>, contenu dans le répertoire <code>/home/e-smith/files/ibays/Primary/html</code>.
||[[Image:003-SME-Index.htm-par-defaut.png|center|top|400px|border]]
|}

Même si nous supprimons ce fichier et qu'il n'y ait aucun autre fichier <code>index.*</code> tel que <code>index.php</code>, le fichier <code>index.htm</code> sera recréé si nous exécutons les commandes <code>signal-event post-upgrade; signal-event reboot</code> ou, après une mise à jour du Serveur SME.

Contenu du répertoire après les commandes: <code>signal-event post-upgrade; signal-event reboot</code>.
<nowiki># ls -als /home/e-smith/files/ibays/Primary/html</nowiki>

total 16
4 drwxr-s--- 3 admin shared 4096 17 juin 22:01 .
4 drwxr-xr-x 6 root root 4096 17 juin 12:59 ..
4 -rw-r----- 1 <span style="color:red">admin shared</span> 202 20 nov. 2005 <span style="color:red">index.htm</span>
4 drwxr-sr-x 10 <span style="color:red">odoo odoo</span> 4096 17 juin 22:12 odoo

On pourrait créer une règle <code>iptables</code> qui redirigerait le port standard 80 vers le port 8069. Le problème avec un tel scénario est qu'on perdrait l'accès à notre site Internet standard qui pourrait être aussi hébergé sur le serveur.


'''''Redirection par le fichier index.htm'''''

On modifie le fichier <code>index.html</code>, dans le répertoire <code>Primary/html</code>, pour qu'il fasse une redirection HTML vers le port 8069.

On vérifie si nous sommes toujours l'usager root.
# whoami

<span style="color:red">root</span>

Ici, pour cette documentation, on utilise l'adresse IP de notre serveur mais, il faudra utiliser le vrai nom du domaine pour un serveur en Production.

On modifie le fichier <code>index.html</code>.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /home/e-smith/files/ibays/Primary/html/index.htm << EOF
<head>
<META http-EQUIV="Refresh" CONTENT="0; url=http://192.168.1.11:8069">
</head>
EOF

On ajuste le propriétaire et le groupe.
<nowiki># </nowiki>chown admin:shared /home/e-smith/files/ibays/Primary/html/index.htm


'''''Vérification de la redirection'''''

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur.

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;Il faut autoriser <code>java script</code> et les témoins ''(cookies)'' dans notre fureteur.
<center>
{| class="wikitable"
|- style="vertical-align:bottom;font-family: Courier New;"
|http://192.168.1.11 <span style="color:red">''(sans le port 8069)''</span>
||Comme on le voit ci-dessous, la redirection a eu lieu → http://192.168.1.11:8069/web/login
|- style="vertical-align:top;"
|[[Image:004-Redirection-A.png|center|top|300px|border]]
||[[Image:004-Redirection-B.png|center|top|600px|border]]
|}
</center>


On est automatiquement redirectionné vers la page de login car, la vidange de l'historique a aussi supprimé le témoin d'Odoo, il ne nous reconnaît plus et présente alors la page de login.


'''''Redirection dans le répertoire .../Primary/html/<u>odoo</u>'''''

Nous pourrions être tentés de faire le même genre de redirection HTML dans le répertoire racine d'Odoo qui est <code>/home/e-smith/files/ibays/Primary/html/<u>odoo</u></code> et ainsi accéder à notre site en spécifiant: http://192.168.1.11/odoo et être redirigé vers http://192.168.1.11:8069.

Malheureusement, la redirection dans un répertoire autre que <code>.../Primary/html/</code>. est impossible dûe au fait de l'utilisation de la directive <code>Indexes disabled</code> pour l'i-bay Primary.


'''Fichier de configuration /etc/odoo-server.conf'''

Maintenant que tout fonctionne correctement, on peut remettre le paramètre <code>log_handler</code> à sa valeur par défaut en dé-commentant la ligne <code>log_handler = werkzeug:WARNING</code> et en commentant la ligne <code>;log_handler = :DEBUG</code>.

On utilise vi ou Notepad++ pour éditer le fichier.
# vi /etc/odoo-server.conf

[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;Vu que le fichier n'a pas de droit d'écriture, lorsque root écrira les modifications, il devra utiliser <span style="color:red">w!</span> ''(w et !)''.

...
; - Ceci est le défault
<span style="color:red">log_handler = werkzeug:WARNING</span>

; - Pour voir tous les messageS d'Odoo, on active à :DEBUG
<span style="color:blue">;log_handler = :DEBUG</span>

;log_level = warn
no-logrotate = True
...

Nous avons changé un paramètre important, on redémarre le démon odoo.
# /etc/init.d/odoo restart

Arrêt de Odoo Server Daemon (odoo-server) : [ <span style="color:red">OK</span> ]
Démarrage de Odoo Server Daemon (odoo-server) : [ <span style="color:red">OK</span> ]

On vérifie les changements dans le fichiers <code>/etc/odoo-server.conf</code>.
<nowiki># cat /etc/odoo-server.conf | grep log_handler</nowiki>

<span style="color:red">log_handler = werkzeug:WARNING</span>
<span style="color:blue"><span style="color:red">;</span>log_handler = :DEBUG</span>


<span id="Désinstallation des compilateurs gcc et cpp"></span>
'''''Désinstallation des compilateurs gcc et cpp'''''

Avoir '''<code>gcc</code>''' installé sur un serveur est un risque majeur de sécurité vu qu'un pirate pourrait s'en servir pour compiler un logiciel malveillant. Il faut donc le désinstaller.

[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;Si, plus tard, nous avions encore besoin de gcc, il suffirait de l'installer à nouveau.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Le paquet gcc vient avec <code>cpp</code>.

Nous forçons la désinstallation de ces deux RPMs.
<nowiki># </nowiki>rpm -e <span style="color:red">--nodeps</span> gcc cpp

On vérifie cpp.
<nowiki># rpm -qa | grep cpp</nowiki>

La commande ne retourne rien, le compilateur cpp a été supprimé.

On vérifie gcc.
# rpm -qa | grep gcc

<span style="color:red">libgcc</span>-4.4.7-23.el6.x86_64

La librairie <span style="color:red">libgcc</span> est utilisée par beaucoup de logiciels; il ne faut absolument pas la désinstaller car, un de ses utilisateurs le plus important est le programme <code>dar</code> pour les sauvegardes du Serveur SME.

Les compilateurs gcc et cpp ont été supprimés.

<center><span style="font-size:125%">'''L'installation d'Odoo est réussie. Tout fonctionne correctement.'''</span></center>


= Post-scriptum Odoo =
Après un réamorçage, on peut vérifier les démarrages de nos démons.

==== PostgreSQL ====
<code>'''Usage''': /etc/init.d/postgresql-10 {start|stop|status|restart|initdb|promote|upgrade|condrestart|reload|promote|force-reload}</code>

<span style="color:blue">Exemple:</span>
<nowiki># /etc/init.d/postgresql-10 status</nowiki>

==== Odoo ====
<code>'''Usage''': /etc/init.d/odoo {start|stop|restart|condrestart|status}</code>

<span style="color:blue">Exemple:</span>
<nowiki># /etc/init.d/odoo status</nowiki>

=== Administration du serveur Odoo ===
Pour administrer le serveur Odoo, il suffit de se loguer avec le nom de l'usager Administrateur ''(choisi lors de la [[#Création d'une nouvelle base de données|Création d'une nouvelle base de données]])''.

=== Fichiers journaux ===
'''''PostgreSQL'''''

Les fichiers journaux de PostgreSQL se trouvent dans le répertoire <code>/var/lib/pgsql/10/data/log</code>.

'''''Odoo'''''

Vous pouvez vérifier les journaux: <code>/var/log/messages</code>&nbsp;&nbsp;et&nbsp;&nbsp;<code>/var/log/odoo/odoo-server.log</code> ou dans le gestionnaire: '''Visualisation des fichiers journaux&nbsp;&nbsp;>&nbsp;&nbsp;odoo/odoo-server.log''' pour vous assurer que tout a démarré correctement.

=== Mots de passe ===
'''<span style="color:red">†</span> Usager odoo de PostgreSQL'''

Vous pouvez trouver le mot de passe de l'usager odoo de PostgreSQL ''(l'usager qui gère votre base de données odoo-11)'' dans le fichier de configuration d'Odoo: <code>/etc/odoo-server.conf</code>.

Si le mot de passe a été perdu ou piraté, on peut changer le mot de passe de l'usager odoo de PostgreSQL.

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Il faut changer d'usager pour devenir le super-utilisateur <span style="color:red">postgres</span> puis, ce dernier change le mot de passe de l'usager odoo de PostgreSQL.

* '''''Dans PostgreSQL'''''

À la console du serveur, on se substitue à l'usager postgres.
<nowiki># su - postgres</nowiki>

L'usager postgres entre dans la console PostgreSQL.
$ psql

On change le mot de passe de l'usager '''odoo''' de PostgreSQL. ''(Il faut garder les apostrophes.)''
ALTER ROLE odoo WITH PASSWORD '<span style="color:red">nouveau-mot-de-passe</span>';

On sort de la console PostgreSQL.
# \q

On retourne à l'usager root.
$ exit


* '''''Dans le fichier /etc/odoo-server.conf'''''

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;IMPORTANT. Le changement de mot de passe de l'usager odoo dans PostgreSQL ne modifie pas celui dans <code>/etc/odoo-server.conf</code>. Il faut éditer ce fichier et changer le mot de passe sur la ligne: <code>db_password =</code>.

On édite le fichier <code>/etc/odoo-server.conf</code> et on change le mot de passe de l'utilisateur de la BD '''odoo-11''' ''(l'usager odoo)''.

On vérifie.
<nowiki># cat /etc/odoo-server.conf | grep db_password</nowiki>

<span style="color:blue">db_password</span> = <span style="color:red">fghtbgh</span>


* '''''Dans le gestionnaire Server Manager ou à la console du serveur'''''

On doit changer le mot de passe Linux de l'usager '''odoo''' afin que tous les mots de passe de l'usager '''odoo''' soient les mêmes pour PostgreSQL et Linux.

Dans le gestionnaire Server Manager: '''Server-Manager&nbsp;&nbsp;>&nbsp;&nbsp;Utilisateurs&nbsp;&nbsp;>&nbsp;&nbsp;'''vis-à-vis odoo, cliquer '''Réinitialiser le mot de passe&nbsp;&nbsp;>&nbsp;&nbsp;'''entrer le nouveau mot de passe&nbsp;&nbsp;'''>'''&nbsp;&nbsp;confirmer le nouveau mot de passe&nbsp;&nbsp;'''>'''&nbsp;&nbsp;'''Enregistrer'''.

On arrête et on relance le démon Odoo.
<nowiki># /etc/rc.d/init.d/odoo restart</nowiki>

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Après un changement de mot de passe, on supprime l'historique du fureteur Internet, on se connecte à Odoo et on vérifie quelques pages.



'''<span style="color:red">†</span> Usager super-utilisateur de PostgreSQL'''

Si vous changez le mot de passe du super-utilisateur ''(postgres)'' de PostgreSQL, il faut aussi le changer ailleurs.

* '''''Dans le fichier /etc/odoo-server.conf'''''

On édite le fichier <code>/etc/odoo-server.conf</code>, on change le mot de passe du super-utilisateur de PostgreSQL et on vérifie.
<nowiki>cat /etc/odoo-server.conf | grep admin_passwd</nowiki>

<span style="color:blue">admin_passwd</span> = <span style="color:red">fghtbgh</span>


* '''''Dans le fichier /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh'''''

Il faut aussi changer le mot de passe du super-utilisateur postgres dans le script de sauvegarde/récupération de la base de données odoo.

On édite le fichier <code>/var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh</code>, on change le mot de passe du super-usager '''postgres''' et on vérifie.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Ce fichier est créé plus loin, au paragraphe [[#Script de sauvegarde PostgreSQL]]. La commande ci-dessous ne fonctionnera seulement qu'après la création dudit fichier.

cat /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh | grep MDP_SUPER_USAGER

<span style="color:blue">MDP_SUPER_USAGER</span>=<span style="color:red">fghtbgh</span>


* '''''Dans le gestionnaire Server Manager ou à la console du serveur'''''

À la console du serveur, on change le mot de passe Linux de l'usager '''postgres''' afin que tous les mots de passe de l'usager '''postgres''' soient les mêmes pour PostgreSQL et Linux.

On vérifie si nous sommes root.
# whoami

<span style="color:red">root</span>

À la console du serveur, on change le mot de passe Linux du super-utilisateur '''postgres'''.
# passwd postgres

Changement de mot de passe pour l'utilisateur postgres.
Entrez le nouveau mot de passe UNIX : <span style="color:blue">entrer-le-nouveau-mot-de-passe</span>
Retapez le nouveau mot de passe UNIX : <span style="color:blue">entrer-le-nouveau-mot-de-passe</span>
passwd : mise à jour réussie de tous les jetons d'authentification.

Après un changement du mot de passe du super-utilisateur PostgreSQL, on arrête et on relance le démon PostgreSQL-10.
<nowiki># </nowiki>/etc/rc.d/init.d/postgresql-10 restart

Il faut aussi réamorcer le démon Odoo.
<nowiki># </nowiki>/etc/rc.d/init.d/odoo restart

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Après un changement de mot de passe, on supprime l'historique du fureteur Internet, on se connecte à Odoo et on vérifie quelques pages.


'''<span style="color:red">†</span> Administrateur d'Odoo'''

On peut aussi changer le mot de passe de l'Administrateur d'Odoo en se loguant avec le nom de l'usager Administrateur ''(choisi lors de la [[#Création d'une nouvelle base de données|Création d'une nouvelle base de données]])''.
<center>
{| class="wikitable"
|- style="vertical-align:top;"
|[[Image:005-Mot-de-passe-Admin-A.png|center|top|200px|border]]
||[[Image:005-Mot-de-passe-Admin-B.png|center|top|350px|border]]
||[[Image:005-Mot-de-passe-Admin-C.png|center|top|350px|border]]
|}
</center>
<center>Après avoir changé le mot de passe, à la présentation de la page de connexion, on se logue en utilisant le nouveau mot de passe.</center>


= Sauvegarde/restauration de la BD de PostgreSQL =
* Nous allons créer un script Bash qui générera, dans le répertoire <code>/var/lib/pgsql/sauvegarde</code>, un fichier ZIP de sauvegarde de la BD de PostgreSQL du site Odoo.
* Le fichier sera sécurisé et seul l'usager root pourra le lire.
* Ce script sera lancé par une tâche cron qui s'exécutera à 02h00, juste avant la sauvegarde habituelle du Serveur SME, et ainsi cette dernière inclura la sauvegarde quotidienne de PostgreSQL.

=== Répertoire de sauvegarde ===
Tout ce qui a trait à la sauvegarde de la BD odoo-11 se trouvera dans un répertoire dédié à cette fin uniquement: <code>/var/lib/pgsql/sauvegarde/</code>.

* Le propriétaire et le groupe du répertoire seront '''postgres:postgres'''.
* Le fichier de la nouvelle sauvegarde:
** sera généré et écrasera la sauvegarde précédente et
** sera sécurisé par le script en changeant le propriétaire et le groupe pour '''root:root''' et en donnant des droits à root seulement.

On crée le répertoire.
<nowiki># mkdir /var/lib/pgsql/sauvegarde</nowiki>

On change le propriétaire et le groupe.
<nowiki># chown postgres:postgres /var/lib/pgsql/sauvegarde</nowiki>

On ajuste tous les droits pour que seul l'usager postgres puisse y accéder.
<nowiki># chmod 700 /var/lib/pgsql/sauvegarde</nowiki>

On vérifie.
# ls -lsd /var/lib/pgsql/sauvegarde

4 d<span style="color:red">rwx------</span> 2 <span style="color:red">postgres postgres</span> 4096 29 août 13:24 /var/lib/pgsql/sauvegarde
<span id="Script de sauvegarde PostgreSQL"></span>
=== Script de sauvegarde PostgreSQL ===
[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh <<'EOT'
<nowiki>#!/bin/sh</nowiki>

<nowiki># Script pour générer une sauvegarde de la BD PostgreSQL d'Odoo.</nowiki>

<nowiki># vars</nowiki>
TEMPS_DE_PAUSE=10
REP_SAUVEGARDE<nowiki>=/var/lib/pgsql/sauvegarde</nowiki>
NOM_BD_ODOO<nowiki>=odoo-11</nowiki>
FORMAT_FICHIER<nowiki>=zip</nowiki>
MDP_SUPER_USAGER<nowiki>=fghtbgh</nowiki>
PORT_ODOO=8069

<nowiki># On vérifie qu'odoo-server est en cours d'exécution.</nowiki>
if (!(/etc/rc.d/init.d/odoo status | grep "odoo-server est en cours d'exécution...")); then
<nowiki># Message au système et à la console</nowiki>
/bin/logger "******************** odoo-server ******************** "
/bin/logger "odoo-server N'EST PAS en cours d'execution..."
/bin/echo "odoo-server N'EST PAS en cours d'execution..."

<nowiki># On relance server-odoo pour la sauvegarde de la BD $NOM_BD_ODOO</nowiki>
/etc/rc.d/init.d/odoo start
/bin/logger "odoo-server est relancé"
/bin/logger " <nowiki>***** </nowiki> odoo-server *****"
/bin/echo "odoo-server est relancé"

<nowiki># Message au système et à la console</nowiki>
/bin/logger "Pause de $TEMPS_DE_PAUSE secondes pour démarrage d'Odoo"
/bin/echo "Pause de $TEMPS_DE_PAUSE secondes pour démarrage d'Odoo"

<nowiki># On fait une pause de $TEMPS_DE_PAUSE secondes pour le démarrage d'Odoo.</nowiki>
/bin/sleep $TEMPS_DE_PAUSE
fi

/bin/logger "******************** odoo-server ******************** "
/bin/logger "odoo-server est en cours d'execution..."
/bin/echo "odoo-server est en cours d'execution..."

<nowiki># On sauvegarde la BD dans $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER.</nowiki>
<nowiki># La sauvegarde du jour écrase la sauvegarde du jour précédent.</nowiki>

curl -X POST \
-F master_pwd=$MDP_SUPER_USAGER \
-F name=$NOM_BD_ODOO \
-F backup_format=$FORMAT_FICHIER \
-o $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER \
http://localhost:$PORT_ODOO/web/database/backup

<nowiki># On sécurise le fichier de $NOM_BD_ODOO.$FORMAT_FICHIER.</nowiki>
/bin/chown root:root $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER > /dev/null 2>&1
/bin/chmod 700 $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER > /dev/null 2>&1

<nowiki># On écrit une entrée dans le journal du système.</nowiki>
/bin/logger "La sauvegarde de la BD $NOM_BD_ODOO est dans: $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER"
/bin/logger "******************** odoo-server ******************** "
/bin/echo "La sauvegarde de la BD $NOM_BD_ODOO est dans: $REP_SAUVEGARDE/$NOM_BD_ODOO.$FORMAT_FICHIER"
exit 1

EOT

On sécurise le fichier du script en changeant le groupe et le propriétaire.
<nowiki># chown root:root /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh</nowiki>

On ajuste les droits pour rendre le fichier exécutable par l'usager root uniquement.
<nowiki># chmod 700 /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh</nowiki>

On vérifie.
# ls -ls /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh

4 -<span style="color:red">rwx------</span> 1 <span style="color:red">root root</span> 2308 29 août 13:40 /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh

=== Sauvegarde ===
'''''Vérification du script de sauvegarde'''''

On vérifie le fonctionnement de notre script de sauvegarde en simulant ce que fera '''<code>cron</code>'''.
<nowiki># /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh</nowiki>

odoo-server est en cours d'exécution...
odoo-server est en cours d'execution...
% Total % Received % Xferd Average Speed Time Time Time Current
Dload Upload Total Spent Left Speed
100 3653k 0 3653k 119 357 1844k 180 0:00:01 0:00:01 --:--:-- 1845k
La sauvegarde de la BD odoo-11 est dans: /var/lib/pgsql/sauvegarde/odoo-11.zip

On affiche le fichier de sauvegarde pour s'assurer que la sauvegarde a réussie.
# ls -ls /var/lib/pgsql/sauvegarde/odoo-11.zip

3648 -<span style="color:red">rwx------</span> 1 <span style="color:red">root root</span> 3740775 29 août 13:41 /var/lib/pgsql/<span style="color:red">sauvegarde/odoo-11.zip</span>

Comme on le voit, seul root pourra manipuler le fichier de sauvegarde.


'''''Journal du Serveur SME'''''
...
Aug 29 13:41:48 odoo-11 root: ******************** odoo-server ********************
Aug 29 13:41:48 odoo-11 root: odoo-server est en cours d'execution...
Aug 29 13:41:50 odoo-11 root: La sauvegarde de la BD odoo-11 est dans: /var/lib/pgsql/sauvegarde/odoo-11.zip
Aug 29 13:41:50 odoo-11 root: ******************** odoo-server ********************
...


'''''Si odoo-server n'est pas en exécution (arrêté)'''''

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Il en sera exactement de même si <code>odoo-server</code> n'est pas en exécution. Le début du script relancera Odoo mais, <span style="color:red">à la fin, il ne l'arrêtera pas</span>.


'''''Tâche cron'''''

On va créer une tâche cron qui s'exécutera quotidiennement à 02h00 car, la sauvegarde régulière du Serveur SME est programmée pour rouler à 03h00 et nous voulons y inclure la sauvegarde de PostgreSQL.

On crée le répertoire pour le gabarit personnalisé.
<nowiki># mkdir -p /etc/e-smith/templates-custom/etc/crontab</nowiki>

On crée le fichier de la tâche cron et on y insère son contenu.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;La tâche s'exécutera quotidiennement à 02h00. L'heure peut être choisie à votre entière discrétion.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql <<'EOT'
SHELL=/bin/bash
MAILTO=root
<nowiki>#</nowiki>
<nowiki># Tâche cron qui lance /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh afin</nowiki>
<nowiki># de sauvegarder la BD d'Odoo-11. Cette tâche cron roulera quotidiennement à 02h00.</nowiki>

<nowiki># ┌───────────── min (0 - 59) </nowiki>
<nowiki># │ ┌────────────── heure (0 - 23)</nowiki>
<nowiki># │ │ ┌─────────────── jour du mois (1 - 31)</nowiki>
<nowiki># │ │ │ ┌──────────────── mois (1 - 12)</nowiki>
<nowiki># │ │ │ │ ┌───────────────── jour de la semaine (0 - 6) (0 à 6 sont de dimanche à samedi,</nowiki>
<nowiki># │ │ │ │ │ </nowiki> 7 est dimanche, même que 0)
<nowiki># │ │ │ │ │</nowiki>
<nowiki># * * * * * </nowiki> [usager] commande à exécuter
<nowiki>#</nowiki>
<nowiki>0 2 * * * root /var/lib/pgsql/sauvegarde/sauvegarde-postgres.sh</nowiki>

EOT

On sécurise le fichier.
<nowiki># </nowiki>chmod 700 /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql

On développe le gabarit personnalisé.
<nowiki># expand-template </nowiki>/etc/crontab

On redémarre le démon <code>crond</code>.
<nowiki># service crond restart</nowiki>


'''''Vérification de la tâche cron'''''

On modifie l'heure de la tâche cron pour qu'elle soit lancée à toutes les minutes pour vérifier son exécution.

# sed -i 's/^0 2/\* \*/' /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql

On développe le gabarit personnalisé.
<nowiki># expand-template </nowiki>/etc/crontab

On redémarre le démon crond.
<nowiki># service crond restart</nowiki>


* '''''Suivi'''''

On lance la commande <code>tail</code> ci-dessous pour suivre toutes les tâches cron et on filtre avec <code>grep</code> celles qui contiendront '''sauvegarde'''.

# tail -F /var/log/messages | grep sauvegarde

À toutes les minutes, on verra notre tâche s'afficher.
...
Jun 18 11:<span style="color:red">30</span>:04 odoo-11 root: La sauvegarde de la BD odoo-11 est dans: /var/lib/pgsql/sauvegarde/odoo-11.zip
Jun 18 11:<span style="color:red">31</span>:03 odoo-11 root: La sauvegarde de la BD odoo-11 est dans: /var/lib/pgsql/sauvegarde/odoo-11.zip
Jun 18 11:<span style="color:red">32</span>:03 odoo-11 root: La sauvegarde de la BD odoo-11 est dans: /var/lib/pgsql/sauvegarde/odoo-11.zip
...

On arrête la commande '''tail''' avec [<span style="color:red">CTL - c</span>].


* '''''Vérification lorsque le démon Odoo est arrêté'''''

On arrête Odoo.
<nowiki># /etc/rc.d/init.d/odoo stop</nowiki>

On relance la commande tail.
# tail -F /var/log/messages | grep sauvegarde

À toutes les minutes, on verra notre tâche s'afficher.
...
Jun 18 11:<span style="color:red">40</span>:04 odoo-11 root: La sauvegarde de la BD Odoo-11 est dans: /var/lib/pgsql/sauvegarde/odoo-11.zip
...

On arrête la commande tail avec [<span style="color:red">CTL - c</span>].

On remet l'heure de la tâche cron à 02h00.
# sed -i 's/\* \* \* \* \* root/0 2 \* \* \* root/' /etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql

On développe le gabarit personnalisé.
<nowiki># expand-template </nowiki>/etc/crontab

On redémarre le démon crond.
<nowiki># service crond restart</nowiki>


* '''''Courriel de notification'''''

À la fin de la tâche cron, l'utilisateur root ''(admin)'' recevra un courriel, semblable à celui ci-dessous.

On se rend à l'URL: https://192.168.1.11/webmail. On se logue obligatoirement avec l'usager '''admin''' et le mot de passe de root.
<center>
{| class="wikitable" style="width: 80%; background-color:#ffffff;"
|- style="vertical-align:top;"
|[[Image:0000-Odoo-11-Courriel-A.png|center|top|300px|border]]
||[[Image:0000-Odoo-11-Courriel-B.png|center|top|700px|border]]
|}
</center>

<center><span style="font-size:125%">'''Notre tâche cron pour la sauvegarde automatique de PostgreSQL fonctionne parfaitement.'''</span></center>


=== Restauration ===
'''Choix du fichier de sauvegarde'''

'''''/var/lib/pgsql/sauvegarde/odoo-11.zip'''''

* Restauration manuelle:
** On supprime la BD actuelle d'Odoo selon le paragraphe [[#Suppression de la base de données actuelle]] et on restaure manuellement selon le paragraphe [[#Restauration manuelle]].
* Restauration graphique avec Odoo:
** On copie le fichier '''/var/lib/pgsql/sauvegarde/odoo-11.zip''' sur le poste de travail et on restaure la BD '''odoo-11.zip''' selon le paragraphe [[#Restauration graphique]].

'''''odoo-11.zip inclus dans une sauvegarde régulière du Serveur SME'''''

* On récupère le fichier '''odoo-11.zip''' selon le paragraphe [[#Récupération du fichier odoo-11.zip de la sauvegarde SME]] puis, on restaure manuellement ou graphiquement.


= Sauvegarde/restauration avec l'interface d'Odoo =
On peut faire une sauvegarde/restauration de PostgreSQL directement avec l'interface d'Odoo.

'''Sauvegarde graphique'''

<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
| - On se déconnecte.

- On supprime l'historique du navigateur.

- http://192.168.1.11:8069.

- Manage Databases.
||&nbsp;

Backup.
|- style="vertical-align:top;"
|[[Image:009-Sauvegarde-A.png|center|top|450px|border]]
||[[Image:009-Sauvegarde-B.png|center|top|450px|border]]
|}
</center>


<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
| - La base de donnée odoo-11 est déjà affichée.

- On entre le mot de passe du super-utilisateur postgres.

- On sélectionne zip (include filestore) > Backup.
||&nbsp;

Enregistrer le fichier > OK.
|- style="vertical-align:top;"
|[[Image:009-Sauvegarde-C.png|center|top|450px|border]]
||[[Image:009-Sauvegarde-D.png|center|top|450px|border]]
|}
</center>


<center>
{| class="wikitable" style="width: 40%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
|&nbsp;Enregistrer.
|-style="vertical-align:top;"
||[[Image:009-Sauvegarde-E.png|center|top|500px|border]]
|}
</center>

<span id="Restauration graphique"></span>
'''Restauration graphique'''

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Pour pouvoir restaurer une BD, il faut supprimer l'ancienne.

<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
| - http://192.168.1.11:8069.

- Manage Databases.
||&nbsp;

Delete.
|- style="vertical-align:top;"
|[[Image:010-Restauration-A.png|center|top|450px|border]]
||[[Image:010-Restauration-B.png|center|top|450px|border]]
|}
</center>


<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
| - On entre le mot de passe du super-utilisateur postgres.

- La base de donnée odoo-11 est déjà affichée.

- Delete.
|| - Au retour, vu qu'il n'y a plus de BD, Odoo présente l'écran de création de la base de données.

- On clique: '''or restore a database'''.
|- style="vertical-align:top;"
|[[Image:010-Restauration-C.png|center|top|450px|border]]
||[[Image:010-Restauration-D.png|center|top|450px|border]]
|}
</center>


<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
| On entre le mot de passe du super-utilisateur postgres > Parcourir...
|| On sélectionne la BD à restaurer > Ouvrir.
|- style="vertical-align:top;"
|[[Image:010-Restauration-E.png|center|top|450px|border]]
||[[Image:010-Restauration-F.png|center|top|450px|border]]
|}
</center>


<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
| On entre le nom de la BD > Continue.
|| La BD est restaurée.
|- style="vertical-align:top;"
|[[Image:010-Restauration-G.png|center|top|450px|border]]
||[[Image:010-Restauration-H.png|center|top|450px|border]]
|}
</center>


'''Vérification'''

On se logue dans Odoo et on vérifie si tout est tel qu'au moment de la sauvegarde. [http://192.168.1.11:8069/ http://192.168.1.11:8069]

[[Image:008-Verif-Recup.png|center|500px|border]]


<center><big>'''La sauvegarde et la restauration avec l'interface d'Odoo fonctionnent correctement.'''</big></center>


'''Journal Odoo'''

On vérifie le journal d'Odoo.

<center>
{| class="wikitable" style="width: 70%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
| Server Manager > Visualisation des fichiers journaux >

odoo/odoo-server.log > Suivant.
|| &nbsp;

Tout fonctionne correctement.
|- style="vertical-align:top;"
|[[Image:012-Journal-Odoo-A.png|center|top|450px|border]]
||[[Image:012-Journal-Odoo-B.png|center|top|450px|border]]
|}
</center>


On réamorce le Serveur SME pour une vérification finale.
# reboot

On réexamine le fichier journal et on s'aperçoit que quelque chose cloche:
...
<span style="color:purple">'''2018-06-18 19:49:29,567'''</span> 3043 INFO ? odoo.addons.sms.wizard.send_sms: <span style="color:red">The `phonenumbers` Python module is not available.</span> Phone number validation will be skipped. Try `pip3 install phonenumbers` to install it.
...

On va installer le module manquant.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Il faut absolument l'installer en tant qu'usager <span style="color:red">root</span>.
<nowiki># whoami</nowiki>

<span style="color:red">root</span>

On se rend dans le répertoire racine d'Odoo.
<nowiki># cd /home/e-smith/files/ibays/Primary/html/odoo/</nowiki>

On installe '''''phonenumbers''''' en utilisant obligatoirement l'utilitaire <code>pip</code> de la Collection RH-Python36.
<nowiki># /opt/rh/rh-python36/root/usr/bin/pip install </nowiki> phonenumbers

Collecting phonenumbers
Downloading https://files.pythonhosted.org/packages/a0/f2/986647e374a474cf821c50a0a70129236b32510452e87d26061e26c4893e/phonenumbers-8.9.8-py2.py3-none-any.whl (3.1MB)
100% |████████████████████████████████| 3.1MB 290kB/s
Installing collected packages: phonenumbers
<span style="color:red">Successfully installed</span> phonenumbers-8.9.8
You are using pip version 9.0.1, however version 10.0.1 is available.
You should consider upgrading via the 'pip install --upgrade pip' command.


'''Ajustement de tous les droits du répertoire d'Odoo'''

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;<u>Après une installation quelconque</u>, on s'assure que le propriétaire et le groupe sont '''odoo:odoo''' en changeant <u>'''R'''</u>écursivement le propriétaire et le groupe dans tout le répertoire d'Odoo.

# chown -R odoo:odoo /home/e-smith/files/ibays/Primary/html/odoo

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;On enlève <u>'''R'''</u>écursivement tous les droits que pourrait avoir "other" dans tout le répertoire d'Odoo.
# chmod -R o-rwx /home/e-smith/files/ibays/Primary/html/odoo


'''Réamorçage'''

On réamorce le Serveur SME pour s'assurer que le module manquant a bien été installé correctement.

[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;On réamorce avec la signalisation '''post-upgrade''' pour être certain que nous n'avons rien oublié.
<nowiki># signal-event post-upgrade ; signal-event reboot</nowiki>

Après le réamorçage, on vérifie le journal d'Odoo.
<nowiki># cat /var/log/odoo/odoo-server.log | grep phonenumbers</nowiki>

<span style="color:purple">'''2018-06-18 19:49:29,567'''</span> 3043 <span style="color:red">INFO</span> ? odoo.addons.sms.wizard.send_sms: The `phonenumbers` Python module is not available. Phone number validation will be skipped. Try `pip3 install phonenumbers` to install it.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;L'entrée est la même que celle affichée précédemment et exactement à la même heure. On peut donc être certain que cette information est la précédente.

Il n'y a pas eu de nouvelle lignes INFO et on peut affirmer que le problème a bien été résolu.


<center><span style="font-size:125%">'''Odoo-11 est installé et fonctionne parfaitement.'''</span></center>


= Répertoires et fichiers spéciaux à sauvegarder =
''Référence'': https://wiki.contribs.org/Backup_with_dar#Adding.2FExcluding_Directories_and_Files_from_the_backup_list.

Les sous-répertoires de <code>/etc</code> ne sont pas tous inclus dans la sauvegarde standard du Serveur SME. Il en est de même pour les répertoires <code>/opt</code> et <code>/var/lib/pgsql/</code>.

=== Répertoires et fichiers à inclure dans la sauvegarde ===
Nous allons créer un gabarit personnalisé pour ajouter, dans la sauvegarde standard du Serveur SME, certains répertoires et fichiers particuliers.

'''''Répertoires'''''

* '''''/opt''''' - répertoires des collections.
* '''''/var/run/odoo''''' - pour le répertoire PIDFILE.
* '''''/var/log/odoo''''' - pour les fichiers journaux.
* '''''/var/lib/pgsql/sauvegarde''''' - le répertoire de sauvegarde PostgreSQL.
* '''''/etc/dehydrated''''' - le répertoire des certificats Let's Encrypt ''(si utilisé)''.

'''''Fichiers'''''

* '''''/var/lib/pgsql/10/data/pg_hba.conf''''' - fichier de configuration de PostgreSQL.
* '''''/etc/rc.d/init.d/postgresql-10''''' - fichier de départ/arrêt automatique de PostgreSQL.
* '''''/etc/rc.d/rc7.d/S51postgresql-10''''' - lien de départ de PostgreSQL.
* '''''/etc/rc.d/rc6.d/K36postgresql-10''''' - lien d'arrêt de PostgreSQL.
* '''''/etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql''''' - script de sauvegarde de PostgreSQL.
* '''''/etc/odoo-server.conf''''' - la configuration du démon Odoo.
* '''''/etc/rc.d/init.d/odoo''''' - fichier de départ/arrêt automatique d'Odoo.
* '''''/etc/logrotate.d/odoo-server''''' - fichier de rotation des journaux d'Odoo.


'''''Création d'un gabarit personnalisé'''''
<nowiki># mkdir -p /etc/e-smith/templates-custom/etc/dar/DailyBackup.dcf</nowiki>

On sécurise.
<nowiki># chmod 600 /etc/e-smith/templates-custom</nowiki>/etc/dar/DailyBackup.dcf

On crée le fichier <code>41go-into</code> et on y insère le contenu de l'encadré ci-dessous pour indiquer d'inclure les fichiers et répertoires désirés.

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Prendre tout le contenu de l'encadré pour la commande.
cat > /etc/e-smith/templates-custom/etc/dar/DailyBackup.dcf/41go-into <<'EOT'
<nowiki>#</nowiki>
<nowiki># Indique au Serveur SME d'inclure les fichiers et</nowiki>
<nowiki># répertoires/sous-répertoires dans la sauvegarde standard.</nowiki>

<nowiki># Répertoires</nowiki>
--go-into opt
--go-into var/run/odoo
--go-into var/log/odoo
--go-into var/lib/pgsql/sauvegarde

<nowiki># Décommenter si un certificat Let's Encrypt est utilisé par le Serveur SME.</nowiki>
<span style="color:red">#</span> '''''--go-into etc/dehydrated'''''

<nowiki># Fichiers</nowiki>
--go-into var/lib/pgsql/10/data/pg_hba.conf
--go-into etc/rc.d/init.d/postgresql-10
--go-into etc/rc.d/rc7.d/S51postgresql-10
--go-into etc/rc.d/rc6.d/K36postgresql-10
--go-into etc/e-smith/templates-custom/etc/crontab/sauvegarde_postgresql
--go-into etc/odoo-server.conf
--go-into etc/rc.d/init.d/odoo
--go-into etc/logrotate.d/odoo-server
EOT

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Il n'y a pas de caractère "/" au début des chemins des fichiers et répertoires.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Contrairement à ce qui est décrit dans la Contrib, il faut aussi utiliser '''--go-into''' pour les fichiers.

On développe le gabarit personnalisé.
<nowiki># expand-template /etc/dar/</nowiki>DailyBackup.dcf

Si le fichier <code>pg_hba.conf</code> a bien été incorporé dans <code>DailyBackup.dcf</code>, les autres l'ont été aussi.
<nowiki># cat /etc/dar/DailyBackup.dcf | grep pg_hba.conf</nowiki>

--go-into <span style="color:red">var/lib/pgsql/10/data/pg_hba.conf</span>


<span style="font-size:125%">'''Lancement de la sauvegarde'''</span>

* On peut générer une sauvegarde régulière du Serveur SME qui serait lancée dans quelques minutes.
* Autrement, on peut utiliser la commande ci-dessous pour en lancer une immédiatement.

[[Image:015-IconeASurveiller.png|28px]]&nbsp;&nbsp;Il faut que les sauvegardes soient activées pour utiliser cette commande.
<nowiki># /sbin/e-smith/</nowiki>do_backupwk

[[Image:004-BPC-IconeNoteAPT.png|30px]]&nbsp;&nbsp;Ci-dessus, l'invite ne revient pas. Elle le fera seulement après la fin de <code>do_backupwk</code>.

Avec une autre session PuTTY, on peut vérifier si la sauvegarde est en exécution.
<nowiki># ps aux | grep dar</nowiki>

root 2733 0.3 0.3 173544 12536 pts/0 S+ 15:13 0:00 /usr/bin/perl -w /etc/e-smith/events/actions/<span style="color:red">workstation-backup-dar DailyBackup</span>
root 2767 63.0 0.8 163512 35316 pts/0 RL+ 15:13 0:20 /usr/bin/dar -Q -asecu --create /mnt/smb/odoo-11.micronator-101.org/full-20180618151337 -B /etc/dar/DailyBackup.dcf
root 2768 0.0 0.2 173544 10448 ? Ss 15:13 0:00 /usr/bin/perl -w /etc/e-smith/events/actions/workstation-backup-dar DailyBackup
root 2790 0.0 0.0 103340 884 pts/1 S+ 15:14 0:00 grep dar

[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;Si on veut utiliser la même connexion et retrouver l'invite tout de suite après le lancement de la commande, on ajoute le caractère "&" ''(sans guillemets)'' à la fin de la ligne de commande pour une exécution en arrière-plan.

{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<nowiki># /sbin/e-smith/</nowiki>do_backupwk <span style="color:red">&</span><br>
|}

On peut suivre la sauvegarde en utilisant l'utilitaire <code>top</code>.
# top -d 1

{| class="wikitable" style="width: 60%; background-color:#ffffff;"
|- style="vertical-align:top;"
|
PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND
2768 root 20 0 130m 5480 2124 R <span style="color:red">90.3</span> 0.1 0:02.35 <span style="color:red">dar</span>
1 root 20 0 19352 1536 1228 S 0.0 0.0 0:00.87 init
|}

Comme on le voit, DAR est très énergivore de temps CPU.

Après la sauvegarde, DAR met à jour le catalogue des sauvegardes.
<nowiki># ps aux | grep </nowiki>dar_manager

root 2797 91.6 1.1 173856 45292 pts/0 RL+ 15:18 0:11 /usr/bin/<span style="color:red">dar_manager</span> -Q -B /mnt/smb/odoo-11.micronator-101.org/<span style="color:red">dar-catalog</span> -D 1
root 2803 0.0 0.0 103344 888 pts/2 S+ 15:18 0:00 grep dar_manager


=== Vérification ===
On vérifie le répertoire <code>Sauvegarde</code> sur le poste de travail.

# DAR a créé le répertoire <code>odoo-11.micronator-101.org</code> dans ce répertoire.
# On examine le répertoire <code>D:\Sauvegarde\odoo-11.micronator-101.org\</code>.
# On examine son sous-répertoire <code>set1</code>.
<center>
{| class="wikitable"
|- style="vertical-align:top;"
|[[Image:006-Dar-A.png|center|top|350px|border]]
||[[Image:006-Dar-B.png|center|top|350px|border]]
||[[Image:006-Dar-C.png|center|top|350px|border]]
|}
</center>


= Récupération manuelle de la sauvegarde PostgreSQL =
Voir plus haut pour le [[#Script de sauvegarde PostgreSQL|Script de sauvegarde PostgreSQL]] de la base de données odoo-11.<br>
On va récupérer le fichier '''odoo-11.zip''' de la sauvegarde standard du Serveur SME.


'''Préparation'''

À la console du serveur, on se rend dans le répertoire de sauvegarde de la base de données odoo-11.
<nowiki># cd </nowiki>/var/lib/pgsql/sauvegarde

On affiche le contenu.
<nowiki># ls -ls</nowiki>

total 3648
3644 -rwx------ 1 root root 3730924 18 juin 11:33 <span style="color:red">odoo-11.zip</span>
4 -rwx------ 1 root root 2308 18 juin 11:17 sauvegarde-postgres.sh

On renomme la sauvegarde actuelle pour pouvoir la conserver et la comparer avec celle récupérée.
<nowiki># mv odoo-11.zip </nowiki>odoo-11.zip<span style="color:red">-org</span>


<span id="Récupération du fichier odoo-11.zip de la sauvegarde SME"></span>
'''Récupération du fichier odoo-11.zip de la sauvegarde SME'''

On se logue dans le gestionnaire du Serveur SME avec l'usager '''admin''' et le mot de passe de '''root'''. [https://192.168.1.11/server-manager https://192.168.1.11/server-manager]

# Sauvegarde et restauration > Restauration sélective de fichier depuis un ordinateur distant > Exécuter.
# On choisit la sauvegarde, on entre le nom du fichier à récupérer ''('''odoo-11.zip''')'' > Exécuter.
# <u>On sélectionne le fichier à récupérer</u> ''('''var/lib/pgsql/sauvegarde/odoo-11.zip''')'' > Exécuter.
# Le fichier contenu dans la sauvegarde habituelle du Serveur SME a été récupéré et déposé à son emplacement original.<br>

<center>
{| class="wikitable"
|- style="vertical-align:top;"
|[[Image:007-Recup-A.png|center|top|250px|border]]
||[[Image:007-Recup-B.png|center|top|250px|border]]
||[[Image:007-Recup-C.png|center|top|250px|border]]
||[[Image:007-Recup-D.png|center|top|250px|border]]
|}
</center>

On vérifie.
<nowiki># ls -ls</nowiki>

total 7292
3644 -rwx------ 1 root root 3730924 18 juin 11:33 <span style="color:red">odoo-11.zip</span>
3644 -rwx------ 1 root root 3730924 18 juin 11:33 odoo-11.zip<span style="color:red">-org</span>
4 -rwx------ 1 root root 2308 18 juin 11:17 sauvegarde-postgres.sh

Le fichier récupéré est exactement le même que l'original avec les mêmes: propriétaire, groupe, grandeur et heure.

On ajoute le droit de lecture au fichier de la sauvegarde récupérée pour que l'usager <code>postgres</code> puisse le lire et replacer la sauvegarde dans la base de données de PostgreSQL.
<nowiki># chmod +r odoo-11.zip</nowiki>


<span id="Suppression de la base de données actuelle"></span>
'''Suppression de la base de données actuelle'''

On vérifie si le démon Odoo est en cours d'exécution.
<nowiki># /etc/rc.d/init.d/odoo status</nowiki>

odoo-server est <span style="color:red">en cours d'exécution...</span>

On arrête Odoo.
<nowiki># /etc/rc.d/init.d/odoo stop</nowiki>

On se substitue à l'usager postgres.
<nowiki># su - postgres</nowiki>

On supprime la BD actuelle d'Odoo ''(ne pas oublier les apostrophes)''.
$ dropdb 'odoo-11'

On entre dans la console de PostgreSQL pour vérifier la suppression de la BD.
$ psql

On affiche les BD présentes.
# \list

Liste des bases de données
<span style="color:red">Nom</span> | Propriétaire | Encodage | Collationnement | Type caract. | Droits d'accès

----------+--------------+----------+-----------------+--------------+----------------------
postgres | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 |
template0 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
template1 | postgres | UTF8 | fr_FR.UTF-8 | fr_FR.UTF-8 | =c/postgres +
| | | | | postgres=CTc/postgres
(3 lignes)

La base de données '''odoo-11''' n'est plus présente, elle a bien été supprimée.

On quitte la console PostgreSQL.
# \q

On revient à l'usager root.
$ exit

On relance Odoo pour pouvoir ré-insérer la base de données originale.
<nowiki># /etc/rc.d/init.d/odoo start</nowiki>


<span id="Restauration manuelle"></span>
'''Restauration manuelle'''

''Référence'': [https://linuxize.com/post/how-to-setup-automatic-odoo-backup/ https://linuxize.com/post/how-to-setup-automatic-odoo-backup/].

On lance la restauration.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Prende tout le contenu de l'ancadré pour la commande.

curl -F 'master_pwd=fghtbgh' <span style="color:red">\</span>
-F backup_file=@/var/lib/pgsql/sauvegarde/odoo-11.zip <span style="color:red">\</span>
-F 'copy=true' <span style="color:red">\</span>
-F 'name=odoo-11' <span style="color:red">\</span>
http://localhost:8069/web/database/restore


'''Vérification'''

On se logue dans Odoo et on vérifie si tout est tel qu'avant la sauvegarde. [http://192.168.1.11:8069/ http://192.168.1.11:8069]

[[Image:008-Verif-Recup.png|top|center|500px|border]]


<center><span style="font-size:125%">'''Tout est tel qu'auparavant. La sauvegarde et la restauration manuelle fonctionnent correctement.'''</span></center>


= Mises à jour =
=== Odoo ===
* Nous avons utilisé <code>git</code> pour l'installation d'Odoo-11, il peut donc aussi servir pour la mise à jour du coeur d'Odoo et de ses extensions.

* Après une mise à jour d'Odoo, on met à jour la base de données d'Odoo afin d'utiliser le code le plus récent.

Voir: [https://www.odoo.yenthevg.com/update-odoo-environment-github/ https://www.odoo.yenthevg.com/update-odoo-environment-github/].


'''Mise à jour d'Odoo et de ses extensions.'''

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Vous devez faire la mise à jour en tant qu'utilisateur <span style="color:red">odoo</span>.

On se <u>su</u>bstitue à l'utilisateur odoo.
# su - odoo

On se rend dans le répertoire .../Primary/html/odoo.
# cd /home/e-smith/files/ibays/Primary/html/odoo

Maintenant que nous sommes dans le bon dossier, on doit récupérer le contenu de Github pour, plus tard, l'appliquer localement.

On récupère le contenu de Github.
# git fetch origin 11.0

remote: Counting objects: 217, done.
remote: Compressing objects: 100% (72/72), done.
remote: Total 217 (delta 178), reused 183 (delta 145), pack-reused 0
Receiving objects: 100% (217/217), 26.85 KiB, done.
<span style="color:red">Resolving deltas</span>: 100% (178/178), <span style="color:red">completed with 121 local objects</span>.
From https://github.com/odoo/odoo
* branch 11.0 -> FETCH_HEAD


'''Application des mises à jour'''

Nous avons maintenant tout récupéré et nous devons demander au système d'appliquer les mises à jour. À ce stade, le système sait quelles modifications qui doivent être effectuées mais, nous ne les avons pas encore appliquées; nous pouvons le faire avec <code>git reset</code>.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;La commande <code>git reset –hard</code> appliquera toutes les modifications, peu importe ce qui pourrait arriver.

[[Image:019-IconeTruc-32px.png|22px]]&nbsp;&nbsp;Si vous avez ajouté du code personnalisé dans des modules déjà existants ''(donc dans le code source et non dans un module autonome)'', vous ne devez pas l'utiliser cette commande car, votre code personnalisé sera écrasé! Ajouté du code personnalisé dans des modules originaux est contraire à toutes les règles. Si vous devez ajouter du code, commencez par créer vos propres modules au lieu de modifier le code source.

On applique les mises à jour.
$ git reset --hard origin/11.0

Checking out files: 100% (22400/22400), done.
HEAD is now at a8469c4 <span style="color:red">[FIX] tools: handle code in po</span>

On peut voir qu'un bogue a été résolu <span style="color:red">[FIX]</span>.

Le code Odoo est maintenant à jour et a été synchronisé avec les derniers changements apportés.


'''Mise à jour de la BD'''

On redevient l'usager <span style="color:red">root</span>.
$ exit

On met à jour la base de données afin qu'elle reconnaisse toutes les modifications et se les applique à elle-même.

Paramètres de la commande:

* '''''/etc/rc.d/init.d/odoo restart''''': indique au système de redémarrer le démon Odoo.
* '''''-u all''''': indique à Odoo de mettre à jour toutes ''(all)'' les extensions.
* '''''-d NomDeLaBD''''': indique à Odoo d'appliquer les changements sur la base de données nommée NomDeLaBD. Pour le nom de la BD, ''voir [[#Création d'une nouvelle base de données|Création d'une nouvelle base de données]]''
# /etc/rc.d/init.d/odoo restart -u all -d odoo-11

Arrêt de Odoo Server Daemon (odoo-server) : [ <span style="color:red">OK</span> ]
Démarrage de Odoo Server Daemon (odoo-server) : [ <span style="color:red">OK</span> ]

Pour une explication des paramètres de la commande odoo, voir: https://www.odoo.com/documentation/11.0/reference/cmdline.html.

On vérifie le statut du démon.
# /etc/init.d/odoo status

odoo-server est <span style="color:red">en cours d'exécution...</span>


'''Vérification du site Odoo'''

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur et on s'assure que java script et les témoins soient activés.

On se rend à notre site et on s'assure que tout fonctionne correctement: http://192.168.1.11.

Odoo-11 et ses extensions sont à jour.


=== PostgreSQL ===
Mise à jour de PostgreSQL.
# yum update -y --enablerepo=pgdg10 postgresql10 postgresql10-libs <span style="color:red">\</span>
postgresql10-server postgresql10-contrib <span style="color:red">\</span>
postgresql10-devel postgresql10-docs postgresql10-test


Modules complémentaires chargés : fastestmirror, smeserver
Configuration du processus de mise à jour
Loading mirror speeds from cached hostfile
* base: mirror.csclub.uwaterloo.ca
* smeaddons: mirror.canada.pialasse.com
* smeextras: mirror.canada.pialasse.com
* smeos: mirror.canada.pialasse.com
* smeupdates: mirror.canada.pialasse.com
* updates: mirror.netflash.net
pgdg10 | 4.1 kB 00:00
<span style="color:red">Aucun paquet marqué pour mise à jour</span>

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur et on s'assure que java script et les témoins soient activés.

On se rend à notre site et on s'assure que tout fonctionne correctement: http://192.168.1.11.


=== RH-Python36 ===
Mise à jour de la Collection RH-Python36.
# yum update -y --enablerepo=centos-sclo-rh rh-python36<nowiki>*</nowiki>

Modules complémentaires chargés : fastestmirror, smeserver
Configuration du processus de mise à jour
Loading mirror speeds from cached hostfile
* base: centos.mirror.netelligent.ca
* smeaddons: mirror.canada.pialasse.com
* smeextras: mirror.canada.pialasse.com
* smeos: mirror.canada.pialasse.com
* smeupdates: mirror.canada.pialasse.com
* updates: centos.mirror.netelligent.ca
<span style="color:red">Aucun paquet marqué pour mise à jour</span>


'''Vérification du site Odoo'''

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur et on s'assure que java script et les témoins soient activés.

On se rend à notre site et on s'assure que tout fonctionne correctement: http://192.168.1.11.


=== npm/node ===
''Référence'': https://fr.wikipedia.org/wiki/Npm.

L'utilitaire <code>npm</code> est le gestionnaire officiel des paquets de '''Node.js'''.

Depuis la version 0.6.3 de Node.js:
* npm fait partie de l'environnement et est donc automatiquement installé par défaut.
* npm fonctionne avec un terminal et gère les dépendances pour une application.
* npm permet également d'installer des applications Node.js disponibles dans le dépôt npm.


'''Impacts sur less et lessc'''

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Lors de l'installation initiale d'Odoo-11, il ne faut pas installer la dernière version car, elle générera une <span style="color:red">erreur de style</span> dûe à l'utilitaire <code>lssc</code> qui ne sera pas reconnue.
{| class="wikitable" style="width: 100%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
|<span style="color:red">'''Style error'''</span>
The style compilation failed, see the error below. Your recent actions may be the cause, please try reverting the changes you made.<br>
(b'', b'The "--no-js" argument is deprecated, as inline JavaScript is disabled by default. Use "--js" to enable inline JavaScript (not recommended).<br>
[TypeError: Object function Object() { [native code] } has no method 'assign']')This error occured while compiling the bundle 'web.assets_common' containing:<br>
<nowiki> - /web/static/lib/bootstrap/less/variables.less</nowiki><br>
...
|}

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Odoo n'est pas renommé pour sa compatibilité avec les versions les plus récentes des logiciels prérequis.

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;[[Image:017-IconeAstuce.png|25px]]&nbsp;&nbsp;Il est <u>plus que fortement recommandé</u> de toujours utiliser un système de développement pour vérifier les mises à jours du code Odoo et <u>surtout pour les logiciels prérequis</u>.

Vous pouvez consulter le document suivant pour la création d'un clone d'un Serveur SME: https://www.micronator.org/affaires/produit/micronator-101-supplementsme-backuppc/

On vérifie la version actuelle.
# npm --version

<span style="color:red">6.1.0</span>


'''Mise à jour'''

Mise à jour de <code>npm/node</code>.
# npm install -g npm

/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
/usr/bin/npx -> /usr/lib/node_modules/npm/bin/npx-cli.js
+ npm@6.4.1
added 8 packages from 4 contributors, <span style="color:red">removed 35 packages and updated 38 packages</span> in 15.024s

On vérifie la nouvelle version de npm.
# npm --version

<span style="color:red">6.4.1</span>


'''Vérification du site Odoo'''

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur et on s'assure que java script et les témoins soient activés.

On se rend à notre site et on s'assure que tout fonctionne correctement: http://192.168.1.11.


'''Retour à la version originalement installée'''

Au cas où la nouvelle version occasionnerait des problèmes, on peut retourner à la version originalement installée.
# npm install -g npm@<span style="color:red">6.1.0</span>

/usr/bin/npm -> /usr/lib/node_modules/npm/bin/npm-cli.js
/usr/bin/npx -> /usr/lib/node_modules/npm/bin/npx-cli.js
+ npm@6.1.0
added 551 packages from 158 contributors, removed 256 packages and updated 23 packages in 21.123s

On vérifie.
npm --version

<span style="color:red">6.1.0</span>

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur et on s'assure que java script et les témoins soient activés.

On se rend à notre site et on s'assure que tout fonctionne correctement: http://192.168.1.11.


=== less et less-plugin-clean-css ===
Pour éviter les erreurs de certificats SSL et de téléchargement.
# npm config set strict-ssl false

Mise à jour de less et de less-plugin-clean-css.
# npm install -g less less-plugin-clean-css

/usr/bin/lessc -> /usr/lib/node_modules/less/bin/lessc
+ less@3.8.1
+ less-plugin-clean-css@1.5.1
<span style="color:red">updated 2 packages</span> in 4.086s


'''Vérification du site Odoo'''

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur et on s'assure que java script et les témoins soient activés.

On se rend à notre site et on s'assure que tout fonctionne correctement: http://192.168.1.11.


=== wkhtmltox ===
Si ce n'est déjà fait, on crée un répertoire de travail.
# mkdir /temp

On s'y rend.
# cd /temp/

On nettoie le répertoire <code>/temp</code> en supprimant tout ce qui pourrait s'y trouver.
# rm -rf *


'''''Dépendances pour wkhtmltopdf'''''

Mise à jour des dépendances.
# yum update -y fontconfig libpng libX11 libXext libXrender xorg-x11-fonts-Type1 xorg-x11-fonts-75dpi

Modules complémentaires chargés : fastestmirror, smeserver
Configuration du processus de mise à jour
Loading mirror speeds from cached hostfile
* base: centos.mirror.ca.planethoster.net
* smeaddons: mirror.canada.pialasse.com
* smeextras: mirror.canada.pialasse.com
* smeos: mirror.canada.pialasse.com
* smeupdates: mirror.canada.pialasse.com
* updates: centos.mirror.vexxhost.com
<span style="color:red">Aucun paquet marqué pour mise à jour</span>

S'il existe des mises à jour, elles s'afficheront ici et seront installées.


'''''wkhtmltox'''''

Pour trouver la dernière version de <code>wkhtmltopdf</code> on se rend à l'URL: https://github.com/wkhtmltopdf/wkhtmltopdf/releases/.

[[Image:0000-Odoo-11-wkhtmltox-2.png|top|right|500px|border]]
En commençant avec la version 0.12.5, on peut utiliser un RPM pour la mise à jour de wkhtmltox.
Sous la dernière version, on claque ''(clic droit)'' sur le fichier '''...centos6.x86_64.rpm''' > Copier l'adresse du lien.



Présentement pour nous, c'est la version 0.12.5 et le lien est: http://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos6.x86_64.rpm










Dans le répertoire de travail, on entre <code>rpm -Uvh</code> suivi d'un espace puis, on colle le lien copié ci-dessus.

# <span style="color:red">rpm -Uvh</span> https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos6.x86_64.rpm

Récupération de https://github.com/wkhtmltopdf/wkhtmltopdf/releases/download/0.12.5/wkhtmltox-0.12.5-1.centos6.x86_64.rpm
Préparation... ########################################### [100%]
1:wkhtmltox ########################################### [100%]

On vérifie les exécutables et leur version.
# which wkhtmltopdf

<span style="color:red">/usr/local/bin/wkhtmltopdf</span>

# wkhtmltopdf --version

<span style="color:red">wkhtmltopdf 0.12.5</span> (with patched qt)

# which wkhtmltoimage

<span style="color:red">/usr/local/bin/wkhtmltoimage</span>

# wkhtmltoimage --version

<span style="color:red">wkhtmltoimage 0.12.5</span> (with patched qt)


'''''Vérification du site Odoo'''''

[[Image:019-IconeTruc-32px.png|25px]]&nbsp;&nbsp;On vidange l'historique de notre navigateur et on s'assure que java script et les témoins soient activés.

On se rend à notre site et on s'assure que tout fonctionne correctement: http://192.168.1.11.


'''''Signalisation des changements'''''

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;On peut signaler les changements tout de suite ou attendre après la mise à jour du Serveur SME.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;S'il n'y a pas de mises à jour pour le Serveur SME, il faudra obligatoirement signaler les changements précédents.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Si on a fait quelques changements, on les signale avec les commandes traditionnelles.

Peut prendre un certain temps, être patient!
# signal-event post-upgrade; signal-event reboot


= Certificat Let's Encrypt =
<br>
<center><span style="color:red">[[Image:015-IconeASurveiller_APT.png|40px]]&nbsp;&nbsp;<span style="font-size:125%">'''Seulement pour une installation sur un Serveur SME <u>connecté directement à l'Internet'''</u></span>.</span></center>

'''Description'''

Un certificat émis par l'autorité de certification Let's Encrypt vous permettra de chiffrer les connexions de notre serveur avec une clé TLS reconnue mondialement. Les usagers pourront utiliser http'''<u>s</u>'''.

Ce chapitre est inspiré de la Contrib '''Letsencrypt''' produite par: DanB35, Unnilennium, Mdo, Mercyh, RayMitchell et Gieres à l'URL: https://wiki.contribs.org/Letsencrypt.

''Référence'': https://fr.wikipedia.org/wiki/Let's_Encrypt.

Let's Encrypt est une autorité de certification (CA) lancée le 3 décembre 2015 ''(Bêta Version Publique)''. Cette autorité fournit des certificats gratuits X.509 pour le protocole cryptographique TLS au moyen d'un mécanisme automatisé destiné à se passer du processus complexe actuel impliquant la création manuelle, la validation, la signature, l'installation et le renouvellement des certificats pour la sécurisation des sites Internet.


'''Installation'''

On installe la Contrib smeserver-letsencrypt.
# yum install -y --enablerepo=smecontribs smeserver-letsencrypt

Modules complémentaires chargés : fastestmirror, smeserver
... | 3.4 kB 00:00
Téléchargement des paquets :
(1/2): dehydrated-0.5.0-3.el6.sme.noarch.rpm | 28 kB 00:00
(2/2): smeserver-letsencrypt-0.4-4.noarch.rpm | 27 kB 00:00
--------------------------------------------------------------------------------------------
Total 445 kB/s | 56 kB 00:00
...
Installé:
smeserver-letsencrypt.noarch 0:0.4-4

Dépendance(s) installée(s) :
dehydrated.noarch 0:0.5.0-3.el6.sme

Terminé !

==============================================================
WARNING: You now need to run BOTH of the following commands
to ensure consistent system state:

<span style="color:red">signal-event post-upgrade; signal-event reboot</span>

You should run these commands unless you are certain that
yum made no changes to your system.
==============================================================


'''''Signalisation des changements'''''

On applique les changements en signalant une mise à jour et un réamorçage.
# signal-event post-upgrade ; signal-event reboot

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Ne pas signaler les changements pourrait empêcher la Contrib de fonctionner correctement et vos certificats ne seront pas renouvelés.


'''''Mise à jour de la Contrib'''''

Votre serveur installera les mises à jour disponibles dans le dépôt de logiciels smecontribs si elles sont disponibles.

<span style="color:blue">Exemple:</span>
# yum update -y smeserver-letsencrypt dehydrated --enablerepo=smecontribs

Modules complémentaires chargés : fastestmirror, smeserver
Configuration du processus de mise à jour
Loading mirror speeds from cached hostfile
* base: centos.ca-west.mirror.fullhost.io
* smeaddons: mirror.canada.pialasse.com
* smecontribs: mirror.canada.pialasse.com
* smeextras: mirror.canada.pialasse.com
* smeos: mirror.canada.pialasse.com
* smeupdates: mirror.canada.pialasse.com
* updates: centos.mirror.vexxhost.com
<span style="color:red">Aucun paquet marqué pour mise à jour</span>


'''''Signalisation des changements'''''

Si vous avez fait une mise à jour, vous devez signaler les changements.

<span style="color:blue">Exemple:</span>
# signal-event post-upgrade ; signal-event reboot


'''Configuration'''

'''''Domaines'''''

On affiche nos domaines.
# db domains show

<span style="color:red">micronator-101.org</span>=domain
Content=Primary
Description=Primary domain
Nameservers=localhost
Removable=no
SystemPrimaryDomain=yes

Pour chaque domaine que vous souhaitez inclure dans le certificat, exécutez la commande:

<span style="color:blue">Exemple:</span>
{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
| # db <span style="color:red">domains</span> setprop <span style="color:purple">nom-du-domaine</span> letsencryptSSLcert enabled<br>
|}

Pour chaque hôte que vous souhaitez inclure dans le certificat, exécutez la commande:

<span style="color:blue">Exemple:</span>
{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
| # db <span style="color:red">hosts</span> setprop <span style="color:purple">nom-complet-de-l-hote</span> letsencryptSSLcert enabled<br>
|}


'''''Hôtes'''''

Lorsqu'un domaine est ajouté à un Serveur SME, plusieurs noms d'hôtes sont créés automatiquement. Ceux-ci incluent: '''ftp'''.mon-domaine.com, '''mail'''.mon-domaine.com, '''nom-du-serveur'''.mon-domaine.com, '''proxy'''.mon-domaine.com, '''wpad'''.mon-domaine.com et '''www'''.mon-domaine.com.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Lorsque Let's Encrypt lance les défis pour une liste de noms d'hôtes et qu'un de ceux-ci ne répond pas, le défi échoue et le certificat n'est pas généré.

La cause principale des défis non relevés est qu'il n'existe pas d'enregistrements '''DNS A''' ou '''MX''' pour tous les noms d'hôtes ajoutés au certificat. La plupart des administrateurs de systèmes ne créent pas tous les enregistrements '''DNS''' nécessaires et le certificat n'est pas généré.

Les noms d'hôtes chez le régistraire du domaine '''micronator-101.org'''.

<center>
{| class="wikitable" style="width: 80%; background-color:#ffffff;"
|- style="vertical-align:top;"
|[[Image:0000-Odoo-11-Cname-A.png|center|top|450px|border]]
||[[Image:0000-Odoo-11-Cname-B.png|center|top|450px|border]]
|}
</center>

On affiche les noms d'hôtes sur notre Serveur SME.
# db hosts show | grep .org

'''ftp'''.micronator-101.org=host
'''mail'''.micronator-101.org=host
'''odoo-11'''.micronator-101.org=host
'''proxy'''.micronator-101.org=host
'''wpad'''.micronator-101.org=host
'''www'''.micronator-101.org=host


'''''Choix des domaines et des hôtes'''''

Si on veut obtenir un certificat pour tous ''(all)'' les domaines et tous les noms d'hôtes.

<span style="color:blue">Exemple:</span>
{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
| # config setprop letsencrypt configure all<br>
|}

La commande <code>config setprop letsencrypt configure all</code> est susceptible de provoquer une erreur de défi principalement à cause du nom du serveur i.e. <span style="color:red">odoo-11</span>.micronator-101.org.

Pour inclure individuellement des hôtes ou des domaines, on commence par activer le paramètre <code>none</code> et ensuite on ajoute les domaines et les noms d'hôtes désirés.
# config setprop letsencrypt configure none


'''''Domaine'''''

Nous voulons seulement le domaine '''micronator-101.org'''.
On inclut '''micronator-101.org'''.
# db domains setprop micronator-101.org letsencryptSSLcert enabled

On vérifie.
# db domains show micronator-101.org

<span style="color:blue">micronator-101.org</span>=domain
Content=Primary
Description=Primary domain
Nameservers=localhost
Removable=no
SystemPrimaryDomain=yes
letsencryptSSLcert=enabled


'''''Hôtes'''''

Nous voulons seulement: '''ftp'''.micronator-101.org, '''mail'''.micronator-101.org, '''proxy'''.micronator-101.org, '''wpad'''.micronator-101.org et '''www'''.micronator-101.org.

On inclut '''ftp'''.micronator-101.org.
# db hosts setprop '''ftp'''.micronator-101.org letsencryptSSLcert enabled

On inclut '''mail'''.micronator-101.org.
# db hosts setprop '''mail'''.micronator-101.org letsencryptSSLcert enabled

On inclut '''proxy'''.micronator-101.org.
# db hosts setprop '''proxy'''.micronator-101.org letsencryptSSLcert enabled

On inclut '''wpad'''.micronator-101.org.
# db hosts setprop '''wpad'''.micronator-101.org letsencryptSSLcert enabled

On inclut '''www'''.micronator-101.org.
# db hosts setprop '''www'''.micronator-101.org letsencryptSSLcert enabled


'''''Autres propriétés de configuration'''''

Aucun autre paramètre n'est obligatoire cependant, il est recommandé de configurer une adresse courriel. Si un problème est rencontré lors du renouvellement de votre certificat, les serveurs de Let's Encrypt vous en informeront.


'''''Ajout d'une adresse courriel'''''

Le domaine de messagerie spécifié n'a nul besoin de correspondre à l'un des domaines pour lesquels vous demandez un certificat.
# config setprop letsencrypt email admin@'''micronator.org'''


'''''Longueur de la clé privée'''''

Si vous ne voulez pas la valeur par défaut de '''4096''' bits, vous pouvez également définir la longueur de la clé privée de votre certificat,. Ceci ne devrait pas être nécessaire dans la plupart des cas mais, si vous le souhaitez, utilisez la commande ci-dessous pour le faire.

<span style="color:blue">Exemple:</span>
{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;"
| # config setprop letsencrypt keysize LONGUEUR-EN-BITS<br>
|}


'''Termes et conditions'''

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Veuillez d'abord lire les conditions d'utilisation de Let's Encrypt: https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf

<u>Si vous acceptez les termes et conditions</u> de Let's Encrypt, lancez la commande ci-dessous.
# config setprop letsencrypt ACCEPT_TERMS '''yes'''


'''Activation du mode TEST'''

L'étape suivante consiste à activer le mode '''TEST'''.

Ce mode va obtenir des certificats du serveur de TEST de Let's Encrypt. Les limites 5/7 ''(5 certificats par 7 jours)'' ne s'appliqueront pas. Toutes erreurs ou autres problèmes rencontrés ne vous empêchera pas, plus tard, d'obtenir votre certificat de Production.

On active le mode '''TEST'''.
# config setprop letsencrypt status test

On signale les changements. ''(Peut prendre quelques secondes.)''
# signal-event console-save


'''Vérification'''

'''''Domaines et hôtes'''''

# cat /etc/dehydrated/domains.txt

<span style="color:blue">micronator-101.org</span> '''ftp'''.micronator-101.org '''mail'''.micronator-101.org '''proxy'''.micronator-101.org '''wpad'''.micronator-101.org '''www'''.micronator-101.org

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Le certificat sera émis au nom du premier domaine de la ligne i.e. <span style="color:blue">micronator-101.org</span>. Pour cette raison, toujours débuter par l'ajout du/''(des)'' domaine''(s)'' et ensuite, ajouter les hôtes.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;Assurez-vous qu'il n'y ait qu'une seule ligne dans le fichier <code>domains.txt</code> car un certificat est créé pour chacune des lignes. Si vous avez plusieurs lignes, vous pourriez ainsi dépasser la limite de 5/7 pour une demande en <u>mode Production</u>.


'''''Adresse courriel'''''
# cat /etc/dehydrated/config | grep CONTACT_EMAIL

CONTACT_EMAIL=<span style="color:red">admin@micronator.org</span>


'''Lancement du script dehydrated'''

Vous pouvez maintenant exécuter le script <code>dehydrated</code> pour la première fois et vous assurer qu'il lui est possible de se connecter aux serveurs de Let's Encrypt, valider les noms d'hôtes que vous demandez et émettre le certificat.

[[Image:015-IconeASurveiller.png|25px]]&nbsp;&nbsp;La commande est sur la première ligne seulement, après le premier dièse <span style="color:red">#</span>. La ligne avec le deuxième dièse <span style="color:blue">#</span> fait partie de la sortie de la commande,
<span style="color:red">#</span> dehydrated -c

<span style="color:blue">#</span> INFO: Using main config file /etc/dehydrated/config
Processing micronator-101.org with alternative names: ftp.micronator-101.org mail.micronator-101.org proxy.micronator-101.org wpad.micronator- 101.org www.micronator-101.org
+ Signing domains...
+ Creating new directory /etc/dehydrated/certs/micronator-101.org ...
+ Creating chain cache directory /etc/dehydrated/chains
+ Generating private key...
+ Generating signing request...
+ <span style="color:red">Requesting challenge</span> for micronator-101.org...
+ Requesting challenge for ftp.micronator-101.org...
+ Requesting challenge for mail.micronator-101.org...
+ Requesting challenge for proxy.micronator-101.org...
+ Requesting challenge for wpad.micronator-101.org...
+ Requesting challenge for www.micronator-101.org...
+ <span style="color:red">Responding to challenge</span>Responding to challenge for micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for ftp.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for mail.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for proxy.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for wpad.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for www.micronator-101.org...
+ Challenge is valid!
+ <span style="color:red">Requesting certificate</span>...
+ Checking certificate...
+ Done!
+ Creating <span style="color:red">fullchain.pem</span>...
+ Walking chain...
Set up <span style="color:blue">modSSL db keys</span>
<span style="color:blue">Signal events</span>
All complete
+ <span style="color:red">'''''Done!'''''</span>


'''Vérification du certificat'''

Si la commande fonctionne sans erreur, essayez de vous connecter à la page du gestionnaire du serveur. Vous devriez voir une erreur indiquant que le certificat de sécurité n'a pas été émis par une autorité de certification approuvée. C'est parfaitement normal. Cependant, il devrait incorporer tous les noms d'hôtes que vous avez inclus et être valide pour les quatre-vingt-dix prochains jours.

[[Image:0000-Odoo-Verif-0.png|top|right|400px|border]]
Avec un Serveur SME branché directement à l'Internet, on peut utiliser le '''FQDN''' du domaine.

Avec Firefox, on se connecte au gestionnaire.


<center>
{| class="wikitable" style="width: 80%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
|On clique le cadenas, puis <span style="color:red">></span>.
||'''''Plus d'informations'''''.
||'''''Afficher le certificat'''''.
|- style="vertical-align:top;"
|[[Image:0000-Odoo-Verif-1.png|center|top|330px|border]]
||[[Image:0000-Odoo-Verif-2.png|center|top|330px|border]]
||[[Image:0000-Odoo-Verif-3.png|center|top|330px|border]]
|}
</center>


<center>
{| class="wikitable" style="width: 80%; background-color:#ffffff;"
|- style="vertical-align:bottom;font-family: Courier New;"
|<nowiki>-</nowiki> Certificat de test car, émis par Fake LE Intermediate XI.

- Détails.
||<nowiki>-</nowiki> Nom alternatif du sujet du cer­tificat.

- Nos noms d'hôtes sont présents.

||&nbsp;

Valide pour 90 jours.
|- style="vertical-align:top;"
|[[Image:0000-Odoo-Verif-4.png|center|top|330px|border]]
||[[Image:0000-Odoo-Verif-5.png|center|top|330px|border]]
||[[Image:0000-Odoo-Verif-6.png|center|top|330px|border]]
|}
</center>


'''Mode Production'''

Tout fonctionne correctement, on peut passer en mode '''Production''' et demander un certificat officiel.

On active le mode Production.
# config setprop letsencrypt status enabled

On signale les changements qui peut prendre quelques secondes.
# signal-event console-save


'''''Demande d'un certificat officiel'''''

On fait la demande d'un certificat officiel.

[[Image:016-IconeNote.png|25px]]&nbsp;&nbsp;Le paramètre <span style="color:red"><code>-x</code></span> est nécessaire pour forcer le <code>script dehydrated</code> à obtenir un nouveau certificat, même s'il est encore valide pour plus de 30 jours.
<span style="color:red">#</span> dehydrated -c -x

<span style="color:blue">#</span> INFO: Using main config file /etc/dehydrated/config
+ Generating account key...
+ Registering account key with ACME server...
Processing micronator-101.org with alternative names: ftp.micronator-101.org mail.micronator-101.org proxy.micronator-101.org wpad.micronator-101.org www.micronator-101.org
+ Checking domain name(s) of existing cert... unchanged.
+ Checking expire date of existing cert...
+ Valid till Sep 25 00:05:33 2018 GMT <span style="color:blue">(Longer than 30 days)</span>. <span style="color:red">Ignoring because renew was forced!</span>
+ Signing domains...
+ Generating private key...
+ Generating signing request...
+ Requesting challenge for micronator-101.org...
+ Requesting challenge for ftp.micronator-101.org...
+ Requesting challenge for mail.micronator-101.org...
+ Requesting challenge for proxy.micronator-101.org...
+ Requesting challenge for wpad.micronator-101.org...
+ Requesting challenge for www.micronator-101.org...
+ Responding to challenge for micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for ftp.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for mail.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for proxy.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for wpad.micronator-101.org...
+ Challenge is valid!
+ Responding to challenge for www.micronator-101.org...
+ Challenge is valid!
+ Requesting certificate...
+ Checking certificate...
+ Done!
+ Creating fullchain.pem...
+ Walking chain...
Set up modSSL db keys
Signal events
All complete
+ <span style="color:red">Done!</span>

Si cette demande a réussie, félicitations! Vous avez obtenu un certificat TLS officiel et valide qui se renouvellera automatiquement à perpétuité.


Si vous recevez l'erreur ci-dessus, simplement relancer la demande.
# INFO: Using main config file /etc/dehydrated/config
<span style="color:red">ERROR: Problem connecting to server</span> (get for https://acme-v01.api.letsencrypt.org/directory; <span style="color:red">curl returned with 6</span>)


'''''Vérification'''''

Une fois que vous avez obtenu votre certificat, testez-le en vous rendant chez '''Qualsys SSLLabs''', https://www.ssllabs.com/ssltest/ et soumettez votre FQDN ''(ex: <span style="color:blue">micronator-101.org</span>)'' pour vous assurer que tout fonctionne correctement.

<center>
{| class="wikitable" style="width: 80%; background-color:#ffffff;"
|- style="vertical-align:top;"
|[[Image:0000-Odoo-11-Qualsys-A.png|center|top|450px|border]]
||[[Image:0000-Odoo-11-Qualsys-B.png|center|top|450px|border]]
|}
</center>

<center>
{| style="width: 80%; background-color:#FFFFFF;"
|- style="vertical-align:middle;"
| <div style="text-align:right;">La remarque ci-dessous peut être ignorée car, le Serveur SME ne supporte pas '''Forward Secrecy'''.</div>
|}
</center>
<center>
{| class="wikitable" style="width: 80%; background-color:#FFEED9;"
|- style="vertical-align:top;font-family: Courier New;text-align: center;"
|This server does not support Forward Secrecy with the reference browsers. Grade capped to B.
|}
</center>


<center><span style="font-size:125%">'''La Contrib Let's Encrypt est installée et fonctionne parfaitement.'''</span></center>


<span style="font-size:120%">'''Désintallation d'Odoo'''</span>

[[Image:016-IconeNote.png|caption|32px]]&nbsp;&nbsp;Vu que le Serveur SME ne sert uniquement qu'à rouler Odoo, il n'y a pas de désinstallation.<br>


<hr style="width:66%; margin: 0 auto;">


<span style="font-size:120%">'''Prochainement'''</span>

<span style="font-size:110%">'''SME-9.2 / Odoo-11 & HTTPS'''</span>

Cette marche à suivre fera suite à celle-ci et décrira les étapes pour assurer une connexion sécuritaire à Odoo-11 roulant sur un Serveur SME local ou sur une machine virtuelle. Cette dernière pouvant servir comme système de test et développement.

[[Image:0000-Odoo-11-ButFinal-LetsEncrypt.png|top|center|700px]]

<span style="font-size:120%">'''Mot de la fin'''</span>

Une fois que vous maîtrisez tous les aspects de: Fail2ban, Let's Encrypt, Odoo, BackupPC et VirtualBox, vous pouvez créer un réseau de Production incluant un serveur Odoo, un serveur de sauvegardes et un serveur de développement; ce qui est le but ultime que nous vous souhaitons!


[[Image:Odoo-11-BanniereDeLaVictoire-APT.png|caption|36px]]&nbsp;&nbsp;Victoire totale, hissons la bannière de la victoire.
<br>
<br>
----
<references/>
[[Category:Howto]] [[Category:Howto/fr]]
2,785

edits

Navigation menu