[Linux] Schreiben Sie ein Bereitstellungstool mit rsync und einem Shell-Skript

Ich werde Ihnen zeigen, wie Sie auf einfache Weise ein Tool zum Bereitstellen der auf git übertragenen Inhalte auf dem Produktionsserver erstellen. Dieses Mal gehe ich davon aus, Laravel bereitzustellen, aber ich denke, es gibt kein Problem mit anderen Sprachen. Ich möchte, dass Sie die Orte ignorieren, die sich mit Komponisten befassen. Die Site, die heutzutage diese Art der Bereitstellungsmethode verwendet, ist möglicherweise ein Legacy-Standort, aber ...

Gesamtstruktur

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

Nachdem Sie sich in Ihrer eigenen lokalen Umgebung entwickelt haben, setzen Sie git fest und drücken Sie, um remote hochzufahren. Der Code, den die Projektmitglieder aus der Ferne gepusht haben, sammelt sich immer mehr an. Lassen Sie es uns in einem guten Stadium dem Produktionsserver geben! Verwenden Sie zu diesem Zeitpunkt das Bereitstellungstool, um den neuesten Git-Status in der Produktionsumgebung wiederzugeben.

Der Punkt ist, dass es notwendig ist, die Umgebung festzulegen, in der sich das Bereitstellungstool befindet, damit die SSH-Verbindung immer in der Produktionsumgebung hergestellt werden kann. Vergessen Sie nicht, den öffentlichen und den privaten Schlüssel als Satz in der Umgebung vorzubereiten, in der Sie ihn bereitstellen, und den öffentlichen Schlüssel in der Produktionsumgebung beizubehalten. Stellen Sie sich diesen privaten Schlüssel als Schlüssel für eine Umgebung vor, die durch einen Satz öffentlicher Schlüssel gesperrt ist.

Bitte beziehen Sie sich hier

Zusammenfassung der Authentifizierungseinstellungen für den öffentlichen Schlüssel von ssh - Qiita

Sollte ich in einer Produktionsumgebung ziehen? ?? Sie mögen denken, aber ich frage mich, ob es sicherer sein wird, da es bis zu einem gewissen Grad verhindert werden kann, indem es auf das Bereitstellungstool beschränkt wird. Es ist auch ein guter Punkt, dass Sie flexibel mit anderen Dingen als dem Inhalt von Git umgehen können.

Erfahren Sie, wie Sie rsync verwenden

rsync ist ein Befehl, der verwendet wird, wenn Sie eine Datei in Ihrer Umgebung auf einen anderen Server kopieren möchten. Grundsätzlich

rsync [Option] Quellkopie kopieren Ziel

Ich werde mit dieser Methode kopieren. Da es jedoch Zeit für die Bereitstellung ist, werde ich einige Optionen hinzufügen.


rsync \
        --recursive \
        --exclude='/storage/' \
        --exclude='.git*' \
        -e "ssh" ./ deploy@[Produktions-IP-Adresse]:[Wo wird die Produktionsumgebung bereitgestellt? (E..g /var/Unter www)]

--- rezessiv bedeutet "rezessiv". Die Bedeutung ist, dass in der Struktur des Verzeichnisses das untere auch das Ziel ist. Dieses Mal werden nun alle Elemente unter ./ kopiert.

--exclude bedeutet "ausschließen". Daher wird kein Speicher in der Produktionsumgebung bereitgestellt. (Empfohlen für diejenigen, die Laravel bereitstellen möchten! Sie können verhindern, dass das Protokoll für die Testumgebung verschoben wird.)

Letzte -e" ssh "./ deploy @ [Produktions-IP-Adresse]: [Produktionszielspeicherort (z. B. unter z. B. / var / www)]

Mit können Sie eine SSH-Verbindung zur Produktionsumgebung herstellen. Jetzt können Sie kopieren!

Ganzer Code


$BASE_DIR =Wo wird ein Git-Pull auf dem Bereitstellungsserver ausgeführt?
$PROD_ADDRESS =Produktions-IP-Adresse
$REMOTE_DIR =Wo wird die Produktionsumgebung bereitgestellt?

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

In Vorbereitung auf die Bereitstellung bewegen wir uns an den Ort, an dem wir Git ziehen, ziehen und führen dann die Composer-Installation durch. Speichern Sie es als deploy.sh und führen Sie es aus, um es bereitzustellen! Wenn Sie eine Validierungsfunktion erstellen und validieren, können Sie diese außerdem sicherer bereitstellen! Sie können beispielsweise überprüfen, ob der DB-Schemastatus der Produktionsumgebung und der lokalen Umgebung identisch ist, oder den Befehl mysqldump verwenden. Der grundlegende Teil ist vorerst abgeschlossen.

Recommended Posts

[Linux] Schreiben Sie ein Bereitstellungstool mit rsync und einem Shell-Skript
[Linux] Kopieren Sie Daten mit einem Shell-Skript von Linux nach Windows
Schreiben Sie ein Batch-Skript mit Python3.5 ~
Verwalten Sie Protokollrotationsgenerationen mit einem Shell-Skript.
Erstellen eines Shell-Skripts zum Schreiben eines Tagebuchs
Zeigen Sie die heutige Wettervorhersage mit Shell-Skript an
Shell-Skript zum Einfügen von Webmin in Alpine Linux
Versuchen Sie, mit einer Shell zu programmieren!
Versuchen wir es mit einem Shell-Skript
Verarbeiten Sie die Dateien im Ordner in der Reihenfolge mit dem Shell-Skript
Verwenden eines Druckers mit Debian 10
Ich werde nie vergessen, wie man ein Shell-Skript schreibt, nicht vergessen! !!
Schreiben Sie die Messung der Verarbeitungszeit mit der with-Klausel etwas einfacher
Verarbeiten Sie den Inhalt der Datei der Reihe nach mit einem Shell-Skript
Schreiben Sie ein Skript, um die Entfernung mit dem Elasticsearch 5-System schmerzfrei zu berechnen
Schreiben Sie ein Restnetzwerk mit TFLearn
Schreiben Sie ein gestapeltes Histogramm mit matplotlib
Verwenden einer Webkamera mit Raspberry Pi
Erstellen Sie mit Mecab aus Python3 ein Tool, das Furigana automatisch mit HTML schüttelt
Erstellen Sie unter Kali Linux einen permanenten Schreibbereich, der vom USB-Speicher gestartet wird
Erstellen Sie ein Sternensystem mit Blender 2.80-Skript
Gleichheitsgarantie mit dem Deployment Tool Fabric + Cuisine
Schreiben Sie einen TCP-Client mit Python Twisted
[Linux] Erstellen einer Jenkins-Umgebung mit Docker
Ausgestattet mit einer Kartenfunktion mit payjp
Zeichnen Sie mit matplotlib ein schönes Kreisdiagramm
[Linux] Aufbau einer Docker-Umgebung mit Amazon Linux 2
[AWS Lambda] Erstellen Sie ein Bereitstellungspaket mit dem Amazon Linux Docker-Image