Introduction : du développement local au serveur de production
\nDévelopper une application PHP sur une machine locale n'est que la moitié du travail. La véritable maîtrise commence lorsque le code arrive sur le serveur et commence à servir de vrais utilisateurs. Le déploiement avancé de PHP sur VPS ne se limite pas à copier des fichiers via FTP. C'est un processus complexe qui comprend la configuration de l'environnement, la sécurité, l'automatisation et la surveillance.
\nDans cet article, nous allons voir comment configurer un VPS pour un hébergement professionnel d'applications PHP, en utilisant des outils modernes et des pratiques DevOps. Vous apprendrez à déployer une application sur la pile Nginx + PHP-FPM, à configurer un pipeline CI/CD, à optimiser les performances et à mettre en place une surveillance.
\nIl est supposé que vous avez des connaissances de base en Linux, PHP et serveurs web. Nous passons au niveau avancé.
\n\n1. Préparation du VPS et configuration de l'environnement
\nChoix et configuration initiale du serveur
\nPour un déploiement avancé, choisissez un VPS avec au moins 2 Go de RAM et un disque SSD. Les systèmes d'exploitation recommandés sont Ubuntu 22.04 LTS ou Debian 12. Après avoir obtenu l'accès via SSH, effectuez la configuration de base :
\n- \n
- Mise à jour des paquets :
sudo apt update && sudo apt upgrade -y\n - Création d'un utilisateur avec les droits sudo :
sudo adduser deployer && sudo usermod -aG sudo deployer\n - Configuration des clés SSH (désactivez la connexion par mot de passe) \n
- Installation de fail2ban pour la protection contre le brute force \n
- Configuration d'UFW (autoriser les ports 22, 80, 443) \n
Installation de la pile LEMP (Nginx + PHP-FPM + MySQL)
\nNous utilisons Nginx comme serveur frontal et PHP-FPM pour le traitement du PHP. Installez tous les composants avec une seule commande :
\nsudo apt install nginx mysql-server php-fpm php-mysql php-cli php-curl php-gd php-mbstring php-xml php-zip composer git -y\nVérifiez les versions :
\nphp -v\nnginx -v\nmysql --version\n\nConfiguration de PHP-FPM pour des performances élevées
\nPour un déploiement avancé, modifiez la configuration de PHP-FPM. Éditez le fichier /etc/php/8.3/fpm/pool.d/www.conf (la version peut varier) :
pm = dynamic\npm.max_children = 50\npm.start_servers = 5\npm.min_spare_servers = 5\npm.max_spare_servers = 35\npm.max_requests = 500\nParamètres importants de php.ini pour la production :
memory_limit = 256M\nupload_max_filesize = 64M\npost_max_size = 64M\nmax_execution_time = 300\ndate.timezone = Europe/Paris\nRedémarrez PHP-FPM : sudo systemctl restart php8.3-fpm
2. Déploiement de l'application : de Git à la production
\nClonage et configuration des droits
\nCréez un répertoire pour le projet et clonez le dépôt :
\nsudo mkdir -p /var/www/yourproject\nsudo chown -R deployer:deployer /var/www/yourproject\ncd /var/www/yourproject\ngit clone git@github.com:yourusername/yourproject.git .\nConfigurez les droits d'accès :
\nsudo chown -R www-data:www-data /var/www/yourproject/storage\nsudo chown -R www-data:www-data /var/www/yourproject/bootstrap/cache\nsudo chmod -R 775 /var/www/yourproject/storage\nsudo chmod -R 775 /var/www/yourproject/bootstrap/cache\n\nConfiguration de l'hôte virtuel Nginx
\nCréez un fichier de configuration pour votre domaine :
\nsudo nano /etc/nginx/sites-available/yourproject\nExemple de configuration avancée avec mise en cache et compression :
\nserver {\n listen 80;\n server_name yourdomain.com www.yourdomain.com;\n root /var/www/yourproject/public;\n\n index index.php index.html;\n\n charset utf-8;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;\n fastcgi_index index.php;\n fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;\n include fastcgi_params;\n }\n\n location ~ /\