déployer une application laravel avec capistrano

Déployer une application Laravel avec Capistrano

Partagez sur:

Dans cet article, nous allons voir comment déployer une application Laravel avec Capistrano sur votre serveur de production.

Vous venez de créer une application Web et vous prévoyez de la mettre en ligne.

Comment déployer automatiquement une application Laravel avec deployer

Cela peut être fait de plusieurs manières.

Nous allons passer par les étapes suivantes par exemple d’application Laravel mais cela peut être appliqué à n’importe quel autre langage ou technologie.

Déployer une application Laravel avec Capistrano

Dans le passé

Vous avez peut-être déjà mis certains sites Web en ligne dans le passé. Vous avez probablement utilisé un client FTP et téléchargé les bits et octets à la main.

Ou peut-être vous êtes-vous toujours connecté à votre serveur via ssh et avez extrait les modifications manuellement.

 

L’objectif

Notre objectif est de simplifier au maximum ce processus. L’idée est d’utiliser votre référentiel de code comme source pour chaque déploiement.

L’outil de déploiement, dans notre cas capistrano, se connectera automatiquement à votre serveur et construira votre système directement à partir de votre référentiel.

 

Ce dont vous aurez besoin

Pour déployer une application Laravel avec capistrano, nous avons besoin de quelques réglages et configurations:

 

  • Sur votre serveur distant

Votre serveur distant doit fournir un accès SSH. Il devrait également avoir installé toutes les dépendances nécessaires à votre projet telles que GIT, PHP, MySQL, Composer, … En plus de cela, vous n’avez besoin d’aucun logiciel supplémentaire sur votre serveur de production.

  • Sur votre ordinateur local

Pour installer et utiliser capistrano, vous avez besoin d’au moins Ruby 1.9 (si vous n’avez pas installé Ruby, je vous recommande de l’installer en utilisant rbenv).

Pour installer capistrano, il vous suffit d’exécuter:

$ gem install capistrano

 

Alors pourquoi capistrano, demandez-vous. Comme toujours, il existe de nombreuses façons d’accomplir une tâche, mais dans mon cas, capistrano a toujours semblé être l’approche la plus simple et la plus flexible.

Vous pouvez le configurer selon tous vos besoins et il existe de nombreux plugins qui simplifient à nouveau votre travail.

Capistrano est un utilitaire et un framework pour exécuter des commandes en parallèle sur plusieurs machines distantes, via SSH. Il utilise un DSL simple (emprunté en partie à Rake) qui vous permet de définir des tâches, qui peuvent être appliquées à des machines dans certains rôles.

Il prend également en charge les connexions de tunnel via une machine passerelle pour permettre aux opérations d’être effectuées derrière les VPN et les pare-feu.

Maintenant, nous avons tout ce dont nous avons besoin, alors configurons nos paramètres de déploiement.

Mais d’abord, nous devons créer un dossier sur le serveur distant où tous les fichiers doivent être déployés.

Connectez-vous à votre serveur avec SSH et créez un dossier. Un endroit commun est /var/www/. Alors faisons ceci:

$ sudo mkdir /var/www/my-app

$ sudo chown -R username:group /var/www/my-app

 

C’est ça. Il n’y a plus rien à faire sur le serveur distant, vous pouvez donc fermer la connexion ssh et continuer. Allez dans votre projet (ou dans tout autre dossier, cela n’a pas d’importance pour le moment) et exécutez:

$ cd my-project
$ cap install

 

Cette commande créera les fichiers de base dont nous avons besoin.

Après cela, votre dossier devrait ressembler à ceci.

.
├── Capfile
├── config
│   ├── deploy
│   │   ├── production.rb
│   │   └── staging.rb
│   └── deploy.rb
└── lib
    └── capistrano
        └── tasks

 

Le fichier Capfile est comme le point de montage de capistrano, mais pour l’instant, nous aurons juste besoin d’éditer config/deploy.rb et config/deploy/production.rb.

Le premier fichier est responsable de toutes les étapes de construction, le second fichier représente un « environnement ».

Vous pouvez avoir plusieurs environnement comme la production, les tests …

Dans chaque fichier de configuration de environnement, vous pouvez spécifier votre (vos) serveur (s).

Ouvrons ces deux fichiers dans votre éditeur de texte préféré et remplaçons le contenu par les extraits de code suivants. Nous passerons en revue le code par la suite.

Nous allons commencer par config/deploy/production.rb:

role :app, %w{username@123.456.789.123} # EDIT your ssh username and server ip address 
 
set :ssh_options, {
    auth_methods: %w(password),
    password: "" # EDIT your ssh password
}

 

Ensuite, nous modifierons config/deploy.rb:

set :application, "Your app name"  # EDIT your app name
set :repo_url,  "https://github.com/laravel/laravel.git" # EDIT your git repository
set :deploy_to, "/var/www/my-app" # EDIT folder where files should be deployed to
 
namespace :deploy do
     
    desc "Build"
    after :updated, :build do
        on roles(:app) do
            within release_path  do
                execute :composer, "install --no-dev --quiet" # install dependencies
                execute :chmod, "u+x artisan" # make artisan executable
            end
        end
    end
 
    desc "Restart"
    task :restart do
        on roles(:app) do
            within release_path  do
                execute :chmod, "-R 777 app/storage/cache"
                execute :chmod, "-R 777 app/storage/logs"
                execute :chmod, "-R 777 app/storage/meta"
                execute :chmod, "-R 777 app/storage/sessions"
                execute :chmod, "-R 777 app/storage/views"
            end
        end
    end
 
end

 

Vous devez maintenant mettre vos données dans chaque ligne avec un commentaire #EDIT (adresse IP, git repo, utilisateur ssh, mot de passe, etc.).

La variable :deploy_to doit être le dossier que nous venons de créer.

Votre serveur web (Apache, Nginx, …) doit pointer vers /var/www/my-app/current/public

Dans le bloc namespace :deploy du fichier deploy.rb, vous spécifiez ce qui doit réellement se passer pour chaque déploiement.

Il y a donc deux tâches. Dans la tâche de construction, nous installons mettre toutes vos dépendances PHP, comme vous y êtes habitué pendant le développement.

Après cela, nous rendons le fichier artisan exécutable afin de l’utiliser pour les migrations.

Dans la tâche de redémarrage, nous corrigeons les autorisations pour les dossiers de stockage.

 

Toutes ces tâches sont appelées dans l’ordre suivant. Vous pouvez vous connecter à chaque tâche si vous en avez besoin, mais pour l’instant, nous nous en tenons à notre configuration simple.

deploy:starting    - start a deployment, make sure everything is ready
deploy:started     - started hook (for custom tasks)
deploy:updating    - update server(s) with a new release
deploy:updated     - updated hook
deploy:publishing  - publish the new release
deploy:published   - published hook
deploy:finishing   - finish the deployment, clean up everything
deploy:finished    - finished hook

 

Chaque déploiement est stocké dans /var/www/my-app/releases/.

La tâche intégrée deploy: publication crée un lien symbolique du déploiement récent vers le dossier actuel.

De cette façon, vous pouvez conserver les anciennes versions et changer de version sans vous déconnecter pendant une seconde. Lorsque cette tâche a été exécutée, votre dernière version est en ligne.

Déployer l’application

C’est donc le moment que vous attendiez. Le plus dur est fait. Pour l’instant, à chaque fois que vous souhaitez fournir les mises à jour de votre application, il vous suffit d’exécuter la commande magique suivante. Capistrano lira vos fichiers config/deploy.rb et config/deploy/production.rb et exécutera chaque tâche.

Si une tâche échoue, le déploiement s’arrêtera et l’ancienne version est toujours en ligne.

Vous pouvez facilement ajouter vos propres tâches si votre processus de génération nécessite des étapes supplémentaires.

Pour plus d’informations, je vous recommande de lire la documentation officielle.

Après ces étapes de configuration de base, nous sommes prêts pour notre premier déploiement.

$ cap production deploy

 

Vous verrez un tas de texte en sortie et après peu de temps (selon votre serveur) tout devrait être terminé. C’était facile, non?

Remarque: Pour l’instant, nous avons juste configuré notre environnement de production, mais vous pouvez remplacer la production par un autre environnement, par exemple votre serveur de test et exécuter $ cap staging deploy.

 

Quelques trucs supplémentaires

Sécurité

Peut-être serez-vous un peu inquiet si vous devez mettre votre mot de passe en clair dans le fichier de configuration.

J’ai juste choisi cette façon de rendre la démonstration aussi simple que possible, mais dans le monde réel, vous voudrez peut-être utiliser une clé SSH.

Vous pouvez en importer un comme ceci:

 

set :ssh_options, {
    keys: %w("/path/to/your/key.pem"), # EDIT your ssh key
    auth_methods: %w(publickey)
}

 

Base de données

Pour l’instant, nous nous sommes simplement concentrés sur le déploiement des fichiers réels dans leur nouveau domicile, mais dans de nombreux scénarios, vous pouvez également faire quelque chose avec votre base de données.

Laravel a un outil parfait pour cela: les migrations. Vous pouvez simplement ajouter une nouvelle étape où vous exécutez ces migrations.

Après cela, notre tâche de construction pourrait ressembler à ceci:

desc "Build"
after :updated, :build do
    on roles(:app) do
        within release_path  do
            execute :composer, "install --no-dev --quiet" # install dependencies
            execute :chmod, "u+x artisan" # make artisan executable
            execute :php, "artisan migrate" # run migrations
        end
    end
end

 

 

Vous devez également ajouter cette tâche dans le bloc de transaction de la tâche de mise à jour. Désormais, chaque fois que vous déployez, la base de données sera mise à jour avec vos dernières migrations.

Retour en arrière

Parfois, vous déployez une version non fonctionnelle de votre application et vous devez annuler ces modifications. Capistrano a une fonction intégrée pour cela appelée « rollback ».

Exécutez simplement:

$ cap production deploy:rollback

 

Conclusion

Vous venez d’apprendre une manière très simple comment déployer une application Laravel avec capistrano sur vos serveurs de production.

Une fois le travail de configuration terminé, il suffit d’une seule commande pour déployer votre dernière version en quelques secondes.


Partagez sur: