# B. Mise en place

# Téléchargement des sources

Le projet Archimage est publié sous la licence [AGPL 3.0](https://www.gnu.org/licenses/agpl-3.0.en.html) et est hébergé dans la forge logicielle GitHub.

Vous pouvez télécharger la dernière version de l'applicationen [cliquant sur ce lien](https://github.com/EFAthenes/archimage/releases/tag/26.5)

Vous pouvez également consulter le code source sur la page du projet : [https://github.com/EFAthenes/archimage](https://github.com/EFAthenes/archimage)

Facultatif : installer unzip

```
sudo apt install unzip
```

Téléchargeons et plaçons le dossier de l'application dans le répertoire /var/www/ avec les droits par défaut.

```
wget https://github.com/EFAthenes/archimage/releases/download/26.5/archimage_26.5.zip

sudo mkdir -p /var/www/html

sudo unzip archimage_26.5.zip -d /var/www/html/

sudo chown www-data:www-data /var/www/html/archimage_26.5/ -Rf
```

# Installation du serveur web

Vous pouvez installer le serveur de votre choix néanmoins seul Apache2 et NginX ont été correctement testé.

Préambule : Télécharger le zip contenant les sources de l'application.

#### Apache 2

<details id="bkmrk-sudo-apt-install-apa"><summary></summary>


```bash
sudo apt install apache2
```

Nous vous invitons également à installer les modules suivants

```bash
sudo a2enmod ssl

sudo a2enmod rewrite

sudo a2enmod headers
```

Configurer le host de apache en fonction du dossier d'installation :

\*Faites pointer le dossier sur le répertoire **/var/www/archimage\_26.5/Archimage2/www/**

```
sudo nano /etc/apache2/sites-available/000-default.conf
```

Exemple de fichier de conf Apache2 :

<details><summary></summary>

```
<VirtualHost *:443>
	
	ServerName site-archimage.com
	ServerAdmin admin@archimage.com

	ErrorLog ${APACHE_LOG_DIR}/archimage-error.log
	CustomLog ${APACHE_LOG_DIR}/archimage-acces.log combined

    # ALOWW CORS
    <IfModule mod_headers.c>
  	Header always unset Access-Control-Allow-Origin
	Header add Access-Control-Allow-Origin "*"
    </IfModule>

	DocumentRoot /var/www/html/archimage_26.5/Archimage2/www/
	<Directory /var/www/html/archimage_26.5/Archimage2/www/>
        AllowOverride All
        require all granted
		LimitRequestBody 40048576000
	</Directory>

    RewriteEngine on
    
    ### /iiif/id_document/info.json
    #RewriteRule ^/iiif/([^/]+)/info\.json$ /action.php?kroute=iiif_json_public&id=$1 [L]

    ### /iiif/id_document/full/800,/0/default.jpg
    #RewriteRule ^/iiif/([^/]+)/([^/]+)/([^/]+)/([^/]+)/([^/.]+)\.([^/]+)$ /index.php?kroute=image_request_iiif&id=$1&region=$2&size=$3&rotation=$4&quality=$5&format=$6 [L]

    #### /iiif/id_document
    #RewriteRule ^/iiif/([0-9]+)$ /action.php?kroute=iiif_json_public&id=$1 [L]

   

	ErrorDocument 404 /index.php

	# Possible values include: debug, info, notice, warn, error, crit,
	LogLevel warn
	
</VirtualHost>
```

</details><span style="background-color:rgb(241,196,15);">**Non recommandé**</span> : Utiliser seulement Apache2 et donc rajouter le module Apache PHP

```bash
sudo apt install libapache2-mod-php
```

puis le recharger :

```bash
sudo systemctl reload apache2
```

**<span style="background-color:rgb(191,237,210);">Recommandé </span>rajouter PHP-FPM**

```bash
sudo apt install php8.5-fpm
sudo a2enmod proxy_fcgi setenvif
sudo a2enconf php8.5-fpm
```

\*si vous avez déjà activé Apache2 :

```
sudo a2dismod php8.5
```

Puis relancer les services :

```
sudo systemctl restart php8.5-fpm
sudo systemctl restart apache2
```

</details>
---

#### NginX

<details id="bkmrk-sudo-apt-install-ngi"><summary></summary>


```bash
sudo apt install nginx -y

sudo apt install php8.5-fpm
```

Modifier les fichiers par défaut :

```
sudo nano /etc/php/8.5/fpm/pool.d/www.conf

sudo nano /etc/nginx/sites-available/default
```

Un fichier d'exemple de cpnfiguration Nginx :

<details><summary></summary>

```
server {
    listen 443 ssl;
    server_name site-archimage.com;

    index index.php;


    # Haerdenning
    server_tokens off;
    etag off;
   
    root /var/www/html/archimage_26.5/Archimage2/www;

 location / {
    try_files $uri $uri/ =404;
  }

  # pass PHP scripts on Nginx to FastCGI (PHP-FPM) server
  location ~ \.php$ {
    include snippets/fastcgi-php.conf;

    # Nginx php-fpm sock config:
    fastcgi_pass unix:/run/php/php8.5-fpm.sock;
    # Nginx php-cgi config :
    # Nginx PHP fastcgi_pass 127.0.0.1:9000;
  }


# IIIF REWRITES
#rewrite    ^/iiif/(.*)/info.json$  "https://archimage.com/action.php?kroute=iiif_json_public&id=$1";
#rewrite ^/iiif/(.*)/(.*)/(.*)/(.*)/(.*)\.(.*)?$ https://archimage.com/index.php?kroute=image_request_iiif&id=$1&region=$2&size=$3&rotation=$4&quality=$5&format=$6;
#rewrite    ^/iiif/([0-9]+)$  "https://archimage.com/action.php?kroute=iiif_json_public&id=$1";




  # deny access to Apache .htaccess on Nginx with PHP, 
  # if Apache and Nginx document roots concur
  location ~ /\.ht {
    deny all;
  }

#    return       404;
}
```

</details>puis le recharger :

```bash
sudo nginx -t
sudo systemctl reload nginx
```

</details>

# Installation de MySQL ou MariaDb

La plateforme Archimage fonctionne indifférement avec MySQL et MariaDB, il suffira de le préciser dans le fichier de configuration.

Pour installer [MySQL par ici](#bkmrk-mysql), pour [MariaDB par là](#bkmrk-mariadb)

---

### MYSQL

#### Installation

En ligne de commande :

```shell
sudo apt update && sudo apt install mysql-server
```

S'assurer que le service s'est correctement installé :

```bash
sudo service mysql status
```

Nous recommandons d'installer la version sécurisée via

```bash
sudo mysql_secure_installation
```

#### Création d'un utilisateur

Se connecter en ligne de commande à MySQL

```bash
sudo mysql -p -u root
```

Puis créer un utilisateur, une base de données et lui affecter les droits :

```mysql
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';

CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;

GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';

FLUSH PRIVILEGES;
```

Veuillez bien noter ses informations ils seront demandés par l'application dans le fichier de configuration.

Puis quittez

```
exit;
```

<span style="text-decoration:underline;">Optionnel : </span>

Si vous comptez avoir des centaines de milliers d'enregistrements il est conseiller de rajouter de modifier la variable **sort\_buffer\_size**

```bash
sudo nano /etc/mysql/mysql.conf.d/mysqld.cnf
```

et rajouter

```
[mysqld]
sort_buffer_size=8192k
```

Et relancer le service

```bash
sudo service mysql restart
```

---

---

### MariaDb

#### Installation

En ligne de commande :

```shell
sudo apt update && sudo apt install mariadb-server mariadb-client -y
```

S'assurer que le service s'est correctement installé :

```bash
sudo service mariadb status
```

Nous recommandons d'installer la version sécurisée via

```bash
sudo mysql_secure_installation
```

Pour avoir la version :

```
mariadb --version
```

#### Création d'un utilisateur

Se connecter en ligne de commande à MySQL

```bash
sudo mariadb -p -u root
```

Puis créer un utilisateur, une base de données et lui affecter les droits (veuillez remplacer les données génériques de l'utilisateur le mot de passe) :

```mysql
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'StrongPassword123!';

CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_uca1400_ai_ci;

GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';

FLUSH PRIVILEGES;
```

Veuillez bien noter ses informations ils seront demandés par l'application dans le fichier de configuration.

Puis quittez

```
exit;
```

<span style="text-decoration:underline;">Optionnel : </span>

Si vous comptez avoir des centaines de milliers d'enregistrements il est conseiller de rajouter de modifier la variable **sort\_buffer\_size**

```bash
sudo nano /etc/mysql/mariadb.conf.d/99-custom.cnf
```

et rajouter

```
[mysqld]
sort_buffer_size=8192k
```

Et relancer le service

```bash
sudo service mariadb restart
```

# Installation de PHP

Toujours en ligne de commande veuillez installer la version de PHP et les extensions nécessaires.

**Facultatif** : Vous pouvez ajouter le repository pour obtenir des versions alternatives de PHP pour **Ubuntu version 24**

```bash
sudo add-apt-repository ppa:ondrej/php

sudo apt update && sudo apt upgrade -Y
```

<span style="text-decoration:underline;">PHP 8.4 :</span>

```bash
sudo apt install php8.4 php8.4-bcmath php8.4-bz2 php8.4-cli php8.4-common php8.4-gd php8.4-igbinary php8.4-imagick  php8.4-intl php8.4-mbstring php8.4-mysql php8.4-opcache php8.4-readline php8.4-xml php8.4-zip php8.4-curl
```

<span style="text-decoration:underline;background-color:rgb(45,194,107);">PHP 8.5 : recommandé</span>

```bash
sudo apt install php8.5 php8.5-bcmath php8.5-bz2 php8.5-cli php8.5-common php8.5-gd php8.5-igbinary php8.5-imagick php8.5-intl php8.5-mbstring php8.5-mysql php8.5-readline php8.5-xml php8.5-zip php8.5-curl
```

# Configuration de PHP

Nous allons paramétrer PHP averc des valeurs acceptables pour que l'application foncitonne normalement. À vous de les adapter en fonction des besoins et des possibilités du matériel.

Nous prenons pour exemple la version de PHP 8.5.

##### Apache : 

```bash
sudo nano /etc/php/8.5/apache2/php.ini
```

##### NginX ou Apache avec FPM : 

```bash
sudo nano /etc/php/8.5/fpm/php.ini
```

Veuillez trouver les paramètres suivants :

```
post_max_size=200M

upload_max_filesize=200M

max_file_uploads=200

memory_limit=2048M

max_input_vars=1000

date.timezone = Europe/Paris
```

Si Vips installé :

```
ffi.enable=true
zend.max_allowed_stack_size=-1
pcre.jit=0
```

Puis relancer les services :

```
sudo systemctl restart php8.5-fpm
sudo systemctl restart apache2

sudo systemctl restart php8.5-fpm
sudo systemctl restart nginx

```

# Installation de Vips

Pour les instances gérant des fichiers images de plusieurs dizaines de milliers de pixels il est recommandé de ne pas utiliser les libriairies standard de traitement d'images de PHP : GD ou Imagick)

Archimage fonctionne correctement avec ces librairies mais les performances seront médiocres pour tout ce qui est gestion du IIIF.

Afin d'améliorer les performances nous vous proposons d'utiliser [VIPS](https://www.libvips.org/), cette libraiirie s'installe de nos jours relativement simplement sous Ubuntu :

```
sudo apt-get install --no-install-recommends libvips42
```

Si vous voulez vous pouvez également installer les outils afin d'avoir plus d'information ou de modifier le paramétrage de cette librairie.

```
sudo apt install libvips-tools
```

Vérifier qu'elle est bien installée :

```
vips -v
```

Rajouter dans le php.ini

```
ffi.enable=true
zend.max_allowed_stack_size=-1
pcre.jit=0
```

# Création des dossiers nécessaires

Archimage nécessite d'utiliser certains dossiers pour un bon fonctionnement.

- Répertoire de chargement de fichier temporaire
- Répertoire de stockage de log
- Répertoire de stockage de mails envoyés
- Répertoire de stockage des fichiers numériques que va gérer Archimage
- Optionnel : répertoire de stockage de visuel généré par l'API IIIF

Tous ses dossiers nécéssitent d'avoir des droits similaires au server web.

Vous pouvez individuellement choisir leur emplacement [dans le fichier de config ](https://doc-archimage.efa.gr/books/c-lancement-du-site/page/configuration-du-fichier-config)mais nous allons vous proposer de créer directement cela :

```
sudo mkdir /var/www/archimage_dir/
sudo mkdir /var/www/archimage_dir/tmp_upload
sudo mkdir /var/www/archimage_dir/logs
sudo mkdir /var/www/archimage_dir/mails
sudo mkdir /var/www/archimage_dir/repository
sudo mkdir /var/www/archimage_dir/iiif_cache/

sudo chown www-data:www-data /var/www/archimage_dir/ -Rf
```