RHEL / Oracle Linux + Apache

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

  1. 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).
  2. 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/
C’est prêt. La base SQLite et la clé de chiffrement sont créées au premier accès. Connectez-vous avec le compte par défaut, changez-le, puis configurez vos bases Oracle et l’authentification.