Application Web PHP sur une pile dans VPC
Ce tutoriel peut entraîner des coûts. Utilisez l'Estimateur de coûts pour générer une estimation du coût en fonction de votre utilisation projetée.
Ce tutoriel vous guide dans la création d'un serveur virtuel Ubuntu Linux avec un serveur web Apache, une base de données MySQL et des scripts PHP sur IBM Cloud Sur une infrastructure de Cloud privé virtuel(VPC). Cette combinaison de logiciels - plus communément appelée " pile LAMP"- est souvent utilisée pour créer des sites web et des applications web. A l'aide d'IBM Cloud VPC, vous déployez rapidement votre pile LAMP et, si vous le souhaitez, ajoutez la consignation et la surveillance. Pour découvrir le serveur LAMP en action, vous installerez et configurerez également le système de gestion de contenu libre et gratuit WordPress
Objectifs
- Mise à disposition d'une instance de serveur virtuel (VSI) dans un cloud privé virtuel.
- Installation des derniers logiciels Apache, MySQL et PHP.
- Hébergement d'un site Web ou d'un blogue en installant et configurant WordPress.
- Configuration de la consignation et de la surveillance pour détecter les pannes et d'éventuelles lenteurs (facultatif).
- Redimensionnement de l'instance de serveur virtuel (facultatif).
- L'utilisateur final accède au serveur LAMP exécuté sur un VPC à l'aide d'un navigateur Web.
- L'instance VSI est configurée pour utiliser les données d'un volume de stockage par blocs chiffré (facultatif).
Avant de commencer
Pour ce tutoriel, vous devez disposer des éléments suivants :
- d'un IBM Cloud compte facturable.
- IBM Cloud CLI,
- du plug-in IBM Cloud VPC (
vpc-infrastructure),
- du plug-in IBM Cloud VPC (
- de
terraformafin d'utiliser l'infrastructure en tant que code pour mettre à disposition les ressources, - de
jqpour interroger les fichiers JSON, - de
gitpour cloner le référentiel de code source.
Vous trouverez les instructions pour télécharger et installer ces outils pour votre environnement d'exploitation dans le guide " Getting started with solution tutorials ". Pour éviter l'installation de ces outils, vous pouvez utiliser le Cloud Shell
Création de services
Dans cette section, vous provisionnerez un VPC, un sous-réseau, un groupe de sécurité et une instance de serveur virtuel (VSI) en utilisant le IBM Cloud Shell et le IBM Cloud CLI. Les instances VSI répondent souvent aux pics de demande, après quoi elles peuvent être suspendues ou arrêtées afin que l'environnement cloud s'adapte parfaitement à vos besoins d'infrastructure.
Si vous préférez utiliser un modèle Terraform pour générer ces ressources, vous pouvez utiliser le modèle disponible ici : https://github.com/IBM-Cloud/vpc-tutorials/tree/master/vpc-lamp et suivre les instructions du fichier README.md. Ce modèle peut également être utilisé dans Schematics
- Une fois connecté à votre compteIBM Cloud, lancez IBM Cloud Shell.
- Dans le shell, vous êtes automatiquement connecté à l'une des régions IBM Cloud, vous pouvez changer de région si vous le souhaitez en exécutant la commande suivante :
ibmcloud target -r <region-name> -g <resource-group>
Création d'une ou de plusieurs clés SSH
-
Dans le VPC, une clé SSH est utilisée pour l'accès d'un administrateur à une instance VSI, au lieu d'un mot de passe. Créez une clé SSH en exécutant la commande suivante et acceptez les valeurs par défaut lorsque vous y êtes invité. Pour plus d'informations sur les clés SSH, reportez-vous à la rubrique Clés SSH dans la documentation.
ssh-keygen -t rsa -b 4096La commande ci-avant génère deux fichiers dans le répertoire
~/.ssh:id_rsaetid_rsa.pub. Votre session Cloud Shell est de courte durée ; les fichiers que vous créez dans IBM Cloud Shell doivent être sauvegardés en lieu sûr pour pouvoir être réutilisés ultérieurement. Une option de téléchargement et de transfert de fichiers est disponible dans Cloud Shell, dans la section supérieure droite de l'écran.Si vous disposez d'une clé SSH existante que vous souhaitez réutiliser, vous pouvez la transférer vers votre session Cloud Shell à la place.
-
Ajoutez la clé SSH à votre compte.
SSHKEY_ID=$(ibmcloud is key-create sshkey-lamp-tutorial @$HOME/.ssh/id_rsa.pub --json | jq -r '.id')
Création d'un cloud privé virtuel, de sous-réseaux et de groupes de sécurité
-
Créez un VPC. Pour plus d'informations, consultez la documentation relative à la création d'un VPC dans la console ou l'interface CLI.
VPC_ID=$(ibmcloud is vpc-create vpc-lamp-tutorial --json | jq -r '.id') -
Créez le sous-réseau de votre cloud privé virtuel.
SUBNET_ID=$(ibmcloud is subnet-create subnet-lamp-1 $VPC_ID --zone $(ibmcloud target --output json | jq -r '.region.name')-1 --ipv4-address-count 256 --json | jq -r '.id') -
Créez le groupe de sécurité de votre cloud privé virtuel.
SG_ID=$(ibmcloud is security-group-create sg-lamp-1 $VPC_ID --json | jq -r '.id') -
Ajoutez une règle pour limiter les communications entrantes vers le port SSH 22.
ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 22 --port-max 22 --jsonVous pouvez restreindre l'accès au port SSH à un sous-ensemble d'adresses, en utilisant --remote
dans la commande ci-dessus pour limiter qui peut accéder à ce serveur, c'est-à-dire ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 22 --port-max 22 --json -
Ajoutez une règle pour limiter les communications entrantes vers le port HTTP 80.
ibmcloud is security-group-rule-add $SG_ID inbound tcp --port-min 80 --port-max 80 --jsonVous pouvez également restreindre l'accès au port HTTP à un sous-ensemble d'adresses, en utilisant --remote
dans la commande ci-dessus pour limiter l'accès à ce serveur, c'est-à-dire ibmcloud is security-group-rule-add $SG_ID inbound tcp --remote YOUR_IP_ADDRESS --port-min 80 --port-max 80 --json -
Ajoutez une règle pour autoriser toutes les communications sortantes. Cela est nécessaire pour installer un logiciel. Cette règle peut être désactivée ou supprimée ultérieurement.
ibmcloud is security-group-rule-add $SG_ID outbound all --json
Créer une instance de serveur virtuel
- IBM Cloud met à jour périodiquement l'image Ubuntu avec le dernier logiciel, obtenez l'ID image pour la dernière Ubuntu 20.x en exécutant la commande suivante.
IMAGE_ID=$(ibmcloud is images --json | jq -r '.[] | select (.name=="ibm-ubuntu-22-04-1-minimal-amd64-3") | .id') - Créer une instance de serveur virtuel
NIC_ID=$(ibmcloud is instance-create vsi-lamp-1 $VPC_ID $(ibmcloud target --output json | jq -r '.region.name')-1 cx2-2x4 $SUBNET_ID --image-id $IMAGE_ID --key-ids $SSHKEY_ID --security-group-ids $SG_ID --json | jq -r '.primary_network_interface.id') - Réservez une adresse IP flottante.
FLOATING_IP=$(ibmcloud is floating-ip-reserve fip-lamp-1 --nic-id $NIC_ID --json | jq -r '.address') - Connectez-vous au serveur avec SSH. Notez qu'il peut s'écouler jusqu'à une minute avant que le serveur nouvellement créé soit accessible via SSH.
Vous devez connaître l'adresse IP flottante pour accéder au serveur virtuel via votre navigateur. Cette adresse ayant été capturée précédemment dans une variable d'interpréteur de commandes, vous pouvez exécuter la commande suivante pour l'obtenir :ssh root@$FLOATING_IPecho $FLOATING_IP. Vous pouvez également exécuteribmcloud is floating-ips --jsonet rechercher le nom utilisé pour créer l'adresse IP flottantefip-lamp-1dans le résultat. Vous pouvez également trouver l'adresse IP flottante du serveur à partir de la console web.
Installation d'Apache, de MySQL et de PHP
Dans cette section, vous exécutez des commandes pour mettre à jour les sources de package Ubuntu et installez Apache, MySQL et PHP avec la dernière version.
Si le serveur est lancé pour la première fois, il se peut qu'il exécute tout de suite des mises à jour du système et vous empêche d'exécuter les commandes ci-dessous. Vous pouvez vérifier le statut des mises à jour du système à l'aide de la
commande ps aux | grep -i apt et attendre la fin de la tâche automatisée pour les mises à jour du système ou arrêter cette tâche.
- Désactivez le mode interactif lors des mises à jour.
export DEBIAN_FRONTEND=noninteractive - Mettez à jour les packages.
apt update - Installez Apache.
apt install apache2 -y - Installez MySQL.
apt install mysql-server -y - Installez PHP.
apt install php libapache2-mod-php php-mysql php-common php-cli -y
Vérification de l'installation et de la configuration
Dans cette section, vous vérifiez qu'Apache, MySQL et PHP sont à jour et s'exécutent sur l'image Ubuntu. Vous implémentez également les paramètres de sécurité recommandés pour MySQL.
- Vérifiez Ubuntu en ouvrant l'adresse IP flottante dans le navigateur. Vous devriez voir la page d'accueil Ubuntu.
Vérifier Ubuntu - Passez en revue les versions d'Apache, MySQL et PHP installées à l'aide des commandes suivantes.
apache2 -vmysql -Vphp -v - Ouvrez une invite
mysql.mysql - Exécutez les commandes suivantes en remplaçant yourPasswordpar votre mot de passe.
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'yourPassword'; - Quittez l'invite
mysql.exit - Exécutez le script suivant pour sécuriser la base de données MySQL. Choisissez les options qui correspondent le mieux à vos préférences ou appuyez simplement sur la touche Entrée pour parcourir rapidement la configuration.
mysql_secure_installation - En outre, vous pouvez créer rapidement une page d'information PHP à l'aide de la commande suivante.
echo "<?php phpinfo(); ?>" > /var/www/html/info.php - Affichez la page d'informations PHP que vous avez créée : ouvrez un navigateur et accédez à
http://{FloatingIPAddress}/info.php. Remplacez l'adresse IP flottante de votre instance de serveur virtuel. Elle devrait se présenter comme suit :
Installation et configuration de WordPress
Découvrez votre pile LAMP en installant une application. Les étapes suivantes installent la plateforme open source WordPress, qui est souvent utilisée pour créer des sites Web et des blogues. Pour plus d'informations et de réglages pour l'installation en production, voir la documentation de WordPress
- Exécutez la commande suivante pour installer WordPress.
apt install wordpress -y - Configurez WordPress pour utiliser MySQL et PHP. Exécutez la commande suivante pour ouvrir un éditeur de texte et créer le fichier
/etc/wordpress/config-localhost.php.sensible-editor /etc/wordpress/config-localhost.php - Copiez les lignes suivantes dans le fichier en remplaçant yourPassword par le mot de passe de votre base de données MySQL et en conservant les autres valeurs. Enregistrez et quittez le fichier.
<?php define('DB_NAME', 'wordpress'); define('DB_USER', 'wordpress'); define('DB_PASSWORD', 'yourPassword'); define('DB_HOST', 'localhost'); define('WP_CONTENT_DIR', '/usr/share/wordpress/wp-content'); ?> - Ouvrez une invite
mysqlet indiquez votre mot de passe.mysql -u root -p - Exécutez les commandes suivantes en remplaçant votre mot de passe de la base de données par yourPassword et en laissant les autres valeurs inchangées.
CREATE DATABASE wordpress;CREATE USER 'wordpress'@'localhost' IDENTIFIED BY 'yourPassword';GRANT SELECT,INSERT,UPDATE,DELETE,CREATE,DROP,ALTER ON wordpress.* TO 'wordpress'@'localhost';FLUSH PRIVILEGES; - Quittez l'invite
mysql.exit - Déplacez l'installation WordPress vers la racine du document du serveur Web.
ln -s /usr/share/wordpress /var/www/html/wordpressmv /etc/wordpress/config-localhost.php /etc/wordpress/config-default.php - Effectuez la configuration de WordPress et publiez sur la plateforme. Ouvrez un navigateur et allez sur
http://{FloatingIPAddress}/wordpress/wp-admin. Remplacez l'adresse IP flottante de votre instance. Il devrait ressembler à l'image suivante.
Le site WordPress fonctionne
Configuration de domaine
Pour utiliser un nom de domaine existant avec votre serveur LAMP, mettez à jour l'enregistrement A pour qu'il pointe vers l'adresse IP flottante de l'instance de serveur virtuel.
Surveillance du serveur et gestion des journaux
Pour garantir la disponibilité du serveur et une expérience utilisateur optimale, la surveillance doit être activée sur chaque serveur de production. Plusieurs options sont disponibles pour surveiller votre instance de serveur virtuel et capturer les journaux dans un emplacement central pour analyse.
Surveillance du serveur
Vous pouvez surveiller l'utilisation de l'UC, du volume, de la mémoire et du réseau de vos instances VSI après avoir configuré une instance du service IBM Cloud Monitoring. Si vous souhaitez configurer le service de surveillance, suivez les étapes décrites dans la documentation Surveillance d'un hôte Linux.
Consignation du serveur
Vous pouvez créer une instance IBM Cloud Logs pour gérer les journaux du système et des applications dans IBM Cloud
IBM Cloud Logs offre aux administrateurs, aux équipes DevOps et aux développeurs des fonctions avancées permettant de filtrer, de rechercher et de suivre les données de journal, de définir des alertes et de concevoir des vues personnalisées pour surveiller les journaux système et d'application
Suivez les instructions décrites dans la section Gestion de l'agent de journalisation pour Linux
Configuration d'un volume de données chiffrées par BYOK (Bring-Your-Own-Key) (facultatif)
L'instance de serveur virtuel a été créée avec un volume d'amorçage chiffré de 100 Go géré par le fournisseur, mais si vous supprimez cette instance, les données à protéger devront être transférées avant la suppression de l'instance de serveur virtuel. Une autre solution consiste à créer un volume de données pouvant être conservé même si l'instance de serveur virtuel est supprimée et connecté à une nouvelle instance de serveur virtuel. Vous pouvez également chiffrer le volume avec votre propre clé. Si c'est ce que vous souhaitez, suivez les étapes décrites ci-après pour créer un volume de données et le connecter à votre instance de serveur virtuel.
-
Créez un fichier de configuration de volume de données.
VOLUME_ID=$(ibmcloud is volume-create volume-lamp-1 10iops-tier $(ibmcloud target --output json | jq -r '.region.name')-1 --capacity 100 --json | jq -r '.id')Dans le cloud privé virtuel, vous avez également la possibilité d'utiliser une clé de chiffrement gérée par le client. Pour stocker vos propres clés de chiffrement, vous pouvez utiliser l'un des deux services disponibles : (1) Un service FIPS 140-2 de niveau 3 IBM Key Protect Voir la rubrique Mise à disposition du service IBM Key Protect dans la documentation. (2) Un service FIPS 140-2 niveau 4 IBM Cloud Hyper Protect Crypto Services, voir la rubrique Initiation à IBM Cloud Hyper Protect Crypto Services dans la documentation. Lors de la création du volume, vous pouvez spécifier le paramètre
--encryption-keyavec le nom de ressource de cloud pour la clé de chiffrement à utiliser. -
Capturez l'ID de l'instance de serveur virtuel que vous avez créée précédemment en répertoriant toutes les instances et en procédant à un filtrage en fonction du nom de l'instance :
VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id') -
Connectez le volume de données à votre instance de serveur virtuel existante.
ibmcloud is instance-volume-attachment-add attachment-data-1 $VSI_ID $VOLUME_ID --auto-delete false --json -
Connectez-vous au serveur avec SSH.
ssh root@$FLOATING_IP -
Configurez le volume de données nouvellement créé sur l'instance de serveur virtuel ; exécutez chaque ligne ci-dessous l'une après l'autre.
new_bsv=$(echo $(parted -l 2>&1) | awk 'NR==1{print $2}' | sed 's/:$//') parted $new_bsv mklabel gpt parted -a opt $new_bsv mkpart primary ext4 0% 100% new_part=${new_bsv}1 mkfs.ext4 -L lamp-data ${new_part} mkdir /data mount ${new_part} /data echo "${new_part} /data ext4 defaults,relatime 0 0" | tee -a /etc/fstab mount -a
Configuration d'Apache pour utiliser le nouveau système de fichiers /data
- Arrêtez le service Apache.
service apache2 stop - Déplacez le répertoire Apache de /var vers /data.
mv /var/www /data/ - Créez un lien vers le nouvel emplacement.
ln -s /data/www /var/www - Démarrez le service Apache.
service apache2 start
Configuration de MySQL pour utiliser le nouveau système de fichiers /data
- Arrêtez le service MySQL.
service mysql stop - Déplacez le répertoire MySQL de /var vers /data.
mkdir /data/libmv /var/lib/mysql /data/lib/ - Créez un lien vers le nouvel emplacement.
ln -s /data/lib/mysql /var/lib/mysql - Ajoutez un alias du nouvel emplacement à AppArmor, sinon AppArmor bloquera l'accès.
echo "alias /var/lib/mysql/ -> /data/lib/mysql/," >> /etc/apparmor.d/tunables/alias - Redémarrez le service AppArmor.
systemctl restart apparmor - Démarrez le service MySQL.
service mysql start - Ouvrez un navigateur et allez sur
http://{FloatingIPAddress}/wordpress. Remplacez l'adresse IP flottante de votre instance. Vous devriez pouvoir accéder à votre page WordPress telle qu'elle était avant l'ajout du nouveau volume de données.
Redimensionnement de l'instance de serveur virtuel (facultatif)
L'instance de serveur virtuel a été créée à l'aide de l'un des profils les plus petits disponibles dans le cloud privé virtuel, c'est-à-dire avec 2 unités centrales virtuelles et 4 Gio de mémoire RAM. Selon vos exigences d'utilisation, il est possible d'augmenter ou de diminuer le nombre d'unités centrales virtuelles ou la quantité de mémoire RAM disponible ; voir Redimensionnement d'une instance de serveur virtuel.
-
Capturez l'ID de l'instance de serveur virtuel que vous avez créée précédemment en répertoriant toutes les instances et en procédant à un filtrage en fonction du nom de l'instance :
VSI_ID=$(ibmcloud is instances --json | jq -r '.[] | select(.name == "vsi-lamp-1") | .id') -
Arrêtez l'instance.
ibmcloud is instance-stop $VSI_ID -
Redimensionnez l'instance.
ibmcloud is instance-update $VSI_ID --profile cx2-4x8Vous pouvez obtenir la liste des profils alternatifs en émettant la commande
ibmcloud is instance-profiles; toutefois, prenez note des restrictions relatives au redimensionnement reposant sur les profils en cours/cible mentionnées dans la rubrique Redimensionnement d'une instance de serveur virtuel. -
Démarrez l'instance.
ibmcloud is instance-start $VSI_ID -
Il peut être nécessaire d'attendre quelques minutes que l'instance de serveur virtuel soit placée sur un hôte approprié et démarrée. Ouvrez un navigateur et allez sur
http://{FloatingIPAddress}/wordpress. Remplacez l'adresse IP flottante de votre instance. Vous devriez pouvoir accéder à votre page WordPress telle qu'elle était avant le redimensionnement.
Suppression de ressources
- Dans la console VPC, cliquez sur IP flottantes, puis sur l'adresse IP de vos instances VSI, puis dans le menu d'action, sélectionnez Libérer. Confirmez que vous souhaitez libérer l'adresse IP.
- Accédez ensuite à Instances de serveur virtuel et supprimez votre instance.
- Une fois les instances VSI supprimées, passez aux Sous-réseaux. Supprimez votre sous-réseau.
- Une fois les sous-réseaux supprimés, cliquez sur l'onglet VPC et supprimez votre VPC.
- Si vous avez créé le volume de données facultatif et que vous n'en avez plus besoin, accédez à l'onglet Volumes de stockage par blocs et supprimez le volume.
Lorsque vous utilisez la console, vous devrez peut-être actualiser votre navigateur pour consulter les informations d'état mises à jour après la suppression d'une ressource.
En fonction de la ressource, le service peut ne pas être supprimé immédiatement mais conservé un certain temps (7 jours par défaut). Pour récupérer la ressource, vous pouvez la supprimer de manière définitive ou la restaurer pendant la période de conservation. Pour savoir comment utiliser la récupération de ressources, consultez ce document.