RHEL / Oracle Linux + Nginx

Guide d’installation

RHEL / Oracle Linux + Nginx

Déploiement pas à pas sur RHEL 8/9, Oracle Linux, Rocky ou AlmaLinux,
avec Nginx 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 Nginx + 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 Nginx, 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 : depot Remi, module php:remi-8.2)

sudo dnf install -y nginx 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.

2. Installer le client léger Oracle et l’extension OCI8

sudo dnf install -y oracle-instantclient-basic oracle-instantclient-devel

echo "/usr/lib/oracle/19.25/client64/lib" | \
    sudo tee /etc/ld.so.conf.d/oracle-instantclient.conf
sudo ldconfig

sudo dnf install -y php-devel php-pear gcc make
sudo pecl install oci8-3.3.0
#   prompt : instantclient,/usr/lib/oracle/19.25/client64/lib

echo "extension=oci8.so" | sudo tee /etc/php.d/30-oci8.ini

3. Configurer PHP-FPM (pool nginx)

Éditer /etc/php-fpm.d/www.conf pour tourner sous l’utilisateur nginx et exposer l’environnement Oracle :

user = nginx
group = nginx
listen = /run/php-fpm/www.sock
listen.owner = nginx
listen.group = nginx

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.

4. Récupérer et déployer le paquet

  1. Télécharger le paquet depuis la page Téléchargement (archive CDN ou Portable).
  2. Transférer puis extraire l’archive :
scp sw_pkg_*_portable.zip user@serveur:/tmp/
sudo mkdir -p /opt/app
sudo unzip /tmp/sw_pkg_*_portable.zip -d /opt/app

Racine web : /opt/app/mon-appli. Base securite/database.sqlite minimale (sans secret) ; master.key et schéma complet créés au premier accès. Compte par défaut : admin / admin123 (à changer immédiatement).

5. Configurer Nginx (routeur)

Le bloc try_files remplace le .htaccess Apache. Créer /etc/nginx/conf.d/app.conf :

server {
    listen 80;
    server_name mon-appli.example.com;
    root /opt/app/mon-appli;
    index index.php;

    # Routeur principal : sinon -> index.php
    location / {
        try_files $uri $uri/ /index.php?$query_string;
    }

    # Front-controller du module Oracle
    location /oracle/ {
        try_files $uri $uri/ /oracle/index.php?$query_string;
    }

    # Execution PHP via PHP-FPM
    location ~ \.php$ {
        include fastcgi_params;
        fastcgi_pass unix:/run/php-fpm/www.sock;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
    }

    # Bloquer les fichiers caches (.htaccess, .git...)
    location ~ /\. { deny all; }

    client_max_body_size 72M;
}
Les dossiers lib/, securite/ et log/ sont hors de root (mon-appli/) : Nginx ne les sert jamais.

6. Permissions et SELinux

sudo chown -R nginx:nginx /opt/app/securite /opt/app/log
sudo chmod 700 /opt/app/securite

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 les sorties 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 nginx -t
sudo systemctl enable --now php-fpm nginx

sudo firewall-cmd --permanent --add-service=http
sudo firewall-cmd --reload

php -m | grep -E 'oci8|sqlite3|mbstring|ldap|sodium'
curl -I http://localhost/        # attendu : 302 vers la page de connexion
C’est prêt. La base SQLite et la clé de chiffrement sont créées au premier accès. Connectez-vous, changez le compte par défaut, puis configurez vos bases Oracle et l’authentification.