Fermer

octobre 29, 2018

Déployer une application Laravel sur Alibaba Cloud à l'aide de Docker –


Lors de notre récent concours, nous avons reçu de nombreuses contributions remarquables afin de trouver la meilleure astuce pour tirer le meilleur parti des services Alibaba Cloud. Ce fut une tâche amusante mais difficile pour nos juges de choisir les gagnants parmi tant d’entrées utiles et intéressantes. Malheureusement, après de vives délibérations et des débats houleux, ils ont décidé que le premier prix de la compétition reviendrait à Magyar András, qui avait envoyé cette astuce sur le déploiement d’une application Laravel sur Alibaba Cloud Container Service avec Docker. C'est un guide complet qui démontre l'utilisation de plusieurs technologies pertinentes – Docker, Laravel, Apache, Redis, Git et qui connecte Alibaba Cloud Container Service, Container Registry le Virtual Private Cloud d'Alibaba et Gestion de l'accès aux ressources .

Dans ce didacticiel, nous allons déployer une application Laravel utilisant Docker et Alibaba Cloud Container Service .

Conditions préalables

Avant de commencer ce guide vous aurez besoin des éléments suivants:

Préparation de l'application au déploiement

Tout d'abord, vous avez besoin d'une application Laravel que vous pouvez dockerize. Vous pouvez simplement copier mon exemple de GitHub et le transférer dans votre propre référentiel git ou vous pouvez créer une nouvelle application Laravel en utilisant Composer avec cette commande: composer créer-projet --prefer-dist laravel / laravel appname

Nous devons ajouter des fichiers à la racine de l'application Laravel

Vous devez créer un fichier de configuration d'environnement pour l'environnement de production, appelons-le .env.prod. Vous pouvez copier votre fichier .env existant, mais n'oubliez pas de modifier les valeurs (par exemple, définissez APP_ENV en production).

Nous aurons également besoin d'un fichier de configuration pour le serveur Web (nous utiliserons Apache), créez un fichier vhost.conf pour notre hôte virtuel.


   DocumentRoot / app / public

  
    AllowOverride all
    Exiger tout accordé
  

  ErrorLog $ {APACHE_LOG_DIR} /error.log
  CustomLog $ {APACHE_LOG_DIR} /access.log combiné

Pour construire notre conteneur, nous avons besoin d'un fichier Docker, nous allons utiliser une construction en plusieurs étapes:

 #Installer les dépendances à l'aide de composer

DU compositeur: 1.7 à la construction

WORKDIR / app

COPIE . / app

RUN composer installer

COPY .env.prod .env

#Application

DE php: 7.2-apache

Lancez docker-php-ext-install mysqli pdo pdo_mysql

EXPOSE 80

COPY --from = build / app / app

COPY vhost.conf /etc/apache2/sites-available/000-default.conf

RUN chown -R www-data: www-data / app 
&& a2enmod réécrire

Nous devons également exclure certains fichiers et dossiers du conteneur. Vous devez donc créer un fichier .dockerignore (vous pouvez étendre cette liste si vous le souhaitez):

 .git /
vendeur/
node_modules /
yarn-error.log

Création d'un référentiel dans le registre de conteneurs Cloud d'Alibaba

Sur la console Alibaba Cloud, accédez à Produits> Calcul élastique> Registre de conteneurs .

 1_menu

, vous devez définir le mot de passe de connexion au registre.

 3_registry

Nous devons créer un espace de noms, puis créer un référentiel pour l'application.

 6_registry

Assurez-vous de définir le type de référentiel sur Privé, sinon le référentiel sera accessible sans le mot de passe. Vous pouvez également sélectionner la région de votre référentiel.

 7_registry

Le registre de conteneurs prend en charge GitHub, GitLab et Bitbucket comme source de code très utile. Si vous en utilisez un, vous pouvez choisir cette option, mais pour des raisons de simplicité, nous utiliserons l'option Référentiel local de ce tutoriel.

Vous devez créer le conteneur sur votre ordinateur local et le transférer dans le registre (si vous le souhaitez). un service d'hébergement Git Container Registry construira automatiquement les conteneurs, vous pourrez ainsi ignorer ces étapes.)

Exécutez la commande suivante à la racine de votre application Laravel pour construire le conteneur (vous pouvez remplacer la balise test / laravel: 1.0 par votre

docker build-t test / laravel: 1.0

Si vous cliquez sur Gérer à droite de votre référentiel dans le registre des conteneurs, vous pouvez trouver l’adresse de votre référentiel et un guide sur comment se connecter au registre et envoyer une image dans le référentiel.

 repo_info

Vous devez donc exécuter les commandes suivantes, mais avec votre propre région, espace de noms et référentiel:

 docker login --username=user@example.com registry-intl.eu-central-1.aliyuncs.com
docker tag test / laravel: 1.0 registry-intl.eu-central-1.aliyuncs.com/ma_test/laravel1:1.0
docker push registry-intl.eu-central-1.aliyuncs.com/ma_test/laravel1:1.0

Une fois l'image réussie, vous la verrez sous l'onglet Tags.

 tags

Création d'un VPC

Sur la console Alibaba Cloud, accédez à Produits> Mise en réseau> Virtuelle Private Cloud et activez le VPC.

Choisissez votre région dans le menu supérieur et créez un VPC et un VSwitch.

 vpc1

 vpc2

Création d'un cluster

Vous devez d'abord activer la RAM ( Produits> Surveillance et gestion> Gestion de l'accès aux ressources ), puis accéder à Produits> Elastic Computing> Container Service .

Container Le service prend en charge Swarm et Kubernetes. Nous allons maintenant utiliser Swarm, vous devez donc sélectionner Swarm dans le menu de gauche.

 swarm

Cliquez sur le bouton Créer un cluster et configurez votre cluster (n'oubliez pas de sélectionner la même région vous avez sélectionné votre VPC).

 cs2

 cs3

J'ai choisi 2x (2 nœuds) 1 noyau 1GB ECS pour le démo, mais vous pouvez choisir une configuration différente si vous le souhaitez.

Dans la section Connexion, vous devez créer des clés SSH ou définir un mot de passe. Je recommande vivement les clés SSH, mais pour des raisons de simplicité, vous pouvez utiliser des mots de passe pour le moment.

Lorsque vous avez terminé la configuration, vous pouvez cliquer sur le bouton Créer (une boîte de dialogue de confirmation s'affiche avec les informations de tarification).

Lorsque la création de la grappe est terminée et que vous pouvez voir votre grappe dans la liste, cliquez sur Gérer.

Vous devez vous connecter à votre référentiel privé pour accéder aux images, cliquez donc sur le bouton Connexion au concentrateur. Si vous ne connaissez pas le nom de domaine du référentiel, accédez au panneau de configuration du registre de conteneurs et cliquez sur Gérer à droite de votre référentiel. Copiez l'adresse du VPC (par exemple: registry-intl-vpc.eu-central-1.aliyuncs.com/ma_test/laravel1 ) – c'est votre nom de domaine de référentiel. Votre nom d'utilisateur et votre mot de passe sont les nom d'utilisateur et mot de passe de votre registre.

 password2

Les nœuds du cluster peuvent désormais extraire votre image du référentiel privé.

Déploiement de l'application

Sur le Le panneau de commande du service de conteneur, cliquez sur Applications dans le menu de gauche, puis sur Créer une application.

 1

Définissez le nom et la version, cochez Pull Docker Image (cela vous assurera bien la fin avec la dernière version), puis cliquez sur le bouton Créer avec une image.

 2

Sélectionnez votre image (dans la fenêtre contextuelle, vous trouverez vos images sous l'onglet Utilisateur) et une version. Dans la section Réseau, sous Routage Web, cliquez sur le symbole plus bleu. Pour le port conteneur, tapez 80. Pour le domaine, comment vous appelez-le. Vous pouvez également définir le nombre d'instances (Echelle).

 3

Cliquez sur Créer, puis sur Afficher la liste des applications. Sous Applications, vous devriez voir votre nouveau conteneur. Cliquez sur le conteneur, dans l'onglet services, cliquez à nouveau sur le nom du conteneur. Vous allez maintenant voir quelques informations sur votre conteneur. Cliquez sur l'URL Access Endpoint et vous verrez la page d'accueil de votre application Laravel.

 endpoint

Connexion de l'application à MySQL et Redis

Nous aurons besoin d'une base de données SQL et d'une session. base de données (nous utiliserons Redis), nous devons donc configurer ces services et configurer les connexions.

Allez à Produits> ApsaraDB> ApsaraDB pour Redis . Dans le menu supérieur, sélectionnez la région où se trouve votre VPC. Créez une instance qui répond à vos besoins (vous pouvez utiliser une instance maître-esclave 4G gratuitement pendant un mois). Une fois votre instance créée et visible dans la liste des instances, cliquez sur gérer. Dans le menu de gauche, sélectionnez les paramètres de la liste blanche et définissez la valeur par défaut sur 0.0.0.0/0 pour autoriser les connexions à partir de tous les ordinateurs du VPC. Vous pouvez également ajouter la plage IP / IP privée de vos instances ECS.

Dans le menu de gauche sélectionnez Informations sur l'instance et copiez l'adresse de connexion. Sur votre ordinateur local, ouvrez le fichier .env.prod et définissez l'hôte et le mot de passe de Redis.

De la même manière que

 REDIS_HOST = r-4xoba5b097200b94.redis.germany.rds.aliyuncs.com
REDIS_PASSWORD = mon-mot de passe
REDIS_PORT = 6379

Vous devez définir les pilotes de cache et de session sur redis:
CACHE_DRIVER = redis
SESSION_DRIVER = redis

Laravel a besoin d'un paquet nommé predis pour interagir avec Redis.

Sur votre machine locale, exécutez la commande suivante, cela installera predis et l'ajoutera à la liste des dépendances:

composer require require prédis / predis [19659009] Nous avons configuré la connexion Redis, mais avant de déployer un nouveau conteneur, nous allons également configurer la connexion MySQL.

Allez à Produits> ApsraraDB> ApsaraDB pour RDS . Dans le menu supérieur, sélectionnez la région où se trouve votre VPC. Créez une instance qui répond à vos besoins (vous pouvez utiliser une instance gratuite pendant un mois avec 1 CPU principal, 1 Go de mémoire, 20 Go de stockage).

Une fois votre instance créée, vous pouvez la voir dans la liste des instances, cliquez sur Gérer. Dans le menu de gauche, choisissez Sécurité et modifiez la liste blanche de la même manière que nous l'avons fait avec Redis. Vous devez créer un compte de base de données et une base de données, accorder un accès en lecture-écriture à l'utilisateur.

 rds4

Dans le menu de gauche, sélectionnez Options de connexion et copiez l'adresse intranet (hôte). [19659010]  rds3

Sur votre ordinateur local, vous devez modifier les paramètres de connexion à la base de données de votre fichier .env.prod. Similairement à ceci:

 DB_CONNECTION = mysql
DB_HOST = rm-4xo3wjj1wh2nwi7yn.mysql.germany.rds.aliyuncs.com
DB_PORT = 3306
DB_DATABASE = laravel1
DB_USERNAME = laravel1
DB_PASSWORD = mon-mot de passe

Déploiement de la nouvelle version de l'application

Générez le conteneur et transmettez-le au registre:

Vous devez exécuter des commandes similaires à celles-ci (remplacer la région, etc.):

 docker build -t test / laravel: 1.1.
docker tag test / laravel: 1.1 registry-intl.eu-central-1.aliyuncs.com/ma_test/laravel1:1.1
docker push registry-intl.eu-central-1.aliyuncs.com/ma_test/laravel1:1.1

Allez à Container Service> Applications votre application devrait apparaître dans la liste, cliquez sur Mettre à jour. Modifiez la valeur du champ de version et modifiez l'image dans le fichier yaml (modèle).

Par exemple, remplacez registry-intl-vpc.eu-central-1.aliyuncs.com/ma_test/laravel1:1.0 avec registry-intl-vpc.eu-central-1.aliyuncs.com/ma_test/laravel1:1.1 . Cliquez sur OK et le conteneur sera remplacé par le nouveau. Vous pouvez également utiliser la politique de publication bleu-vert si vous le souhaitez.

 update

Votre application peut désormais se connecter à Redis et MySQL. Si vous souhaitez exécuter une migration de base de données, vous pouvez cliquer sur l'application, dans l'onglet services, cliquer à nouveau sur le nom de l'application, sélectionner un conteneur et cliquer sur Web Terminal. Vous devez exécuter les commandes suivantes:

 cd / app
php artisan migrer

Remarque: Si vous recevez une erreur spécifiée pendant trop longtemps lorsque vous essayez d'exécuter la migration, vous pouvez trouver une solution ici .

Ajoutez votre nom de domaine à le cluster

Allez à Applications dans le panneau de commande du service de conteneur, puis cliquez sur mettre à jour à droite de votre application. Dans le fichier yaml, ajoutez votre domaine à aliyun.routing.port_80 . Vous pouvez séparer les valeurs par des points-virgules, par exemple: aliyun.routing.port_80: laravel1; votredomaine.com

 domaine

Accédez à la liste des clusters du panneau de configuration du service de conteneur. Cliquez sur Gérer à droite du cluster. Cliquez sur Paramètres de l'équilibreur de charge. Vous pouvez maintenant voir l'id de l'équilibreur de charge. Allez à Produits> Mise en réseau> Equilibreur de charge serveur copiez l'adresse IP de votre équilibreur de charge et ajoutez-la à vos enregistrements DNS.

Vous pouvez également ajouter un certificat TLS à l'équilibreur de charge si vous voulez.

Utiliser le service de stockage d'objets

Vous souhaitez probablement stocker des fichiers, vous avez donc besoin du service de stockage d'objets en nuage d'Alibaba. Vous pouvez créer un compartiment et connecter votre application au service à l'aide de ces bibliothèques officielles:

  1. aliyun / aliyun-oss-php-sdk-laravel
  2. aliyun / aliyun-oss-php-sdk-flysystem

Conclusion [19659004] Vous avez correctement conteneurisé et déployé une application Laravel sur Container Service et configuré plusieurs services Alibaba Cloud de manière à ce qu'ils fonctionnent ensemble pour fournir une infrastructure évolutive et fiable à votre application. J'espère que ce tutoriel vous a été utile!




Source link