Introduction : pourquoi le VPS est la solution idéale pour un projet PHP
\nDévelopper une application PHP n'est que la moitié du travail. La seconde partie, tout aussi importante, est un déploiement correct sur le serveur. Un serveur privé virtuel (VPS) offre la flexibilité, le contrôle et les performances indisponibles avec un hébergement mutualisé. Vous obtenez un accès root, la possibilité de paramétrer finement l'environnement et une isolation complète des ressources.
\nDans ce guide, nous parcourrons le chemin de l'achat du serveur à l'application fonctionnelle avec PHP 8.x, Nginx, MySQL et Git. Toutes les étapes sont décrites pour le système d'exploitation Ubuntu 22.04 LTS – la distribution la plus populaire pour les serveurs web.
\n\n1. Configuration initiale du VPS et connexion
\n\n1.1. Choix et achat du VPS
\nPour une application PHP, les exigences minimales sont : 1 vCPU, 1 Go de RAM, 20 Go SSD. Nous recommandons des fournisseurs ayant une bonne réputation : DigitalOcean, Linode, Vultr ou les fournisseurs locaux Timeweb, Beget.
\nAprès l'achat, vous recevrez une adresse IP, un mot de passe root (ou une clé SSH).
\n\n1.2. Connexion SSH et création d'un utilisateur
\nConnectez-vous au serveur (remplacez 192.168.1.1 par votre IP) :
ssh root@192.168.1.1\nCréez un utilisateur non privilégié pour le travail quotidien :
\nadduser deployer\nusermod -aG sudo deployer\nConfigurez les clés SSH pour une connexion sécurisée :
\nmkdir -p /home/deployer/.ssh\ncp ~/.ssh/authorized_keys /home/deployer/.ssh/\nchown -R deployer:deployer /home/deployer/.ssh\nchmod 700 /home/deployer/.ssh\nchmod 600 /home/deployer/.ssh/authorized_keys\nDésactivez la connexion root par mot de passe, éditez /etc/ssh/sshd_config :
PermitRootLogin prohibit-password\nPasswordAuthentication no\nRedémarrez SSH : systemctl restart sshd
1.3. Sécurité de base du serveur
\n- \n
- Mettez à jour les paquets :
apt update && apt upgrade -y\n - Installez fail2ban :
apt install fail2ban -y\n - Configurez UFW (pare-feu) : \n
ufw allow OpenSSH\nufw allow 'Nginx Full'\nufw enable\n\n2. Installation et configuration de la pile LEMP (Linux, Nginx, MySQL, PHP)
\n\n2.1. Installation de Nginx
\napt install nginx -y\nsystemctl enable nginx\nsystemctl start nginx\nVérifiez le fonctionnement en ouvrant l'adresse IP du serveur dans un navigateur. Vous devriez voir la page d'accueil de Nginx.
\n\n2.2. Installation de PHP 8.x et PHP-FPM
\nAjoutez le dépôt pour la version actuelle de PHP :
\napt install software-properties-common -y\nadd-apt-repository ppa:ondrej/php -y\napt update\napt install php8.2-fpm php8.2-mysql php8.2-xml php8.2-curl php8.2-mbstring php8.2-zip php8.2-gd -y\nVérifiez le statut de PHP-FPM :
\nsystemctl status php8.2-fpm\n\n2.3. Installation de MySQL (MariaDB)
\napt install mariadb-server -y\nsystemctl enable mariadb\nsystemctl start mariadb\nLancez le script de sécurité :
\nmysql_secure_installation\nCréez une base de données et un utilisateur pour l'application :
\nmysql -u root -p\nCREATE DATABASE myapp_db CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;\nCREATE USER 'myapp_user'@'localhost' IDENTIFIED BY 'strong_password';\nGRANT ALL PRIVILEGES ON myapp_db.* TO 'myapp_user'@'localhost';\nFLUSH PRIVILEGES;\nEXIT;\n\n2.4. Configuration de l'hôte virtuel Nginx
\nCréez un fichier de configuration pour votre domaine (par exemple, myapp.com) :
nano /etc/nginx/sites-available/myapp\nContenu du fichier :
\nserver {\n listen 80;\n server_name myapp.com www.myapp.com;\n root /var/www/myapp/public;\n index index.php index.html;\n\n location / {\n try_files $uri $uri/ /index.php?$query_string;\n }\n\n location ~ \\.php$ {\n fastcgi_pass unix: