Automatiser ses déploiements peut se révéler intéressant et pratique, faisant gagner du temps et limitant les erreurs humaines.
En 2018, GitHub a lancé le service Action permettant d’automatiser des processus sur sa plateforme. Grâce à un fichier de configuration placé dans son dépôt GitHub, il est possible d’exécuter une suite de tests, de déployer une app, etc.
Deployer est un outil PHP se focalisant sur le déploiement d’applications sans interruption de service, un fichier de configuration fixe les différents paramètres et une commande permet d’exécuter les opérations.
J’ai décidé de combiner ces outils pour gérer les déploiements de mon application.
Cet article se découpe en deux étapes :
- Configuration de Deployer en local
- Configuration de Deployer avec GitHub Actions
Configuration de Deployer en local
Tout d’abord, le paquet Deployer doit être installé via Composer.
composer require deployer/dist –dev
Deployer utilise un système de tâches qu’il exécute l’une après l’autre pour effectuer le déploiement. Un certain nombre de tâches sont présentes de base, d’autres peuvent être créées manuellement. Ces tâches peuvent être exécutées sur la machine locale ou sur le serveur vers lequel on souhaite déployer.
En l’occurrence, mon serveur ne propose pas d’environnement NodeJS ni la commande npm, je suis donc contraint de compiler mes assets sur ma machine locale. Pour cela, j’ai créé les deux tâches suivantes :
<?php
// recipe/recipe.php
namespace Deployer ;
// Installe les différents paquets NPM sur la machine locale
task('local:npminstall', function () {
runLocally('npm install');
});
// Permet de compiler les assets
task('local:npmbuild', function () {
runLocally('npm run production');
});
Maintenant le fichier deploy.php :
<?php
namespace Deployer;
require_once 'vendor/autoload.php';
require __DIR__ . '/recipe/recipe.php';
require 'recipe/common.php';
require 'recipe/laravel.php';
require 'contrib/rsync.php';
require 'contrib/php-fpm.php';
require 'contrib/npm.php';
set('application', 'Mon Application');
set('repository', 'git@github.com:monorganisation/mondepot.git'); // A remplacer par le lien de votre dépôt
set('composer_options', 'install --verbose --prefer-dist --no-progress --no-interaction --optimize-autoloader');
set('default_stage', 'dev');
set('ssh_multiplexing', true); // Si le script est exécuter sur Windows, il est peut-être nécessaire de passer cette valeur à false
set('keep_releases', 5);
host('ftp.mondomaine.com') // Adresse FTP fournie par mon hébergeur
->set('remote_user', 'moncomptessh') // Nom d’utilisateur SSH
->set('deploy_path', '/var/www/html/') // Chemin absolu du dossier dans lequel déployer l’application
->set('labels', ['stage' => 'prod']) // Catégorie du déploiement
->set('rsync_src', __DIR__ . DIRECTORY_SEPARATOR . 'public') // Indique d’où les fichiers compilés doivent être copiés
->set('rsync_dest','{{release_path}}/public'); // Indique la destination de cette copie
task('deploy', [
'deploy:info',
'deploy:setup',
'deploy:lock',
'deploy:release',
'deploy:update_code', // Exécute un git clone du dépôt
'deploy:shared',
'deploy:vendors', // Exécute composer install
'local:npminstall',
'local:npmbuild',
'local:htaccess',
'rsync',
'deploy:writable',
'deploy:clear_paths',
'deploy:symlink',
'artisan:migrate', // Migrer la base de donnée
'artisan:storage:link',
'deploy:unlock',
'deploy:cleanup',
'deploy:success',
]);
after('deploy:failed', 'deploy:unlock');
Le script s’exécute en lançant la commande suivante :
./vendor/bin/dep deploy -- stage=prod
Peut-être constaterez-vous une erreur ou qu’un mot de passe vous est demandé. En effet, toutes les commandes exécutées passent par un tunnel SSH entre votre machine locale et le serveur distant. Ce tunnel requiert une authentification. Le plus pratique est d’ajouter sa clé publique SSH au serveur distant. Chaque hébergeur peut proposer une marche à suivre différente pour le faire, jetez un œil aux FAQ.
Il est maintenant temps de se connecter au serveur via un logiciel FTP comme FileZilla. En effet, il est nécessaire de configurer votre fichier .env et le .htaccess.
Voici les dossiers et fichiers que vous devriez avoir à la racine de votre hébergement. Le dossier « current » est un lien vers le dernier déploiement. Les 5 derniers déploiements se trouvent dans le dossier « releases ». Finalement, le dossier shared contient les éléments qui sont communs à toutes les releases, comme le fichier .env.
Tout d’abord, ouvrez le fichier .htaccess et ajouter-y les lignes suivantes :
RewriteEngine on
RewriteRule ^((?!public/).*)$ current/public/$1 [L,NC]
Cela permet de faire pointer les requêtes vers la release la plus récente (« current »).
Maintenant, ouvrez le fichier « shared/.env ». Celui-ci doit être vide, remplissez-le avec les informations relatives à votre application.
Finalement, exécutez la commande suivante dans votre hébergement pour charger la configuration de votre fichier .env:
php artisan config:cache
A présent, vous devriez avoir un script de déploiement qui vous permet de mettre à jour facilement votre application depuis votre machine locale.
La deuxième partie de cet article, où l’on découvrira comment configurer Deployer avec GitHub Actions sera publiée ultérieurement.
Catégories :
Tech webTags :
PHP LaravelVous avez aimé cet article ? Suivez-nous sur Facebook pour ne rien manquer !