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 root — sudo 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 :
- Racine de l'application :
/opt/homebrew/var/www/omeka-s - Configuration locale :
/opt/homebrew/var/www/omeka-s/config/local.config.php - Configuration BDD :
/opt/homebrew/var/www/omeka-s/config/database.ini - Logs applicatifs :
/opt/homebrew/var/www/omeka-s/logs/application.log - Logs Apache :
/opt/homebrew/var/log/httpd/error_log - Configuration Apache :
/opt/homebrew/etc/httpd/httpd.conf - php.ini et surcharges :
/opt/homebrew/etc/php/8.3/php.ini
/opt/homebrew/etc/php/8.3/conf.d/99-omeka.ini - Binaire PHP CLI :
/opt/homebrew/opt/php@8.3/bin/php
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 :
- sed -i '' au lieu de sed -i : le sed de macOS est le BSD sed, qui exige une chaîne vide explicite comme suffixe pour l'édition en place.
- Authentification unix_socket par défaut pour root@localhost sur MariaDB Homebrew : rend mariadb-secure-installation inutilisable directement, et oblige à passer par sudo puis à basculer manuellement vers mysql_native_password.
- Port 8080 par défaut pour Apache Homebrew (pour fonctionner sans privilèges root) : à inclure explicitement dans toutes les URL côté client.
- php@8.3 étant keg-only, son chemin /opt/homebrew/opt/php@8.3/bin/php doit être déclaré explicitement dans local.config.php — sans quoi les tâches de fond échouent silencieusement, exactement comme 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