Installation depuis le paquet ZIP

Guide d’installation

Installation depuis le paquet ZIP

De l’archive à la première connexion, sur Red Hat / Oracle Linux, Ubuntu / Debian
ou Windows — avec le détail des extensions PHP et de leur configuration.

Prérequis

Système RHEL / Oracle Linux 8-9 (Rocky, AlmaLinux), Ubuntu 22.04+ / Debian 12+, ou Windows 10 / Server 2016+
PHP 8.2 ou supérieur
Serveur web Apache 2.4 (module PHP ou PHP-FPM). Nginx et IIS conviennent aussi — voir les guides dédiés en bas de page.
Base de données Aucune à installer. L’application utilise SQLite, embarqué dans PHP.
Accès Internet Facultatif à l’exécution si vous choisissez le paquet en mode Portable (voir étape 1)
Le paquet archive sw_pkg_*.zip (voir étape 1)

1. Obtenir le paquet

Le paquet d’installation est disponible en téléchargement sur la page Téléchargement de ce site. Choisir l’archive correspondant à votre besoin :

  • CDN — les librairies JavaScript sont chargées depuis Internet. Archive légère, mais le poste qui consulte l’application doit avoir un accès Internet.
  • Portable — les librairies sont embarquées. Archive plus lourde, aucun accès Internet requis à l’exécution. C’est le mode à retenir pour un réseau fermé.

L’archive sw_pkg_*.zip contient mon-appli\ (la racine web), lib\, docs\, et une base securite\database.sqlite minimale pré-remplie : titre, thème, URL des librairies. Elle ne contient aucun secret — ni mot de passe de base, ni clé de chiffrement.

2. Les extensions PHP

La liste ci-dessous est établie à partir du code de l’application. Elle distingue ce qui est indispensable de ce qui n’est requis que si vous activez tel module — inutile d’installer l’Oracle Instant Client, plusieurs centaines de Mo, sur un serveur qui ne verra jamais Oracle.

Socle indispensable — sans ces extensions, l’application ne démarre pas ou perd une fonction essentielle.

sqlite3 Base interne de l’application : utilisateurs, rôles, configuration, registre des bases. Extension native SQLite3. Sur RHEL elle est fournie par php-common, sur Debian par php8.2-sqlite3.
sodium Chiffrement au repos de tous les mots de passe stockés : bases Oracle et PostgreSQL, CMDB, compte de service LDAP, secret OAuth. Aucun réglage. Incluse dans le cœur de PHP 8.2 sous Debian ; paquet php-sodium sous RHEL ; à décommenter sous Windows.
mbstring Traitement des chaines UTF-8 : interface en sept langues, découpage des textes SQL et des aperçus de fichiers. Aucun réglage particulier.
zip Mise à jour d’un module par ZIP, export de module, génération du paquet, lecture des archives d’audit. Aucun réglage particulier.
dom Rendu du portail de documentation intégré (conversion Markdown vers HTML). Paquet php-xml sous RHEL, php8.2-xml sous Debian.
fileinfo Contrôle du type réel de tout fichier envoyé — archives d’audit, ZIP de module, logo. C’est ce qui empêche un fichier de mentir sur son extension. Compilée par défaut sous Linux ; à décommenter sous Windows.
session
json
Sessions applicatives et échanges de données avec l’interface. Compilées dans PHP 8 par défaut : rien à faire.
openssl Transport chiffré : envoi de courriel en TLS ou SSL, annuaire en LDAPS. Indispensable des que le SMTP est en TLS/SSL ou l’annuaire en LDAPS. Sans cela, seules les liaisons en clair fonctionnent.

Selon les modules que vous activez — à n’installer que si le module correspondant vous sert.

oci8 Module Oracle, et les modules CMDB et CNP qui en dépendent. Exige l’Oracle Instant Client 19c installé séparément, et les librairies déclarées au système (voir les étapes par plateforme).
pgsql Module PostgreSQL. Extension native pgsql, pas pdo_pgsql. Aucun client externe à installer.
ldap Authentification LDAP / Active Directory, et module CNP. Pour LDAPS, vérifier que les certificats de l’autorité sont connus du système.
gd Logo et favicon personnalisés. Facultative : sans elle, l’envoi d’images est simplement refusé, le reste fonctionne.
simplexml Lecture des plans d’exécution Oracle détaillés (profils SQL, plans adaptatifs). Même paquet que dom : php-xml ou php8.2-xml.
phar Lecture des archives d’audit compressées en .tgz. Activée par défaut. phar.readonly = On n’empêche pas la lecture : ce réglage peut rester tel quel.
zlib Compression des journaux par la rotation planifiée (scripts en ligne de commande). Facultative : sans elle, les journaux tournent sans être compressés.
Ne pas activer pdo_sqlite ni pdo_pgsql. L’application n’utilise pas PDO, mais les extensions natives SQLite3 et pgsql. Installer PDO ne casse rien, mais n’apporte rien.
Sur sodium, il n’y a pas de demi-mesure. Le chiffrement au repos refuse de fonctionner sans elle, et le message est explicite : PHP sodium extension required for at-rest encryption. Aucun mot de passe de base ne pourra être enregistré.

En revanche, curl, intl, exif, sockets, bz2, gmp, gettext et imap ne sont jamais utilisées par l’application, quels que soient les modules actives : les activer n’apporte rien. Certaines figurent encore dans d’anciennes procédures d’installation.

3. Les réglages php.ini

Ces valeurs conviennent à une instance courante. Chacune répond à un besoin précis de l’application.

; --- Encodage et fuseau ---
default_charset = "UTF-8"       ; interface en sept langues
date.timezone = "Europe/Paris"  ; horodatage des journaux et des rapports

; --- Envois de fichiers ---
; Depots d'archives d'audit, ZIP de mise a jour de module, wallets Oracle.
; post_max_size doit rester SUPERIEUR a upload_max_filesize : sinon l'envoi
; est rejete avant meme d'atteindre l'application, sans message utile.
upload_max_filesize = 64M
post_max_size = 72M

; --- Ressources ---
memory_limit = 256M             ; rapports volumineux, lecture d'archives
max_execution_time = 300        ; collectes et exports longs

; --- Acces reseau sortant ---
; Requis pour l'authentification OAuth et pour la generation d'un paquet
; en mode Portable. L'application n'utilise pas curl : sans ce reglage,
; ces deux fonctions echouent silencieusement.
allow_url_fopen = On

; --- Sessions ---
session.use_strict_mode = 1
; Inutile de fixer ici gc_maxlifetime, cookie_httponly ni cookie_samesite :
; l'application les positionne elle-meme au demarrage de la session, a partir
; de son propre reglage de duree de vie.

; --- Journalisation ---
; L'application force deja display_errors a Off et log_errors a On.
; Ne renseigner ici que la destination du journal.
error_log = /var/log/php/error.log

Deux directives méritent une attention particulière, parce qu’elles cassent des fonctions sans message clair :

open_basedir Laisser vide, ou y inclure la racine du paquet et le répertoire temporaire du système. L’application écrit hors de la racine web (securite\, log\) et passe par le répertoire temporaire pour fabriquer les archives.
disable_functions Y interdire exec et shell_exec désactive la page Batchs et ordonnancement, qui lit et écrit la crontab (ou les tâches planifiées Windows). Le reste de l’application n’en dépend pas.
Astuce : si un envoi de fichier échoue sans explication alors que le fichier est sous la limite affichée, c’est presque toujours post_max_size qui est trop bas, ou une directive LimitRequestBody côté Apache.

4. Linux Red Hat / Oracle Linux

Valable pour RHEL 8 et 9, Oracle Linux, Rocky et AlmaLinux.

# Activer PHP 8.2 (RHEL 9 / OL 9)
sudo dnf module reset php
sudo dnf module enable php:8.2
# RHEL 8 : depot Remi, puis "sudo dnf module enable php:remi-8.2"

# Apache, PHP et le socle indispensable
sudo dnf install -y httpd php php-cli php-common \
    php-mbstring php-sodium php-zip php-xml php-process

# Selon les modules que vous activez
sudo dnf install -y php-ldap php-gd php-pgsql

php-process fournit exec et shell_exec, dont la page Batchs à besoin pour écrire la crontab. fileinfo est compilée par défaut.

sqlite3 est fourni par php-common : il n’y a pas de paquet php-sqlite3 à installer sur RHEL.

Pour le module Oracle uniquement, ajouter l’Instant Client et compiler OCI8 :

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
sudo dnf install -y php-devel php-pear gcc make
sudo pecl install oci8-3.3.0
#   au prompt : instantclient,/usr/lib/oracle/19.25/client64/lib
echo "extension=oci8.so" | sudo tee /etc/php.d/30-oci8.ini

SELinux étant actif par défaut, autoriser Apache à écrire dans les répertoires de travail de l’application :

sudo setsebool -P httpd_can_network_connect 1
sudo chown -R apache:apache /opt/app/securite /opt/app/log
sudo chmod 750 /opt/app/securite
sudo restorecon -R /opt/app

Puis passer à l’étape 7.

5. Linux Ubuntu / Debian

sudo apt update
# PHP 8.2 si la distribution ne le fournit pas
sudo apt install -y software-properties-common
sudo add-apt-repository -y ppa:ondrej/php
sudo apt update

# Apache, PHP et le socle indispensable
sudo apt install -y apache2 libapache2-mod-php8.2 \
    php8.2 php8.2-cli php8.2-mbstring php8.2-sqlite3 \
    php8.2-zip php8.2-xml

# Selon les modules que vous activez
sudo apt install -y php8.2-ldap php8.2-gd php8.2-pgsql
sodium est incluse dans le cœur de PHP 8.2 sur Debian et Ubuntu : aucun paquet à installer, aucune ligne à ajouter.

Pour le module Oracle uniquement :

sudo apt install -y libaio1 unzip php8.2-dev php-pear gcc make

sudo mkdir -p /opt/oracle
sudo unzip instantclient-basic-linux.x64-19.25*.zip -d /opt/oracle
sudo unzip instantclient-sdk-linux.x64-19.25*.zip   -d /opt/oracle

echo "/opt/oracle/instantclient_19_25" | \
    sudo tee /etc/ld.so.conf.d/oracle-instantclient.conf
sudo ldconfig

sudo pecl install oci8-3.3.0
#   au prompt : instantclient,/opt/oracle/instantclient_19_25
echo "extension=oci8.so" | sudo tee /etc/php/8.2/mods-available/oci8.ini
sudo phpenmod oci8

Droits sur les répertoires de travail :

sudo chown -R www-data:www-data /opt/app/securite /opt/app/log
sudo chmod 750 /opt/app/securite

Puis passer à l’étape 7.

6. Windows avec ppowa

L’installation Windows repose sur une arborescence portable : Apache et PHP côté à côté, sans installateur ni service système imposé.

C:\ppowa-64S\
├── httpd-2.4\          serveur Apache
│   └── conf\httpd.conf
├── php-8.2.17\        interpreteur PHP
│   ├── php.ini
│   ├── php8apache2_4.dll
│   └── ext\
└── my-app\            le paquet decompresse
    ├── mon-appli\      racine web (DocumentRoot)
    ├── lib\
    ├── securite\       hors racine web
    └── log\            hors racine web
  1. Télécharger Apache 2.4 pour Windows (VS17 x64) depuis apachelounge.com et extraire dans C:\ppowa-64S\httpd-2.4\.
  2. Télécharger PHP 8.2.x Thread Safe x64 depuis windows.php.net et extraire dans C:\ppowa-64S\php-8.2.17\.
  3. Installer le Visual C++ Redistributable correspondant, requis par Apache comme par PHP.
  4. Copier php.ini-production vers php.ini et y ajouter les lignes ci-dessous, en plus des réglages de l’étape 3.
Important : PHP doit être en version Thread Safe, car il est chargé comme module Apache. C’est la version Non-Thread-Safe qu’il faut avec IIS.
extension_dir = "C:/ppowa-64S/php-8.2.17/ext"

; Socle indispensable
extension=sqlite3
extension=sodium
extension=mbstring
extension=zip
extension=openssl
extension=xml
extension=fileinfo

; Selon les modules que vous activez
extension=oci8_19     ; module Oracle (Instant Client 19c requis)
extension=pgsql       ; module PostgreSQL
extension=ldap        ; authentification LDAP / Active Directory
extension=gd          ; logo et favicon personnalises

Configurer Apache dans C:\ppowa-64S\httpd-2.4\conf\httpd.conf :

Define SRVROOT "C:/ppowa-64S/httpd-2.4"
ServerRoot "${SRVROOT}"
Listen 80

# Chargement de PHP comme module
PHPIniDir "C:/ppowa-64S/php-8.2.17"
AddHandler application/x-httpd-php .php
LoadModule php_module "C:/ppowa-64S/php-8.2.17/php8apache2_4.dll"

# Racine web = le sous-dossier mon-appli du paquet
DocumentRoot "C:/ppowa-64S/my-app/mon-appli"
<Directory "C:/ppowa-64S/my-app/mon-appli">
    Options +FollowSymLinks
    AllowOverride All
    Require all granted
</Directory>

Pour le module Oracle uniquement : télécharger l’Instant Client Basic 19c 64-bit depuis oracle.com, l’extraire dans C:\oracle\instantclient_19_25\, et ajouter ce répertoire au PATH système.

Astuce : le PATH n’est lu qu’au démarrage du processus. Apache doit être redémarré après modification du PATH, faute de quoi OCI8 ne trouvera pas les DLL Oracle — et l’erreur ne le dira pas clairement.

7. Déployer le paquet

Transférer l’archive sur le serveur, puis l’extraire.

# Linux
scp sw_pkg_*_portable.zip user@serveur:/tmp/
sudo mkdir -p /opt/app
sudo unzip /tmp/sw_pkg_*_portable.zip -d /opt/app

# Windows : extraire dans C:\ppowa-64S\my-app\

La racine web est le sous-répertoire mon-appli, et lui seul. Les répertoires securite\ (base SQLite et clé de chiffrement) et log\ restent en dehors de la racine web : ils ne sont jamais accessibles par HTTP.

Sous Apache, la réécriture d’URL doit être active : vérifier que mod_rewrite est chargé et que AllowOverride All est bien posé sur le répertoire, sans quoi le fichier .htaccess livré avec l’application sera ignoré.

8. Première connexion

Démarrer le serveur web et ouvrir l’application dans un navigateur. Au premier accès, l’application crée le schéma complet de sa base et sa clé de chiffrement.

Identifiant admin
Mot de passe admin123
Première action Changer ce mot de passe immédiatement.
À sauvegarder ensemble : securite\master.key et securite\database.sqlite. La clé déchiffre les mots de passe contenus dans la base : sauvegarder l’une sans l’autre rend les secrets irrécupérables.

9. Vérifier l’installation

  1. La page de connexion s’affiche, feuilles de style comprises.
  2. Vous vous connectez et changez le mot de passe du compte admin.
  3. Dans Administration » Modules, activer les modules voulus. Un module dont l’extension PHP manque le signalera à l’activation.
  4. Déclarer une base et lancer un test de connexion : c’est la vérification la plus parlante, elle met à l’épreuve l’extension, le client et le réseau d’un seul coup.
  5. Vérifier que log\app.log se remplit : si le fichier reste vide ou absent, les droits d’écriture sont à revoir.

En cas de page blanche, la réponse est dans le journal d’erreurs de PHP, pas dans le navigateur : display_errors est à Off en production.

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 et l’authentification.