[Linux] Ecrire un outil de déploiement à l'aide de rsync avec un script shell

Je vais vous montrer comment créer facilement un outil pour déployer le contenu poussé vers git sur le serveur de production. Je suppose que je déploierai Laravel cette fois, mais je pense qu'il n'y a pas de problème particulier avec les autres langues. J'aimerais que vous ignoriez les endroits qui traitent du compositeur. Le site qui utilise ce type de méthode de déploiement ces jours-ci peut être hérité, mais ...

structure globale

Screen-Shot-2019-03-08-at-23.41.46.png

Après avoir développé dans votre propre environnement local, git commit et poussez pour monter à distance. Le code que les membres du projet ont poussé à distance s'accumule de plus en plus. Donnons-le au serveur de production à un bon stade! Donc, à ce moment-là, utilisez l'outil de déploiement pour refléter le dernier statut git dans l'environnement de production.

Le fait est qu'il est nécessaire de définir l'environnement dans lequel l'outil de déploiement est placé afin que la connexion ssh puisse toujours être établie dans l'environnement de production. Assurez-vous que vous avez vos clés publiques et privées dans un ensemble dans votre environnement de déploiement et conservez vos clés publiques en production. Considérez cette clé privée comme une clé pour un environnement verrouillé par un ensemble de clés publiques.

Veuillez vous référer ici

Résumé des paramètres d'authentification par clé publique ssh --Qiita

Dois-je git pull dans un environnement de production? ?? Vous pensez peut-être, mais je me demande si ce sera plus sûr car il peut être évité dans une certaine mesure en le limitant sur l'outil de déploiement. En outre, c'est un bon point que vous pouvez gérer de manière flexible des choses autres que le contenu de git.

Apprenez à utiliser rsync

rsync est une commande utilisée lorsque vous souhaitez copier un fichier de votre environnement sur un autre serveur. Fondamentalement

rsync [option] copier la destination de la copie source

Je vais copier en utilisant cette méthode. Cependant, puisqu'il est temps de déployer, j'ajouterai quelques options.


rsync \
        --recursive \
        --exclude='/storage/' \
        --exclude='.git*' \
        -e "ssh" ./ deploy@[Adresse IP de production]:[Où déployer l'environnement de production (e.g /var/Sous www)]

--- récursif signifie «récursif». Le sens est que dans la structure du répertoire, celui du bas est également la cible. Cette fois, tous les éléments sous ./ sont maintenant sujets à copie.

--exclude signifie "exclure". Par conséquent, le stockage ne sera pas déployé dans l'environnement de production. (Recommandé pour ceux qui envisagent de déployer Laravel! Vous pouvez empêcher le déplacement du journal de l'environnement de test)

Dernier -e" ssh "./ deploy @ [Adresse IP de production]: [Emplacement de destination de production (comme sous par exemple / var / www)]

Vous pourrez établir une connexion SSH avec l'environnement de production avec. Vous êtes maintenant prêt à copier!

Code entier


$BASE_DIR =Où faire un git pull sur le serveur de déploiement
$PROD_ADDRESS =Adresse IP de production
$REMOTE_DIR =Où déployer l'environnement de production

function prepare_deploy(){

    cd $BASE_DIR
    echo -e "Pulling..."
    git pull origin master

    echo -e "Composer install..."
    composer install
    composer dump-autoload

    echo -e "Composer install finished"
}
function deploy(){
    rsync \
        --recursive \
        --exclude='/storage/' \
        --exclude='.git*' \
        -e "ssh" ./ deploy@$PROD_ADDRESS:$REMOTE_DIR

    echo -e "Deploy finished!"
}
prepare_deploy
deploy

En préparation du déploiement, nous nous déplaçons à l'endroit où nous faisons git pull, puis tirons et exécutons l'installation de composer. Enregistrez-le sous deploy.sh et exécutez-le pour le déployer! De plus, si vous créez une fonction de validation et la validez, vous pourrez la déployer plus en toute sécurité! Par exemple, vous pouvez vérifier si l'état du schéma de base de données de l'environnement de production et de l'environnement local sont identiques, ou vous pouvez utiliser pleinement la commande mysqldump. Pour le moment, la partie de base est terminée.

Recommended Posts

[Linux] Ecrire un outil de déploiement à l'aide de rsync avec un script shell
[Linux] Copie des données de Linux vers Windows avec un script shell
Ecrire un script batch avec Python3.5 ~
Gérez les générations de rotation des journaux avec un script shell.
Créer un script shell pour écrire un journal
Afficher les prévisions météorologiques du jour avec le script shell
Script Shell pour mettre Webmin dans Alpine Linux
Essayez de programmer avec un shell!
Essayons un script shell
Traitez les fichiers du dossier dans l'ordre avec le script shell
Utiliser une imprimante avec Debian 10
Je n'oublierai jamais comment écrire un script shell, n'oubliez pas! !!
Écrire la mesure du temps de traitement un peu plus facilement en utilisant la clause with
Traitez le contenu du fichier dans l'ordre avec un script shell
Écrivez un script pour calculer la distance avec le système Elasticsearch 5 sans douleur
Ecrire un réseau résiduel avec TFLearn
Écrire un histogramme empilé avec matplotlib
Utiliser une webcam avec Raspberry Pi
Créez un outil qui secoue automatiquement furigana avec html en utilisant Mecab de Python3
Créer une zone d'écriture permanente sur Kali Linux démarré à partir d'une clé USB
Créez un système stellaire avec le script Blender 2.80
Garantie d'égalité avec l'outil de déploiement fabric + cuisine
Ecrire un client TCP avec Python Twisted
[Linux] Créer un environnement Jenkins avec Docker
Equipé d'une fonction carte utilisant payjp
Dessinez un joli graphique circulaire avec matplotlib
[Linux] Construction de l'environnement Docker avec Amazon Linux 2
[AWS Lambda] Créer un package de déploiement à l'aide de l'image Amazon Linux Docker