Préparation
- VPS avec Ubuntu 20.04/22.04/24.04 ou Debian 11/12.
- Utilisateur avec sudo, accès SSH.
- Domaine (facultatif) et port ouvert 80/443 dans le panneau du fournisseur d’accès.
Apache : installation, démarrage automatique et vérification
sudo apt update && sudo apt -y upgrade
sudo apt -y install apache2
sudo systemctl enable --now apache2
curl -I http://127.0.0.1
Attend l’en-tête HTTP/1.1 200 OK. La page par défaut se trouve sous /var/www/html/.
Pare-feu UFW pour HTTP/HTTPS et état du service
sudo systemctl status apache2 --no-pager
sudo ufw allow 'Apache Full' # opens 80 и 443
sudo ufw enable
sudo ufw status
Si vous n’utilisez pas UFW, assurez-vous que les ports 80/443 sont autorisés dans le pare-feu cloud de votre fournisseur d’accès.
Serveur MySQL : installation et protection de base
sudo apt -y install mysql-server
sudo systemctl enable --now mysql
sudo mysql_secure_installation
Répondre en toute sécurité :
- Activer le contrôle de la force du mot de passe (Oui).
- Supprimer les utilisateurs anonymes (Oui).
- Interdire la connexion root à distance (Oui).
- Supprimer la base de données de test (Oui).
- Recharger les autorisations (Oui).
Création d’une base de données et d’un utilisateur pour l’application
sudo mysql -u root -p
Dans la console MySQL :
CREATE DATABASE appdb CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'appuser'@'localhost' IDENTIFIED BY 'S3cureP@ss!';
GRANT ALL PRIVILEGES ON appdb.* TO 'appuser'@'localhost';
FLUSH PRIVILEGES;
EXIT;
Pour l’accès à distance, indiquez l’hôte : « appuser »@“%” et configurez l’adresse de liaison/le pare-feu séparément.
PHP : installation du module et page de test
sudo apt -y install php libapache2-mod-php php-mysql php-cli php-curl php-xml php-zip
php -v
echo '' | sudo tee /var/www/html/info.php
Ouvrez http://<IP>/info.php dans votre navigateur pour afficher la page phpinfo() (supprimez-la ensuite).
Répertoire de production et hôte Apache virtuel
Créons la structure du site Web et le fichier de configuration :
sudo mkdir -p /var/www/example.com/public_html
sudo chown -R $USER:$USER /var/www/example.com
sudo nano /var/www/example.com/public_html/index.php
index.php (verification PHP):
Créez le fichier de configuration /etc/apache2/sites-available/example.com.conf :
ServerName example.com
ServerAlias www.example.com
DocumentRoot /var/www/example.com/public_html
AllowOverride All
Require all granted
ErrorLog ${APACHE_LOG_DIR}/example_error.log
CustomLog ${APACHE_LOG_DIR}/example_access.log combined
AllowOverride All est nécessaire si vous utilisez .htaccess (réécritures, mise en cache, etc.).
Activez le site Web, mod_rewrite, et relisez la configuration.
sudo a2ensite example.com.conf
sudo a2dissite 000-default.conf
sudo a2enmod rewrite
sudo apache2ctl configtest # Syntax OK
sudo systemctl reload apache2
Vérifiez le site Web à l’aide du domaine ou de l’adresse IP : « Hello from LAMP ! » devrait s’afficher.
Vérification de la connexion PHP ↔ MySQL (PDO)
Créez /var/www/example.com/public_html/dbtest.php :
PDO::ERRMODE_EXCEPTION,
PDO::ATTR_DEFAULT_FETCH_MODE => PDO::FETCH_ASSOC
]);
echo $pdo->query('SELECT 1')->fetchColumn();
} catch (Throwable $e) { echo $e->getMessage(); }
Ouvrez « http://example.com/dbtest.php » → Vous voyez 1.
HTTPS en 2 minutes (bonus)
Si le domaine pointe vers le serveur, nous installons un certificat gratuit :
sudo apt -y install certbot python3-certbot-apache
sudo certbot --apache -d example.com -d www.example.com
Certbot active automatiquement HTTPS et le renouvellement automatique.
Configuration de PHP pour la production (en bref)
Modifiez /etc/php/*/apache2/php.ini :
- expose_php = Off
- memory_limit = 256M (en fonction de la charge)
- upload_max_filesize et post_max_size en fonction de votre CMS
- date.timezone = Europe/Kyiv
- Redémarrer Apache : sudo systemctl reload apache2.
Analogues pour AlmaLinux/Rocky/CentOS (RHEL)
sudo dnf -y install httpd mariadb-server php php-mysqlnd php-cli php-xml php-zip php-curl
sudo systemctl enable --now httpd mariadb
sudo mysql_secure_installation
# дальше — те же шаги: создать БД/пользователя, vhost в /etc/httpd/conf.d/site.conf,
# включить firewalld: sudo firewall-cmd --add-service=http --add-service=https --permanent && sudo firewall-cmd --reload
Liste de contrôle pour le démarrage de LAMP
- Apache fonctionne, les ports 80/443 sont ouverts, mod_rewrite est activé.
- MySQL est sécurisé, appdb et appuser ont été créés.
- PHP est installé avec les modules requis, info.php a été supprimé.
- Virtual Host est activé, AllowOverride All est défini.
- dbtest.php renvoie 1 (PDO fonctionne).
- HTTPS est activé (si un domaine est disponible), cron/auto-renew est actif.