Installez et configurez manuellement Nginx, MySQL et PHP sur une instance ECS pour héberger des sites web dynamiques tels que WordPress ou Magento, tout en conservant un contrôle total sur chaque composant.
Architecture de la solution
|
|
|
Procédure
Nous recommandons une instance ECS disposant d'au moins 2 GiB de mémoire.
Étape 1 : Préparer l'instance
Configurez l'accès public, ouvrez le port 80 dans le groupe de sécurité et mettez à jour les packages système.
-
Configurez l'accès public.
Assurez-vous que votre instance ECS dispose d'une adresse IP publique ou d'une Elastic IP Address (EIP). Consultez la rubrique Activer l'accès public pour une instance.
-
Ajoutez une règle de groupe de sécurité.
Dans le groupe de sécurité de votre instance ECS, ajoutez une règle entrante pour autoriser le trafic TCP sur le port 80. Consultez la rubrique Ajouter une règle de groupe de sécurité.
-
Mettez à jour les packages système.
Alibaba Cloud Linux 3 / CentOS 8
-
Connectez-vous à l'instance ECS.
Accédez à Console ECS - InstancesECS console - Instances. Dans le coin supérieur gauche, sélectionnez la région et le groupe de ressources correspondant à la ressource cible.
Sur la page des détails de l'instance, cliquez sur Connect puis sélectionnez Workbench. Suivez les instructions affichées à l'écran pour vous connecter.
-
Mettez à jour tous les packages.
sudo dnf update -y
Alibaba Cloud Linux 2 / CentOS 7
-
Connectez-vous à l'instance ECS.
Accédez à Console ECS - InstancesECS console - Instances. Dans le coin supérieur gauche, sélectionnez la région et le groupe de ressources correspondant à la ressource cible.
Sur la page des détails de l'instance, cliquez sur Connect puis sélectionnez Workbench. Suivez les instructions affichées à l'écran pour vous connecter.
-
Mettez à jour tous les packages.
sudo yum update -y
Ubuntu
-
Connectez-vous à l'instance ECS.
Accédez à Console ECS - InstancesECS console - Instances. Dans le coin supérieur gauche, sélectionnez la région et le groupe de ressources correspondant à la ressource cible.
Sur la page des détails de l'instance, cliquez sur Connect puis sélectionnez Workbench. Suivez les instructions affichées à l'écran pour vous connecter.
-
Mettez à jour tous les packages.
sudo apt update -y && sudo apt upgrade -y
-
Étape 2 : Installer Nginx
-
Ajoutez le dépôt Nginx et installez Nginx.
Alibaba Cloud Linux 3 / CentOS 8
# Add the official Nginx repository. sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/centos/8/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF # Install Nginx. sudo dnf -y install nginxAlibaba Cloud Linux 2 / CentOS 7
# Add the official Nginx repository. sudo tee /etc/yum.repos.d/nginx.repo <<-'EOF' [nginx-stable] name=nginx stable repo baseurl=https://nginx.org/packages/centos/7/$basearch/ gpgcheck=1 enabled=1 gpgkey=https://nginx.org/keys/nginx_signing.key module_hotfixes=true EOF # Install Nginx. sudo yum -y install nginxUbuntu
# Install dependencies for Nginx. sudo apt install -y curl gnupg2 ca-certificates lsb-release ubuntu-keyring # Import the official Nginx signing key to verify package authenticity. curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor | sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null # Set up the APT repository for Nginx. echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg] http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" | sudo tee /etc/apt/sources.list.d/nginx.list # Install Nginx. sudo apt update sudo apt install -y nginx -
Démarrez Nginx et activez-le au démarrage.
L'option
enable --nowdémarre le service et l'active au démarrage.sudo systemctl enable --now nginx Vérifiez que Nginx est en cours d'exécution. Exécutez
curl http://127.0.0.1. Si la sortie contient le code HTML de la page d'accueil de Nginx, l'installation a réussi.
Étape 3 : Installer MySQL
-
Installez MySQL.
Alibaba Cloud Linux 3 / CentOS 8
# Alibaba Cloud Linux 3 requires compat-openssl10 for compatibility with older OpenSSL versions. if [ -f /etc/os-release ]; then . /etc/os-release if [ "$ID" = "alinux" ] && [ "$VERSION_ID" = "3" ]; then sudo yum install -y compat-openssl10 fi fi # Add the YUM repository for MySQL 8.4. sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el8-1.noarch.rpm # Install the MySQL service. sudo dnf install -y mysql-serverAlibaba Cloud Linux 2 / CentOS 7
# Add the repository for MySQL 8.4. sudo rpm -Uvh https://repo.mysql.com/mysql84-community-release-el7-1.noarch.rpm # Install the MySQL service. sudo yum install -y mysql-serverUbuntu
# The default Ubuntu repository includes MySQL, so you can install it directly. # Ubuntu 20.04 and later versions install MySQL 8.0 by default. # Ubuntu 18.04 and earlier versions install MySQL 5.x by default. sudo apt install -y mysql-server -
Démarrez MySQL et activez-le au démarrage.
Alibaba Cloud Linux / CentOS
sudo systemctl enable --now mysqldUbuntu
sudo systemctl enable --now mysql -
Sécurisez l'installation.
La configuration par défaut de MySQL autorise les utilisateurs anonymes et la connexion root à distance. Exécutez le script de sécurité pour renforcer l'installation.
-
Récupérez le mot de passe root initial.
Cette étape s'applique uniquement à Alibaba Cloud Linux et CentOS. Ubuntu utilise l'authentification par socket pour root par défaut.
# Extract and display the temporary password from the log. sudo grep 'temporary password' /var/log/mysqld.log -
Exécutez le script de sécurité.
Exécutez
sudo mysql_secure_installationet suivez les instructions :-
Réinitialisez le mot de passe root : utilisez le mot de passe temporaire pour vous connecter et définissez un nouveau mot de passe.
Utilisez un mot de passe robuste d'au moins 12 caractères, comprenant des majuscules, des minuscules, des chiffres et des caractères spéciaux.
Supprimez les utilisateurs anonymes : saisissez Y.
Interdisez la connexion root à distance : saisissez Y.
Supprimez la base de données de test : saisissez Y.
Rechargez les tables de privilèges : saisissez Y.
-
-
Étape 4 : Installer PHP
Installez PHP, PHP-FPM et l'extension MySQL.
-
Ajoutez un dépôt PHP et installez PHP.
Alibaba Cloud Linux 3 / CentOS 8
# Add the Remi repository. cat > /etc/yum.repos.d/remi.repo << 'EOF' [remi] name=Remi\'s RPM Repository for Enterprise Linux 8 - x86_64 baseurl=https://rpms.remirepo.net/enterprise/8/remi/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 [remi-safe] name=Remi Safe Repository baseurl=https://rpms.remirepo.net/enterprise/8/safe/x86_64/ enabled=1 gpgcheck=1 gpgkey=https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 EOF # Import the GPG key. rpm --import https://rpms.remirepo.net/RPM-GPG-KEY-remi2024 # Install yum-utils. dnf install -y yum-utils # Install PHP, PHP-FPM, and the MySQL extension. dnf install -y php php-fpm php-mysqlndAlibaba Cloud Linux 2 / CentOS 7
# Install the Remi repository. sudo yum install -y http://rpms.remirepo.net/enterprise/remi-release-7.rpm # Install yum-utils and enable the PHP 8.2 repository. sudo yum install -y yum-utils sudo yum-config-manager --enable remi-php82 # Install PHP, PHP-FPM, and the MySQL extension. sudo yum install -y php php-fpm php-mysqlndUbuntu
# Install the tool for managing PPAs. sudo apt install -y software-properties-common # Add the ondrej/php PPA repository. sudo add-apt-repository -y ppa:ondrej/php # Install PHP 8.2, PHP-FPM, and the MySQL extension. sudo apt install -y php8.2 php8.2-fpm php8.2-mysql -
Démarrez PHP-FPM et activez-le au démarrage.
Alibaba Cloud Linux / CentOS
sudo systemctl enable --now php-fpmUbuntu
sudo systemctl enable --now php8.2-fpm
Étape 5 : Configurer Nginx pour traiter PHP
Par défaut, Nginx ne sert que des fichiers statiques. Configurez-le pour transférer les requêtes .php à PHP-FPM afin que les pages PHP soient rendues correctement au lieu d'être téléchargées.
-
Sauvegardez le fichier de configuration par défaut de Nginx.
sudo cp /etc/nginx/conf.d/default.conf /etc/nginx/conf.d/default.conf.bak -
Obtenez l'adresse de communication du service PHP-FPM.
Nginx utilise cette adresse pour transférer les requêtes PHP à PHP-FPM.
Alibaba Cloud Linux / CentOS
PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php-fpm.d/www.conf | head -n 1) echo "$PHP_FPM_LISTEN"Ubuntu
PHP_FPM_LISTEN=$(sudo sed -n 's/^\s*listen\s*=\s*//p' /etc/php/8.2/fpm/pool.d/www.conf | head -n 1) echo "$PHP_FPM_LISTEN" -
Configurez Nginx pour transférer les requêtes
.phpà PHP-FPM.Remplacez
<PHP_FPM_ADDRESS>par l'adresse de communication obtenue à l'étape précédente et exécutez la commande.Si la sortie est un chemin de fichier (par exemple, /run/php-fpm/www.sock), le service utilise un socket Unix. Le format de l'adresse est
unix:FILE_PATH, par exempleunix:/run/php-fpm/www.sock.Si la sortie est une adresse IP et un port (par exemple, 127.0.0.1:9000), le service utilise un socket TCP. Utilisez directement l'adresse IP et le port comme adresse de communication.
sudo tee /etc/nginx/conf.d/default.conf <<-'EOF' server { listen 80; server_name localhost; root /usr/share/nginx/html; # Set the default index files. index index.php index.html index.htm; location / { try_files $uri $uri/ /index.php?$query_string; } # Forward .php requests to PHP-FPM. location ~ \.php$ { fastcgi_pass <PHP_FPM_ADDRESS>; fastcgi_index index.php; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; include fastcgi_params; } error_page 500 502 503 504 /50x.html; location = /50x.html { root /usr/share/nginx/html; } } EOF -
Testez le fichier de configuration.
sudo nginx -tSi la sortie contient successful, la configuration est correcte. Passez à l'étape suivante.
-
Si la sortie contient failed, vérifiez que vous avez correctement remplacé l'adresse, ou restaurez la sauvegarde :
sudo mv /etc/nginx/conf.d/default.conf.bak /etc/nginx/conf.d/default.conf
-
Redémarrez Nginx pour appliquer la nouvelle configuration.
sudo systemctl restart nginx
Étape 6 : Vérifier la pile
Créez des fichiers de test pour confirmer que Nginx transfère les requêtes PHP et que PHP peut se connecter à MySQL.
-
Vérifiez le traitement PHP par Nginx.
-
Créez un fichier de test : générez un fichier avec
phpinfo()pour afficher la configuration PHP.echo "<?php phpinfo(); ?>" | sudo tee /usr/share/nginx/html/phpinfo.php -
Vérifiez dans un navigateur : accédez à
http://<ECS_PUBLIC_IP>/phpinfo.php.Succès : la page affiche les détails de l'environnement PHP.
Échec : la page affiche « File not found » ou le navigateur télécharge le fichier.
Nettoyez le fichier de test : supprimez ce fichier après la vérification. La page
phpinfoexpose des informations sensibles sur le serveur.
-
-
Vérifiez la connectivité entre PHP et MySQL.
Créez un script PHP pour tester la connectivité à la base de données à l'aide de l'extension mysqlnd.
-
Créez une base de données et un utilisateur. Connectez-vous à MySQL avec le mot de passe
rootdéfini à l'Étape 3.sudo mysql -u root -pÀ l'invite
mysql>, créez une base de données nomméewebapp, un utilisateur nomméwebuser, et accordez à cet utilisateur tous les privilèges sur cette base de données.CREATE DATABASE webapp; /* Replace <YourPassword> with a strong password. */ CREATE USER 'webuser'@'localhost' IDENTIFIED BY '<YourPassword>'; GRANT ALL PRIVILEGES ON webapp.* TO 'webuser'@'localhost'; FLUSH PRIVILEGES; EXIT; -
Créez un fichier de test de connexion à la base de données. Remplacez
<YourPassword>par le mot de passe de l'utilisateur défini à l'étape précédente et exécutez la commande.sudo tee /usr/share/nginx/html/test.php <<-'EOF' <?php $servername = "localhost"; $username = "webuser"; $password = "<YourPassword>"; $dbname = "webapp"; // Create a connection $conn = new mysqli($servername, $username, $password, $dbname); // Check the connection if ($conn->connect_error) { die("Database connection failed: " . $conn->connect_error); } echo "Database connection successful!"; ?> EOFVérifiez dans un navigateur : accédez à
http://<ECS_PUBLIC_IP>/test.php. Si la page affiche Database connection successful!, la connexion fonctionne.Nettoyez le fichier de test : ce script contient des identifiants de base de données en texte clair. Supprimez-le immédiatement après le test.
-
FAQ
Délai d'attente du navigateur ou « site inaccessible »
Cette erreur indique généralement un problème réseau. Effectuez le dépannage dans l'ordre suivant :
Groupe de sécurité : vérifiez que le groupe de sécurité autorise le trafic entrant sur le port 80.
Pare-feu : vérifiez que le pare-feu du système d'exploitation (tel que
firewalldouufw) autorise le trafic sur le port 80.Service Nginx : exécutez
sudo systemctl status nginxpour vérifier si Nginx est en cours d'exécution. Sinon, consultez les journaux avecsudo journalctl -xeu nginx.Conflit de port : vérifiez si le port 80 est occupé par une autre application. Consultez la rubrique Résoudre les problèmes de connectivité des ports pour une instance ECS.
Le navigateur affiche « 502 Bad Gateway »
Cette erreur signifie que Nginx ne peut pas communiquer avec PHP-FPM.
Service PHP-FPM : exécutez
sudo systemctl status php-fpm(ouphp8.2-fpmsur Ubuntu) pour vérifier si le service est en cours d'exécution.Chemin du socket : vérifiez que le chemin
unix:dans la directivefastcgi_passcorrespond au cheminlistendans la configuration de PHP-FPM.SELinux/AppArmor : sur CentOS ou Alibaba Cloud Linux, SELinux peut bloquer la communication entre Nginx et PHP-FPM. Exécutez
sestatuset vérifiez les refus dans/var/log/audit/audit.log.Autorisations du socket : vérifiez que l'utilisateur Nginx dispose d'un accès en lecture/écriture au fichier socket.
Activer l'accès distant à MySQL
Par défaut, MySQL interdit la connexion à distance. Pour l'activer, créez un utilisateur dédié à l'accès distant plutôt que d'utiliser root. Consultez la rubrique Ajouter un utilisateur pour l'accès distant à MySQL.