Déployer Omeka S sur une VM macOS Tahoe

Introduction

Cet article documente l'installation d'Omeka S 4.2 sur une VM macOS 26 (Tahoe) sur Apple Silicon, avec Apache, PHP 8.3 et MariaDB — le tout via Homebrew. Il s'agit du pendant macOS de la procédure équivalente sur Alpine Linux. Toutes les commandes s'exécutent depuis une session SSH en tant qu'utilisateur standard (le compte qui possède l'installation Homebrew), pas en rootsudo n'est utilisé qu'aux endroits explicitement signalés.


Pré-requis

Cet article suppose que les éléments suivants sont déjà en place sur la VM macOS :


1. Préparation du système

Vérification de la version macOS, de l'architecture, du préfixe Homebrew, et mise à jour du gestionnaire de paquets.

sw_vers
uname -m
brew --prefix
brew update
brew upgrade

(Sur Apple Silicon, brew --prefix doit renvoyer /opt/homebrew — tous les chemins de cet article en dépendent. Sur Intel, remplacer par /usr/local.)


2. Installation des paquets

Apache, PHP 8.3 (avec ses extensions intégrées), MariaDB, ImageMagick et les outils d'archivage. La PHP de Homebrew embarque déjà la majorité des extensions requises par Omeka S (pdo, pdo_mysql, gd, intl, zip, mbstring, xml, curl, opcache…) — seule imagick doit être compilée séparément.

brew install httpd php@8.3 mariadb imagemagick pkg-config wget

Activation explicite de PHP 8.3 dans le PATH (php@8.3 est keg-only car une version plus récente existe par défaut dans Homebrew).

export PATH="/opt/homebrew/opt/php@8.3/bin:/opt/homebrew/opt/php@8.3/sbin:$PATH"
echo 'export PATH="/opt/homebrew/opt/php@8.3/bin:/opt/homebrew/opt/php@8.3/sbin:$PATH"' >> ~/.zshrc

Compilation et installation de l'extension Imagick (liée dynamiquement à ImageMagick installé précédemment). Au prompt Please provide the prefix of ImageMagick installation, valider avec Entrée (autodetect).

pecl install imagick

(pecl ajoute automatiquement la directive extension=imagick.so au php.ini principal — inutile de la dupliquer dans conf.d/.)

Relèvement des limites PHP via un fichier de surcharge dans conf.d, équivalent du 99_omeka.ini d'Alpine.

mkdir -p /opt/homebrew/etc/php/8.3/conf.d
cat > /opt/homebrew/etc/php/8.3/conf.d/99-omeka.ini <<'EOF'
memory_limit = 256M
post_max_size = 128M
upload_max_filesize = 128M
max_execution_time = 300
EOF

3. Configuration de MariaDB

Démarrage du service

Sur macOS, brew services remplace rc-service / rc-update : il démarre le service et l'enregistre dans launchd pour relancement automatique à l'ouverture de session.

brew services start mariadb

Le piège du root : authentification unix_socket

Sur MariaDB Homebrew, le compte root@localhost est créé avec le plugin d'authentification unix_socket : il n'accepte les connexions que si l'utilisateur UNIX courant correspond au nom MariaDB. Comme on tourne en utilisateur standard (et non root au sens UNIX), mariadb -u root est refusé même sans mot de passe, et mariadb-secure-installation est inutilisable en l'état.

Contournement : passer par sudo (qui élève l'UID à root UNIX → unix_socket valide), et faire en une seule passe la bascule vers une authentification par mot de passe, le ménage habituel de mariadb-secure-installation, et la création de la base Omeka.

sudo mariadb -u root <<'EOF'
ALTER USER 'root'@'localhost' IDENTIFIED VIA mysql_native_password USING PASSWORD('MotDePasseRoot');
DELETE FROM mysql.global_priv WHERE User='';
DELETE FROM mysql.global_priv WHERE User='root' AND Host NOT IN ('localhost','127.0.0.1','::1');
DROP DATABASE IF EXISTS test;
DELETE FROM mysql.db WHERE Db='test' OR Db='test\\_%';
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

(Important : remplacer MotDePasseRoot et MotDePasseOmeka par des mots de passe robustes avant d'exécuter le bloc — et les noter. La valeur de MotDePasseOmeka devra être reportée à l'identique dans database.ini à l'étape 5, sinon Omeka ne pourra pas se connecter à la base.)


4. Configuration d'Apache

Apache Homebrew écoute sur 8080 par défaut (et non 80) pour pouvoir fonctionner sans privilèges root. DocumentRoot est /opt/homebrew/var/www.

Activation de mod_rewrite, du DirectoryIndex et du ServerName

(Attention : sed sur macOS est le sed BSD, qui exige sed -i '' avec une chaîne vide explicite, au lieu de sed -i sous Linux.)

sed -i '' 's|^#LoadModule rewrite_module|LoadModule rewrite_module|' /opt/homebrew/etc/httpd/httpd.conf
sed -i '' 's|^DirectoryIndex index.html|DirectoryIndex index.php index.html|' /opt/homebrew/etc/httpd/httpd.conf
sed -i '' 's|^#ServerName .*|ServerName <IP-VM>:8080|' /opt/homebrew/etc/httpd/httpd.conf

(Important : remplacer <IP-VM> par l'adresse IP réelle de votre VM avant d'exécuter le bloc sed. Cette adresse sera utilisée par Apache comme ServerName, et c'est elle que vous taperez dans le navigateur à l'étape 6 sous la forme http://<IP-VM>:8080/omeka-s/admin.)

Chargement du module PHP et déclaration du répertoire Omeka

cat >> /opt/homebrew/etc/httpd/httpd.conf <<'EOF'

LoadModule php_module /opt/homebrew/opt/php@8.3/lib/httpd/modules/libphp.so

<FilesMatch \.php$>
 SetHandler application/x-httpd-php
</FilesMatch>

Include /opt/homebrew/etc/httpd/extra/omeka-s.conf
EOF

cat > /opt/homebrew/etc/httpd/extra/omeka-s.conf <<'EOF'
<Directory "/opt/homebrew/var/www/omeka-s">
 Options Indexes FollowSymLinks
 AllowOverride All
 Require all granted
</Directory>
EOF

Contrôle de la syntaxe avant toute mise en service :

httpd -t

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

Récupération de la version 4.2.0 depuis GitHub, déploiement dans /opt/homebrew/var/www/omeka-s, 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 /opt/homebrew/var/www/omeka-s

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

(Rappel : la valeur de password doit être strictement identique au MotDePasseOmeka choisi à l'étape 3, sinon Omeka échouera à se connecter à la base.)

Apache Homebrew, lancé via brew services, tourne en tant que l'utilisateur courant — pas d'équivalent apache ou _www à utiliser. Pas besoin de chown : on durcit simplement les bits standards et on protège database.ini qui contient le mot de passe en clair.

find /opt/homebrew/var/www/omeka-s -type d -exec chmod 755 {} \;
find /opt/homebrew/var/www/omeka-s -type f -exec chmod 644 {} \;
chmod 600 /opt/homebrew/var/www/omeka-s/config/database.ini

Démarrage d'Apache (l'enregistrement au boot est automatique avec brew services) :

brew services start httpd

6. Finalisation via le navigateur

L'installation se conclut via une interface web qui crée le super-utilisateur et initialise la base. À ouvrir depuis le poste client — noter le port 8080 absent de la version Alpine :

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

(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. Si la page ne charge pas alors que curl http://localhost:8080/omeka-s/ répond depuis la VM, le pare-feu macOS bloque le port — l'autoriser dans Réglages → Réseau → Pare-feu.)


7. Configuration post-installation

Déclaration du chemin PHP CLI et d'ImageMagick

Sur macOS Homebrew, le binaire PHP n'est pas dans le PATH système (php@8.3 est keg-only), et Omeka cherche php dans des emplacements standards (/usr/bin/php, /usr/local/bin/php) qui n'existent pas. Sans déclaration explicite de phpcli_path, les tâches de fond (import CSV, génération de miniatures, jobs lancés par les modules) échouent silencieusement — c'est l'équivalent exact du piège Alpine.

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

sed -i '' "s|'phpcli_path' => null,|'phpcli_path' => '/opt/homebrew/opt/php@8.3/bin/php',|" \
 /opt/homebrew/var/www/omeka-s/config/local.config.php

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

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

Cron

Pas d'équivalent à apk add dcron : macOS embarque déjà cron, lancé à la demande par launchd dès qu'une crontab utilisateur existe. Pour ajouter une tâche planifiée par un module Omeka, il suffit d'éditer la crontab — aucune installation ni démarrage de service nécessaire.

crontab -e

Emplacements clés

Les chemins à connaître pour la maintenance et le diagnostic :


Conclusion

L'installation sur macOS tient elle aussi en une trentaine de commandes, mais quatre pièges spécifiques à la plateforme se présentent et n'existent pas sur Alpine :

Les prochaines étapes naturelles restent identiques à la version Alpine : 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