Déployer Omeka S sur une VM Debian Linux

Introduction

Cet article documente l'installation d'Omeka S 4.2.0 sur une VM Debian 13 (Trixie) en architecture ARM64, avec Apache, PHP 8.4 et MariaDB. Toutes les commandes s'exécutent depuis une session SSH en tant que root.

Cette procédure est le pendant Debian des installations Alpine et macOS Tahoe. Les écarts notables par rapport à Alpine sont signalés au fil du texte : gestionnaire de paquets apt, extensions PHP fusionnées, utilisateur Apache www-data, services pilotés par systemd, et authentification unix_socket de MariaDB.


1. Reconnaissance et préparation du système

Avant tout, on identifie la version de Debian (elle détermine la version de PHP packagée, donc le nom des paquets), l'architecture, l'espace disque et la RAM.

cat /etc/os-release
uname -m
apt-cache policy php
df -h /
free -h

Sur la VM de référence : Debian 13.5 (Trixie), aarch64, PHP 8.4 comme version par défaut des dépôts. On met ensuite le système à jour.

apt update
apt -y full-upgrade

(Omeka S 4.2.0 supporte officiellement PHP 8.4 : aucun rétrogradage de version n'est nécessaire, on garde la même version d'Omeka que sur Alpine.)


2. Installation des paquets

Apache, PHP 8.4 avec les extensions requises par Omeka S, MariaDB et ImageMagick en une seule passe. La liste est nettement plus courte que sur Alpine : sur Debian, ctype, iconv, tokenizer, fileinfo, openssl, session et phar sont déjà dans le paquet php8.4, et dom, simplexml, xmlreader, xmlwriter sont tous regroupés dans php8.4-xml.

apt -y install \
 apache2 \
 php8.4 libapache2-mod-php8.4 \
 php8.4-mysql \
 php8.4-xml \
 php8.4-mbstring \
 php8.4-curl \
 php8.4-gd \
 php8.4-zip \
 php8.4-intl \
 php8.4-opcache \
 php8.4-imagick \
 mariadb-server mariadb-client \
 imagemagick \
 wget unzip

Relevage des limites PHP pour autoriser l'upload de fichiers volumineux. Attention : sur Debian le chemin de configuration est propre à chaque SAPI, ici celui d'Apache.

cat > /etc/php/8.4/apache2/conf.d/99-omeka.ini <<'EOF'
memory_limit = 256M
post_max_size = 128M
upload_max_filesize = 128M
max_execution_time = 300
EOF

Vérification que toutes les extensions requises sont chargées.

php -v
php -m | sort

(Apache bascule automatiquement de mpm_event vers mpm_prefork lors de l'installation de libapache2-mod-php : le module PHP n'est pas thread-safe. C'est normal et sans action requise.)


3. Configuration de MariaDB

Démarrage du service

Contrairement à Alpine, l'installeur Debian a déjà démarré et activé au boot les services mariadb et apache2 (via systemd). Il n'y a donc pas d'équivalent du rc-update add. On se contente de vérifier.

systemctl status mariadb --no-pager
mariadb --version

Sécurisation interactive

Sur Debian, le compte root de MariaDB utilise l'authentification unix_socket : c'est l'utilisateur système root qui est reconnu, sans mot de passe. La sécurisation supprime les comptes anonymes et la base test.

mariadb-secure-installation

Réponses aux invites, dans l'ordre :

(Debian affiche un avertissement « MariaDB is secure by default » : sans conséquence, le script effectue tout de même le nettoyage.)

Création de la base et de l'utilisateur dédié

Du fait de l'auth unix_socket, on se connecte avec un simple mariadbsans -u root -p (c'est la différence majeure avec la commande équivalente sur Alpine).

mariadb <<'EOF'
CREATE DATABASE omeka_s CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'omeka'@'localhost' IDENTIFIED BY 'MotDePasseOmeka';
GRANT ALL PRIVILEGES ON omeka_s.* TO 'omeka'@'localhost';
FLUSH PRIVILEGES;
EOF

Test de bout en bout : l'utilisateur omeka doit pouvoir se connecter et voir sa base.

mariadb -u omeka -p'MotDePasseOmeka' -e "SHOW DATABASES; SELECT CURRENT_USER();"

(Remplacer MotDePasseOmeka par un mot de passe fort en production, et le réutiliser à l'identique dans database.ini à l'étape 5.)


4. Configuration d'Apache

Sur Debian on n'édite pas httpd.conf au sed comme sur Alpine : Apache y est modulaire via a2enmod / a2enconf. Trois actions : activer mod_rewrite (Omeka S s'appuie sur un .htaccess), déclarer le répertoire avec AllowOverride All, et fixer le ServerName.

a2enmod rewrite

cat > /etc/apache2/conf-available/omeka-s.conf <<'EOF'
<Directory "/var/www/html/omeka-s">
 Options Indexes FollowSymLinks
 AllowOverride All
 Require all granted
</Directory>
EOF
a2enconf omeka-s

echo "ServerName <IP-VM>" > /etc/apache2/conf-available/servername.conf
a2enconf servername

Différences avec Alpine : la racine web est /var/www/html (et non /var/www/localhost/htdocs) ; les fichiers de conf vont dans conf-available/ puis sont activés par a2enconf. Remplacer <IP-VM> par l'adresse IP — ou le nom DNS — de votre VM.

Contrôle de syntaxe (équivalent Debian du httpd -t d'Alpine), puis activation.

apache2ctl configtest
systemctl restart apache2
apache2ctl -M | grep rewrite

(Point critique : l'activation d'un nouveau module exige systemctl restart apache2, pas un simple reload. Sans mod_rewrite réellement chargé, le .htaccess d'Omeka renvoie des erreurs 500. La dernière commande doit afficher rewrite_module (shared).)


5. Téléchargement et déploiement d'Omeka S

Récupération de la version 4.2.0 depuis GitHub, déploiement dans /var/www/html, configuration de la connexion BDD.

cd /tmp
wget https://github.com/omeka/omeka-s/releases/download/v4.2.0/omeka-s-4.2.0.zip
unzip -q omeka-s-4.2.0.zip
mv omeka-s /var/www/html/omeka-s

cat > /var/www/html/omeka-s/config/database.ini <<'EOF'
user = "omeka"
password = "MotDePasseOmeka"
dbname = "omeka_s"
host = "localhost"
EOF

Application des permissions. Sur Debian, Apache tourne sous l'utilisateur www-data (et non apache comme sur Alpine) : la logique des droits est identique, seul le propriétaire change.

chown -R www-data:www-data /var/www/html/omeka-s
find /var/www/html/omeka-s -type d -exec chmod 755 {} \;
find /var/www/html/omeka-s -type f -exec chmod 644 {} \;
chmod -R 775 /var/www/html/omeka-s/files
chmod -R 775 /var/www/html/omeka-s/logs
chmod 600 /var/www/html/omeka-s/config/database.ini

Vérification de l'arborescence et des droits sensibles.

ls -la /var/www/html/omeka-s/
ls -ld /var/www/html/omeka-s/files /var/www/html/omeka-s/logs
ls -l /var/www/html/omeka-s/config/database.ini

(Attendu : tout appartient à www-data:www-data ; files/ et logs/ en drwxrwxr-x (775) pour qu'Apache puisse y écrire ; database.ini en -rw------- (600) pour protéger le mot de passe BDD.)


6. Finalisation via le navigateur

Avant d'ouvrir un navigateur, test depuis la VM pour confirmer qu'Apache sert Omeka, que PHP s'exécute et que le .htaccess/mod_rewrite fonctionne — on attend une redirection vers l'installeur, pas une erreur 500.

curl -sS -o /dev/null -w "Code: %{http_code} | Redirect: %{redirect_url}\n" \
 http://localhost/omeka-s/
curl -s -L http://localhost/omeka-s/ | grep -iE "<title>|install"

Code attendu : 302 redirigeant vers …/omeka-s/install. En cas de 500, diagnostiquer via /var/www/html/omeka-s/logs/application.log et /var/log/apache2/error.log.

L'installation se conclut via une interface web qui crée le super-utilisateur et initialise la base. À ouvrir depuis le poste client :

http://<IP-VM>/omeka-s/

(Omeka redirige automatiquement vers la page d'installation ; /omeka-s/admin aboutit au même formulaire au premier lancement. Le formulaire demande l'email/mot de passe de l'admin, le nom d'affichage, le titre de l'installation, le fuseau horaire et la langue.)


7. Configuration post-installation

Inspection préalable de la configuration

C'est l'étape la plus sensible. Plutôt que d'appliquer des sed « à l'aveugle », on inspecte d'abord le fichier et l'environnement, pour éviter tout remplacement silencieusement raté.

grep -nE "phpcli_path|imagemagick_dir|locale" \
 /var/www/html/omeka-s/config/local.config.php
which php && readlink -f /usr/bin/php
which convert magick
dpkg -l | grep -E "^ii +cron "
systemctl is-enabled cron

Constats sur la VM de référence : le binaire PHP CLI est /usr/bin/php (lien vers php8.4) — et non /usr/bin/php83 comme sur Alpine ; convert/magick sont dans /usr/bin ; et le paquet cron est déjà installé et activé.

Déclaration du chemin PHP CLI et d'ImageMagick

Ces réglages sont indispensables pour les tâches de fond et la génération de miniatures. Sauvegarde préalable, puis édition au plus juste (les motifs ont été confirmés par le grep ci-dessus).

cp /var/www/html/omeka-s/config/local.config.php \
 /var/www/html/omeka-s/config/local.config.php.bak

sed -i "s|'phpcli_path' => null,|'phpcli_path' => '/usr/bin/php',|" \
 /var/www/html/omeka-s/config/local.config.php

sed -i "s|'imagemagick_dir' => null,|'imagemagick_dir' => '/usr/bin',|" \
 /var/www/html/omeka-s/config/local.config.php

sed -i "s|'locale' => 'en_US',|'locale' => 'fr_FR',|" \
 /var/www/html/omeka-s/config/local.config.php

Contrôle de l'édition et validation syntaxique PHP du fichier (si un sed avait cassé le PHP, on le voit avant de recharger).

grep -nE "phpcli_path|imagemagick_dir|locale" \
 /var/www/html/omeka-s/config/local.config.php
php -l /var/www/html/omeka-s/config/local.config.php

Vidage du cache, remise des droits, rechargement Apache.

rm -rf /var/www/html/omeka-s/files/cache/*
chown -R www-data:www-data /var/www/html/omeka-s/files
systemctl reload apache2

Vérification du cron

Utile pour les tâches périodiques lancées par certains modules. Aucune installation nécessaire sur Debian : toute la section « dcron » de la procédure Alpine (apk add dcron + rc-service + rc-update) se réduit à une simple vérification.

systemctl is-active cron
systemctl status cron --no-pager | head -3

Emplacements clés

Les chemins à connaître pour la maintenance et le diagnostic (ils diffèrent d'Alpine — racine web /var/www/html au lieu de /var/www/localhost/htdocs) :


Conclusion

Une installation propre tient en une trentaine de commandes. Par rapport à Alpine, Debian simplifie plusieurs points (extensions PHP fusionnées, services systemd auto-activés, cron déjà présent, MariaDB en unix_socket) mais déplace les chemins (/var/www/html, conf PHP par SAPI). Les étapes les plus sensibles restent les permissions sur files/ et logs/, le redémarrage d'Apache après activation de mod_rewrite, et la déclaration explicite du chemin PHP CLI (/usr/bin/php) — sans quoi les tâches de fond échouent silencieusement.

Les prochaines étapes naturelles : installer les modules essentiels (CSV Import, Common, Generic, Easy Admin), créer un premier site et concevoir un Resource Template adapté au corpus à publier.



↑ Haut de page