Guide d’installation
RHEL / Oracle Linux + Apache
Déploiement pas à pas sur RHEL 8/9, Oracle Linux, Rocky ou AlmaLinux,
avec Apache 2.4 et PHP-FPM 8.2, à partir du paquet de l’application.
Prérequis
| Distribution | RHEL / Oracle Linux 8.x ou 9.x (Rocky, AlmaLinux compatibles) |
| Serveur web | Apache HTTPD 2.4 + PHP-FPM 8.2 |
| Oracle Instant Client | 19c — paquet léger “Basic”, 64-bit (RPM) |
| Le paquet de l’application | archive sw_pkg_*.zip (voir étape 4) |
1. Installer Apache, PHP-FPM et les extensions
# Activer PHP 8.2 (RHEL 9 / OL 9)
sudo dnf module reset php
sudo dnf module enable php:8.2
# (RHEL 8 : passer par Remi)
# sudo dnf install -y https://rpms.remirepo.net/enterprise/remi-release-8.rpm
# sudo dnf module enable php:remi-8.2
# Apache + PHP-FPM + extensions requises
sudo dnf install -y httpd php-fpm php-cli php-common \
php-mbstring php-gd php-ldap php-zip php-sodium php-process php-xml
sqlite3 est fourni par php-common. Ne pas installer php-pdo : l’application utilise l’extension native SQLite3, pas PDO.
2. Installer le client léger Oracle et l’extension OCI8
# Instant Client 19c (Basic + Devel) — depuis le depot Oracle Linux
sudo dnf install -y oracle-instantclient-basic oracle-instantclient-devel
# (ou installer les RPM telecharges depuis oracle.com)
# Declarer les librairies au linker
echo "/usr/lib/oracle/19.25/client64/lib" | \
sudo tee /etc/ld.so.conf.d/oracle-instantclient.conf
sudo ldconfig
# Compiler l'extension OCI8 via PECL
sudo dnf install -y php-devel php-pear gcc make
sudo pecl install oci8-3.3.0
# Au prompt, repondre :
# instantclient,/usr/lib/oracle/19.25/client64/lib
echo "extension=oci8.so" | sudo tee /etc/php.d/30-oci8.ini
3. Configurer PHP-FPM
Éditer /etc/php-fpm.d/www.conf (utilisateur Apache + socket Unix) et y déclarer l’environnement Oracle :
user = apache
group = apache
listen = /run/php-fpm/www.sock
listen.owner = apache
listen.group = apache
; Environnement Oracle (Instant Client)
env[LD_LIBRARY_PATH] = /usr/lib/oracle/19.25/client64/lib
env[ORACLE_HOME] = /usr/lib/oracle/19.25/client64
env[TNS_ADMIN] = /usr/lib/oracle/19.25/client64/network/admin
Dans /etc/php.ini : date.timezone, default_charset = "UTF-8", upload_max_filesize = 64M, post_max_size = 72M, memory_limit = 256M, display_errors = Off, log_errors = On.
4. Récupérer et déployer le paquet
- Télécharger le paquet depuis la page Téléchargement, en choisissant l’archive selon votre réseau :
- CDN : librairies JS/CSS chargées depuis Internet (le poste qui consulte l’application à besoin d’un accès Internet) ;
- Portable : librairies embarquées dans l’archive (aucun accès Internet requis à l’exécution).
- Transférer puis extraire l’archive sur le serveur :
scp sw_pkg_*_portable.zip user@serveur:/tmp/
sudo mkdir -p /opt/app
sudo unzip /tmp/sw_pkg_*_portable.zip -d /opt/app
Arborescence obtenue : /opt/app/mon-appli (racine web), /opt/app/lib, /opt/app/docs et une base securite/database.sqlite minimale (sans secret). La clé securite/master.key et le schéma complet sont créés au premier accès. Compte par défaut : admin / admin123 (à changer immédiatement).
5. Configurer Apache (FastCGI vers PHP-FPM)
Créer /etc/httpd/conf.d/app.conf :
<VirtualHost *:80>
ServerName mon-appli.example.com
DocumentRoot /opt/app/mon-appli
<FilesMatch \.php$>
SetHandler "proxy:unix:/run/php-fpm/www.sock|fcgi://localhost"
</FilesMatch>
<Directory /opt/app/mon-appli>
Options -Indexes +FollowSymLinks
AllowOverride All
Require all granted
DirectoryIndex index.php
</Directory>
# Interdire l'acces aux dossiers non web
<DirectoryMatch "^/opt/app/(securite|log|lib|docs)">
Require all denied
</DirectoryMatch>
ErrorLog /var/log/httpd/app-error.log
CustomLog /var/log/httpd/app-access.log combined
</VirtualHost>
AllowOverride All est requis pour le .htaccess de l’application. Valider avec sudo apachectl configtest.
6. Permissions et SELinux
# Proprietaire : apache pour les dossiers inscriptibles
sudo chown -R apache:apache /opt/app/securite /opt/app/log
sudo chmod 700 /opt/app/securite
# Contextes SELinux
sudo semanage fcontext -a -t httpd_sys_content_t "/opt/app/mon-appli(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/opt/app/securite(/.*)?"
sudo semanage fcontext -a -t httpd_sys_rw_content_t "/opt/app/log(/.*)?"
sudo restorecon -Rv /opt/app
# Autoriser PHP a sortir sur le reseau (LDAP, Oracle, OAuth)
sudo setsebool -P httpd_can_network_connect 1
sudo setsebool -P httpd_can_network_connect_db 1
7. Démarrer, ouvrir le pare-feu et vérifier
sudo systemctl enable --now php-fpm httpd
sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload
# Verifier les extensions
php -m | grep -E 'oci8|sqlite3|mbstring|ldap|sodium'
php -r "echo oci_client_version().PHP_EOL;"
# Test HTTP (attendu : 302 vers la page de connexion)
curl -I http://localhost/
