Installer PNLCS
PNLCS est une application Laravel. Elle fonctionne partout où PHP 8.4, MySQL ou MariaDB et un serveur web sont disponibles. Pour faire d’abord le tour du produit, la démo en ligne est une vraie installation.
docker pull panelica/pnlcs-runtime
Trois façons d’installer
| Méthode | Idéal pour | Durée | Guide |
|---|---|---|---|
| Docker | Essayer PNLCS, ou le faire tourner dans un seul conteneur | Environ 5 minutes | Commandes |
| Votre propre serveur | Un VPS ou serveur dédié sans Docker : Ubuntu, Debian, AlmaLinux ou Rocky Linux | Environ 30 minutes | Commandes |
| Dans un panneau d’hébergement | Un serveur qui fait déjà tourner Panelica, cPanel ou équivalent | Environ 20 minutes | Guide |
Démarrage rapide avec Docker
L’image officielle embarque PHP-FPM 8.4, nginx, Node.js 20 et supervisor, et récupère la dernière version du code au premier démarrage.
- Lancez les conteneursRemplacez d’abord
changemepar vos propres mots de passe. - Patientez 3 à 5 minutesLe premier démarrage installe les dépendances et compile le frontend.
- Ouvrez /installL’assistant vérifie les prérequis, crée votre compte administrateur, puis se verrouille.
$ docker network create pnlcs-net $ docker run -d --name pnlcs-db --network pnlcs-net \ -e MYSQL_ROOT_PASSWORD=changeme \ -e MYSQL_DATABASE=pnlcs -e MYSQL_USER=pnlcs \ -e MYSQL_PASSWORD=changeme \ mariadb:11 $ docker run -d --name pnlcs --network pnlcs-net \ -p 8090:80 \ -e DB_HOST=pnlcs-db -e DB_DATABASE=pnlcs \ -e DB_USERNAME=pnlcs -e DB_PASSWORD=changeme \ -e APP_URL=http://localhost:8090 \ panelica/pnlcs-runtime:1.4
Installer sur votre propre serveur, sans Docker
PNLCS fonctionne comme une application Laravel ordinaire sur PHP-FPM 8.4, MySQL ou MariaDB et Nginx. Les commandes ci-dessous couvrent Ubuntu 24.04, Debian 13 et AlmaLinux 9 ; Rocky Linux 9 utilise les commandes AlmaLinux. Remplacez example.com par votre propre adresse.
-
Préparer le serveur
PHP 8.4 avec ses extensions, une base de données, Nginx, Node.js 20 pour compiler le frontend, et Composer. Passez cette étape s’ils sont déjà installés.
Ubuntu 24.04 fournit PHP 8.3, donc PHP 8.4 vient du PPA ondrej. Debian 13 inclut PHP 8.4, fournit MariaDB au lieu de MySQL, et le paquet
php8.4-imapn’existe pas. Sous AlmaLinux et Rocky, PHP 8.4 provient du dépôt Remi.Terminal$ sudo apt update $ sudo apt install -y software-properties-common git unzip curl cron $ sudo add-apt-repository -y ppa:ondrej/php $ sudo apt update $ sudo apt install -y php8.4-fpm php8.4-cli php8.4-mysql php8.4-mbstring \ php8.4-xml php8.4-curl php8.4-zip php8.4-gd php8.4-bcmath php8.4-intl php8.4-imap $ sudo apt install -y mysql-server nginx $ curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - $ sudo apt install -y nodejs $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer
Terminal$ sudo apt update $ sudo apt install -y git unzip curl cron $ sudo apt install -y php8.4-fpm php8.4-cli php8.4-mysql php8.4-mbstring \ php8.4-xml php8.4-curl php8.4-zip php8.4-gd php8.4-bcmath php8.4-intl $ sudo apt install -y mariadb-server nginx $ curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash - $ sudo apt install -y nodejs $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer
Terminal$ sudo dnf install -y epel-release https://rpms.remirepo.net/enterprise/remi-release-9.rpm $ sudo dnf module reset php -y $ sudo dnf module enable php:remi-8.4 -y $ sudo dnf install -y php php-fpm php-mysqlnd php-mbstring php-xml php-gd \ php-bcmath php-intl php-imap php-pecl-zip \ mysql-server nginx git unzip cronie policycoreutils-python-utils $ curl -fsSL https://rpm.nodesource.com/setup_20.x | sudo bash - $ sudo dnf install -y nodejs $ curl -sS https://getcomposer.org/installer | php $ sudo mv composer.phar /usr/local/bin/composer $ sudo systemctl enable --now php-fpm mysqld nginx
-
Installer l’application
Le répertoire de PNLCS appartient à l’utilisateur du serveur web, et chaque commande
composer,artisanetnpms’exécute sous cet utilisateur. La fonctionpns’en charge pour vous. Si le répertoire appartient à root, l’assistant d’installation et les mises à jour suivantes échouent.Choisissez un seul mot de passe de base de données et utilisez-le à la fois dans
CREATE USERet dans.envpour qu’ils correspondent. La fonctionpnne dure que le temps de la session shell en cours ; redéfinissez-la après vous être reconnecté.N’exécutez pas
db:seed. L’assistant d’installation remplit la base de données et crée l’administrateur de votre choix.Terminal$ sudo git clone https://github.com/Panelica/pnlcs.git /var/www/pnlcs $ sudo chown -R www-data:www-data /var/www/pnlcs $ cd /var/www/pnlcs $ pn() { sudo -u www-data HOME=/tmp/pnlcs-home COMPOSER_HOME=/tmp/pnlcs-home/composer "$@"; } $ pn composer install --no-dev --optimize-autoloader --no-interaction $ sudo mysql -e "CREATE DATABASE pnlcs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'pnlcs'@'localhost' IDENTIFIED BY 'choose-a-strong-password'; GRANT ALL PRIVILEGES ON pnlcs.* TO 'pnlcs'@'localhost'; FLUSH PRIVILEGES;" $ pn cp .env.example .env $ pn sed -i 's|^APP_URL=.*|APP_URL=http://example.com|; s|^DB_PASSWORD=.*|DB_PASSWORD=choose-a-strong-password|' .env $ sudo chmod 640 .env $ pn php artisan key:generate $ pn php artisan migrate --force $ pn npm ci $ pn npm run build $ pn php artisan storage:link $ pn php artisan optimize
Terminal$ sudo git clone https://github.com/Panelica/pnlcs.git /var/www/pnlcs $ sudo chown -R apache:apache /var/www/pnlcs $ cd /var/www/pnlcs $ pn() { sudo -u apache HOME=/tmp/pnlcs-home COMPOSER_HOME=/tmp/pnlcs-home/composer "$@"; } $ pn /usr/local/bin/composer install --no-dev --optimize-autoloader --no-interaction $ sudo mysql -e "CREATE DATABASE pnlcs CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci; CREATE USER 'pnlcs'@'localhost' IDENTIFIED BY 'choose-a-strong-password'; GRANT ALL PRIVILEGES ON pnlcs.* TO 'pnlcs'@'localhost'; FLUSH PRIVILEGES;" $ pn cp .env.example .env $ pn sed -i 's|^APP_URL=.*|APP_URL=http://example.com|; s|^DB_PASSWORD=.*|DB_PASSWORD=choose-a-strong-password|' .env $ sudo chmod 640 .env $ pn php artisan key:generate $ pn php artisan migrate --force $ pn npm ci $ pn npm run build $ pn php artisan storage:link $ pn php artisan optimize $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/pnlcs/storage(/.*)?" $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/pnlcs/bootstrap/cache(/.*)?" $ sudo semanage fcontext -a -t httpd_sys_rw_content_t "/var/www/pnlcs/\.env" $ sudo restorecon -R /var/www/pnlcs $ sudo setsebool -P httpd_can_network_connect_db 1 $ sudo setsebool -P httpd_can_network_connect 1
-
Pointer Nginx sur public/
La racine du site est
public/et jamais la racine du projet : la racine du projet contient.env. Supprimez le site par défaut pour que l’adresse du serveur n’affiche plus la page d’accueil de Nginx.Apache et Caddy fonctionnent aussi, avec les mêmes règles : racine du site
public/, PHP via PHP-FPM 8.4, et toute requête qui ne vise pas un fichier réécrite versindex.php.Terminal$ sudo tee /etc/nginx/sites-available/pnlcs > /dev/null <<'EOF' server { listen 80; server_name example.com; root /var/www/pnlcs/public; index index.php; charset utf-8; client_max_body_size 64M; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php/php8.4-fpm.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } EOF $ sudo ln -s /etc/nginx/sites-available/pnlcs /etc/nginx/sites-enabled/ $ sudo rm -f /etc/nginx/sites-enabled/default $ sudo nginx -t && sudo systemctl reload nginx
Terminal$ sudo tee /etc/nginx/conf.d/pnlcs.conf > /dev/null <<'EOF' server { listen 80; server_name example.com; root /var/www/pnlcs/public; index index.php; charset utf-8; client_max_body_size 64M; location / { try_files $uri $uri/ /index.php?$query_string; } location ~ \.php$ { fastcgi_pass unix:/run/php-fpm/www.sock; fastcgi_param SCRIPT_FILENAME $realpath_root$fastcgi_script_name; include fastcgi_params; } location ~ /\.(?!well-known).* { deny all; } } EOF $ sudo nginx -t && sudo systemctl reload nginx
-
Terminer dans le navigateur, puis planifier et sécuriser
Ouvrez
http://example.com/install. L’assistant vérifie les prérequis, crée votre administrateur puis se ferme.Une seule ligne cron pour l’utilisateur du serveur web pilote les factures, les relances, les suspensions, les vérifications SSL et les sauvegardes. Les tâches en file d’attente n’ont pas besoin d’un worker séparé ; la même ligne cron les traite.
Terminal$ cd /var/www/pnlcs $ WEB_USER=www-data # AlmaLinux, Rocky: apache $ (sudo crontab -u $WEB_USER -l 2>/dev/null; echo '* * * * * cd /var/www/pnlcs && php artisan schedule:run >> /dev/null 2>&1') | sudo crontab -u $WEB_USER - $ sudo apt install -y certbot python3-certbot-nginx # Ubuntu, Debian $ sudo certbot --nginx -d example.com $ pn sed -i 's|^APP_URL=http://|APP_URL=https://|' .env $ pn php artisan optimize
Prérequis
Une petite installation tourne confortablement avec 2 Go de mémoire et la base de données sur la même machine.
| PHP | 8.4 ou plus récent |
|---|---|
| Base de données | MySQL 8.0 ou MariaDB 10.6+ |
| Serveur web | Nginx ou Apache avec PHP-FPM |
| Node.js | 18+ (20 LTS recommandé), uniquement pour compiler le frontend |
| Composer | 2.x |
| Mémoire | 1 Go suffit pour une petite installation ; 2 Go offrent du confort |
| Disque | Environ 130 Mo pour l’application ; prévoyez au moins 2 Go libres, car les données augmentent |
Après l’installation
- Liste de configurationCoordonnées de l’entreprise, e-mail, une passerelle, un serveur et votre premier produit.
- Votre première venteD’un catalogue vide à une commande payée et provisionnée.
- Liste de contrôle de sécuritéHTTPS, mode debug désactivé, double authentification pour le personnel, sauvegardes stockées hors du serveur.
- Mise à jourPassez à la dernière version sans perdre de données.
- SauvegardesCe qu’il faut sauvegarder, y compris la clé de l’application.
- FAQQuestions fréquentes.