Installation pour Centos / Redhat
=========================================

| | |
| ------------------------------------ | ------------------------------------------------------------ |
| ![Information](../img/icon-info.png) | Veuillez prendre connaissance des [prérequis](../guat_prerequisites/home.md) avant de commencer. |


## Installation de l'environnement nécessaire à Maarch Courrier

| | |
| ------------------------------------ | ------------------------------------------------------------ |
| ![Information](../img/icon-info.png) | Pensez à vérifier l'espace disque de votre environnement en tapant la commande :  df -h|
 
L'installation suivante a été réalisée avec CentOs7.5  
  
Mise à jour du système

    yum update

Installation de quelques utilitaires

    yum install nano mlocate wget net-tools
    yum install httpd
    yum install setroubleshoot-server

Création d'un utilisateur et d'un groupe dédié à l'application

    useradd maarch
    passwd maarch
    usermod -a -G apache maarch

## Installation des prerequis

### Apache

Autoriser les ports http et https

    firewall-cmd --permanent --add-port=80/tcp
    firewall-cmd --permanent --add-port=443/tcp
    firewall-cmd --reload

Faire en sorte qu'Apache se lance automatiquement au démarrage du système

    systemctl start httpd
    systemctl enable httpd

Si nécessaire, permettre l'accès au répertoire /var/www/html

    yum remove mod_security

Configurer selinux pour autoriser la lecture / écriture dans les répertoires web et exécution batch via httpd

    #pour savoir ce qui bloque dans selinux : sealert -a /var/log/audit/audit.log | less
    setsebool -P httpd_execmem 1
    setsebool -P httpd_can_network_connect 1
    setsebool -P nis_enabled 1
    #autoriser php via apache à accéder aux répertoires des docservers
    setsebool httpd_enable_homedirs on
    #permettre à apache d'écrire dans /opt/maarch -> permission d'écrire dans un répertoire public
    setsebool allow_httpd_anon_write 1
    cd /var/www/html/
    chown -R maarch: .
    find . -type f -exec chmod 0644 {} \;
    find . -type d -exec chmod 0755 {} \;
    chcon -t httpd_sys_content_t . -R
    chcon -t httpd_sys_rw_content_t . -R

Préparation de la conf apache, éditer seulement les éléments nécessaires du fichier httpd.conf

```  
    nano /etc/httpd/conf/httpd.conf
    User maarch
    Group maarch
```
```xml
    <Directory "/var/www/html/MaarchCourrier">
        AllowOverride All
        Options -Indexes
        Options FollowSymLinks Includes ExecCGI

        SetEnv MAARCH_TMP_DIR "/tmp/"
        SetEnv MAARCH_ENCRYPT_KEY "Security Key Maarch Courrier 2008"

        <FilesMatch ".*">
            Order deny,allow
            Deny from all
        </FilesMatch>
        # Root to allow index.php
        <FilesMatch "^$">
            Order allow,deny
            Allow from all
        </FilesMatch>
        # Core root
        <FilesMatch "^(index|ws_server|static|merged_js|merged_css|reopen|applet_launcher|applet_controller|log)\.php$">
            Order allow,deny
            Allow from all
        </FilesMatch>
        # App static files
        <FilesMatch "\.(css|js|jpg|jpeg|png|gif|ttf|woff|woff2|svg|ico|mjs)$">
            Order allow,deny
            Allow from all
        </FilesMatch>
        # App tools files
        <FilesMatch "\.(htm|html|jar|jnlp)$">
            Order allow,deny
            Allow from all
        </FilesMatch>
    </Directory>
```

```    
    mkdir /var/www/html/MaarchCourrier
    chown -R maarch: /var/www/html
    service httpd restart
    ps -aux | grep httpd
```  

En environnement multicustom, si l'accès au custom se fait via la fin du chemin, ex :

    https://monserveurmaarch.com/moncustom/

Pour éviter d'avoir à ajouter un slash à la fin du chemin (et éviter une erreur 403), il faut rajouter la condition suivante dans votre vhost :

        <FilesMatch "^(custom_1|custom_2|custom_3|custom_n)$">
            Order allow,deny
            Allow from all
        </FilesMatch>

Remplacer custom_1...custom_n par l'id de vos customs

Vous pourrez ainsi y accéder via l'url :

    https://monserveurmaarch.com/moncustom

### Installation de Postgresql

    yum install postgresql postgresql-server postgresql-contrib
    postgresql-setup initdb
    systemctl start postgresql
    systemctl enable postgresql

Modifier le mot de passe du compte postgres

    su postgres
    psql
    ALTER USER postgres WITH PASSWORD 'maarch';
    \q

Créer l'utilisateur Maarch

    psql
    CREATE USER maarch WITH ENCRYPTED PASSWORD 'maarch';
    ALTER ROLE maarch WITH CREATEDB;
    ALTER USER maarch WITH SUPERUSER;
    \q
    exit

Modifier le mode de connexion au serveur postgres

    su
    nano /var/lib/pgsql/data/pg_hba.conf
    # modifier local all all peer
    # par local all all md5
    # et host all all 127.0.0.1/32 peer
    # par host all all 127.0.0.1/32 md5
    # et host all all ::1/128 peer
    # par host all all ::1/128 md5
    systemctl reload postgresql

### Installation de php 7.3

Attention ! il est fortement déconseillé d'installer php en version 5 qui est en fin de support.

    yum install -y https://rpms.remirepo.net/enterprise/remi-release-7.rpm

Suppression des versions de php existantes

    yum remove php-common mod_php php-cli

Installation des principaux paquets de php 7

    yum install -y --enablerepo=remi-php73 php

Installation des paquets nécessaires à MaarchCourrier

    yum install php73 php73-xml php73-gd php73-xmlrpc php73-mbstring php73-pdo php73-imap php73-ldap php73-pgsql php73-imagick php73-soap php73-mbstring php73-json


### Vérifier l'application des paramètres suivants dans le php.ini

    nano /etc/php.ini
    max_execution_time = 300
    max_input_time = 300
    memory_limit = 1024M
    error_reporting = E_ALL & ~E_DEPRECATED
    display_errors = On
    post_max_size = 128M
    upload_max_filesize = 128M
    max_file_uploads = 100
    error_log = php_errors.log

Modification des droits du répertoire contenant les sessions

    chown -R maarch: /var/lib/php/mod_php/session/

Prise en compte des installations php par apache

    systemctl reload httpd.service

### Installation de phpPgAdmin pour administrer la base de données

    yum install phpPgAdmin
    nano /etc/httpd/conf.d/phpPgAdmin.conf
    # ajouter Require all granted
    nano /etc/phpPgAdmin/config.inc.php
    # éditer $conf['servers'][0]['host'] = 'localhost';
    # et $conf['owned_only'] = true;)

### Installation des paquets complémentaires à MaarchCourrier

    yum install unzip p7zip ghostscript ImageMagick
    yum install poppler-utils
    yum install openjdk-8-jre
    yum install java-1.8.0-openjdk
    yum install git
    yum install nmap
    yum install unoconv

### Convertir les html en imagettes

    cd /tmp
    wget https://downloads.wkhtmltopdf.org/0.12/0.12.4/wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
    tar xvf wkhtmltox-0.12.4_linux-generic-amd64.tar.xz
    mv wkhtmltox/bin/wkhtmlto* /usr/bin
    chown maarch: /usr/bin/wkhtmltopdf
    chown maarch: /usr/bin/wkhtmltoimage
    

## Extraction de Maarch Courrier depuis les dépôts GIT

```sh
cd /var/www/html/MaarchCourrier/
git clone -b 20.10 https://labs.maarch.org/maarch/MaarchCourrier .
git checkout tags/$(git tag --sort=committerdate | grep -E '20.10.+([0-9])$' | tail -1) -b $(git tag --sort=committerdate | grep -E '20.10.+([0-9])$' | tail -1)
git config core.fileMode false
```


| | |
| ------------------------------------ | ------------------------------------------------------------ |
| ![Information](../img/icon-info.png) |  Si vous utilisez un proxy, il faut exécuter cette commande en l'adaptant selon votre environnement : git config --global http.proxy http://proxyuser:proxypwd@proxy.server.com:8080 |

Comme le serveur Apache devra écrire des fichiers dans les dossiers de l'application, nous allons devoir mettre l'utilisateur Apache comme propriétaire de ces dossiers, et n'autoriser que lui à accéder à ces dossiers.

Selon les distributions de Linux, l'utilisateur Apache peut avoir plusieurs noms.

Ici nous utiliserons l'utilisateur applicatif **maarch**.

    cd /var/www/html/
    chown -R maarch:maarch .
    find . -type f -exec chmod 0644 {} \;
    find . -type d -exec chmod 0755 {} \;
    chcon -t httpd_sys_rw_content_t /var/www/html/ -R

## Création d'un répertoire dédié pour les applicatifs Maarch

Nous vous proposons de créer un nouveau répertoire qui permettra d'installer des programmes complémentaires à MaarchCourrier et de stocker les documents et indexes de MaarchCourrier

    mkdir -p /opt/maarch/docservers/
    cd /opt/maarch
    chown -R maarch:maarch .
    find . -type f -exec chmod 0644 {} \;
    find . -type d -exec chmod 0755 {} \;
    chcon -t httpd_sys_rw_content_t /opt/maarch/ -R

## Personnaliser le jeu de données SQL de l'application avant son installation

Vous pouvez si vous le souhaiter ajouter un jeu de données qui servira lors de l'installation de l'application.

Un jeu de données SQL contient généralement :

 * les utilisateurs
 * les groupes
 * les entités
 * le paramétrage des workflows

Ce jeu de données pourra être utilisé lors de l'intallation en remplacement du fichier ./sql/data_fr.sql.

Pour se faire, il faut déposer dans le répertoire ./sql à la racine de MaarchCourrier un ou des fichiers commençant par **data_** et ayant pour extension **.sql**, ex :

**data_monparam.sql**

Dans le cas d'une installation de MaarchCourrier en mode mutualisé (plusieurs instances MaarchCourrier sur le même serveur, vous pouvez préparer plusieurs fichiers **data_*.sql**.
Ex pour un serveur multicollectivités :

 * ./sql/data_**orleans**.sql
 * ./sql/data_**sainthilaire**.sql
 * ./sql/data_**saintjeanbraye**.sql

## Créer le crontab pour l'utilisateur Maarch

Afin que l'installeur puisse éditer le crontab de l'utilisateur **maarch**, il faut au préalable le créer

    su maarch
    crontab -e
    #écrire en entête
    MAILTO=""
    #et quitter avec la commande echap+ :wq si vous êtes dans vi

    # désactiver selinux pour que l'utilisateur maarch puisse écrire via le service apache dans la crontab de l'utilisateur maarch
    setenforce 0

## Lancement de l'installeur en ligne

### Etape 1

Ouvrez un navigateur FireFox (recommandé) ou Chrome  

### Etape 2

Dans la zone url, écrivez : http://127.0.0.1/MaarchCourrier/

### Etape 3

[Suivez les instructions de l'asssistant d'installation en ligne](online_install.md).

Et voilà, votre MaarchCourrier est installé !

## Installation de la BAN (Facultatif)

```sh
su maarch
mkdir -p /opt/maarch/docservers/[ID_DE_VOTRE_CUSTOM]/referential/ban/
cd /opt/maarch/docservers/[ID_DE_VOTRE_CUSTOM]/referential/ban/
wget https://labs.maarch.org/maarch/maarchcourrieraddressesban/raw/master/indexes.tar.gz?inline=false .
tar -zxvf indexes.tar.gz?inline=false -C .
rm indexes.tar.gz\?inline\=false
mkdir /var/www/html/MaarchCourrier/custom/[ID_DE_VOTRE_CUSTOM]/referential/ban/
cd /var/www/html/MaarchCourrier/custom/[ID_DE_VOTRE_CUSTOM]/referential/ban/
ln -s /opt/maarch/docservers/[ID_DE_VOTRE_CUSTOM]/referential/ban/ indexes
```
