Installer nginx, PHP et MariaDB
La pile classique pour héberger un site dynamique, montée proprement, avec les réglages PHP qui évitent les mauvaises surprises.
nginx sert les fichiers, PHP-FPM exécute le code, MariaDB garde les données. C'est la pile derrière la majorité des sites du web, et elle tourne sans effort sur le plus petit de nos VPS.
Installer
sudo apt update
sudo apt install -y nginx mariadb-server php-fpm php-mysql \
php-mbstring php-xml php-curl php-zip php-gd php-intlSécuriser la base
Le script ci-dessous supprime les comptes anonymes, la base de démonstration, et l'accès distant à root. Répondez oui à tout.
sudo mariadb-secure-installationCréer une base et son utilisateur — un par site
CREATE DATABASE monsite CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'monsite'@'localhost' IDENTIFIED BY 'un-mot-de-passe-long';
GRANT ALL PRIVILEGES ON monsite.* TO 'monsite'@'localhost';
FLUSH PRIVILEGES;utf8mb4, jamais utf8
Le jeu de caractères nommé utf8 dans MySQL et MariaDB est incomplet : il ne sait pas coder les émojis ni certains caractères asiatiques, et les tronque silencieusement. utf8mb4 est le vrai UTF-8. Choisissez-le à la création, le corriger après coup est pénible.
Le vhost qui envoie PHP à FPM
/etc/nginx/sites-available/monsite
server {
listen 80;
server_name monsite.fr;
root /var/www/monsite/public;
index index.php index.html;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/run/php/php-fpm.sock;
}
# Ne jamais servir ce qui commence par un point : .env, .git…
location ~ /\. {
deny all;
}
}La règle qui protège votre .env
Sans le dernier bloc, un fichier .env ou un dossier .git déposé à la racine du site est téléchargeable par n'importe qui — avec les mots de passe de votre base dedans. C'est l'une des fuites les plus courantes du web, et elle se prévient en quatre lignes.
ls /run/php/ # vérifier le nom exact du socket
sudo ln -s /etc/nginx/sites-available/monsite /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginxLes réglages PHP qui comptent
Les valeurs par défaut sont pensées pour un hébergement mutualisé. Sur votre machine, quatre d'entre elles méritent d'être relevées, dans /etc/php/*/fpm/php.ini :
| Réglage | Par défaut | Raisonnable | Pourquoi |
|---|---|---|---|
| upload_max_filesize | 2M | 64M | Envoyer une image ou un PDF |
| post_max_size | 8M | 64M | Doit être ≥ upload_max_filesize |
| memory_limit | 128M | 256M | Traitement d'images, exports |
| max_execution_time | 30 | 120 | Imports, migrations |
sudo systemctl restart php*-fpmEn production, coupez l'affichage des erreurs
display_errors doit rester à Off : un message d'erreur PHP affiché révèle des chemins, des noms de tables et parfois des identifiants. Les erreurs vont dans le journal, pas dans la page.
Bloqué malgré tout ? Ouvrez un ticket : on répond en français, et on regarde votre machine si besoin.
Ouvrir un ticket