yourlabs.compose

Bereitstellung einer docker-compose.yml auf einem Server

Ansible-Rolle zum Bereitstellen einer docker-compose.yml in einem Benutzerverzeichnis, am besten verwendet mit bigsudo.

Diese README beschreibt die Funktionen. Weitere Informationen finden Sie im TUTORIAL.md, das ein Tutorial mit bewährten Methoden für eXtreme DevOps bietet.

Beispiel

Diese Rolle testet sich selbst, und Sie können direkt kopieren:

  • Dockerfile: funktioniert standardmäßig für ein CRUDLFA+-Projekt, bietet komprimierten und zwischengespeicherten Dienst für statische Dateien und einen Spooler.
  • .gitlab-ci.yml: erstellt und veröffentlicht ein Docker-Image im GitLab-Image-Registry, bietet eine YAML-Vorlage für Bereitstellungsjobs (Makro) sowie 3 Beispiel-Bereitstellungskonfigurationen für verschiedene Einsatzmöglichkeiten.
  • docker-compose.yml: für lokale und temporäre Bereitstellungen.
  • docker-compose.traefik.yml: für Unterstützung von yourlabs.traefik.
  • docker-compose.persist.yml: Add-on für persistente Bereitstellungen, z.B. in .gitlab-ci.yml angegeben, benötigt docker-compose.traefik.yml.

Sie müssen Folgendes ändern:

  • .gitlab-ci.yml: Es gibt einige # UNCOMMENT ABOVE AND REMOVE BELOW Kommentare, befolgen Sie die Anweisungen, damit Sie yourlabs/ansible verwenden.
  • ci.yourlabs.io mit Ihrem Server in .gitlab-ci.yml.
  • GitLab CI-Variable setzen: $CI_SSH_KEY, dies sollte einen ed25519 privaten Schlüssel enthalten, den Sie mit folgendem Befehl erstellen können: ssh-keygen -t ed25519 -a 100.
  • Dockerfile: Ändern Sie das Befehlsargument --module=wsgi:application mit dem entsprechenden Pfad zu Ihrer WSGI-Anwendung, entfernen Sie die bigsudo-Einrichtung, wenn Sie möchten, und kommentieren Sie nach Belieben aus.

Dann können Sie alles nach Belieben anpassen!

Weitere bigsudo-Befehle, die Sie verwenden können:

  • Aktivieren Sie einen Backup-Systemd-Timer mit: bigsudo yourlabs.compose backup home=/home/$CI_PROJECT_NAME-$CI_ENVIRONMENT_NAME.
  • Auf dem CI-Server für Bereitstellungsüberprüfungen, um nicht verwendete Images, Volumen und Netzwerke zu entfernen: bigsudo yourlabs.docker prunecron @ci.your.host. Dies verhindert, dass die Überprüfungsbereitstellungen den Speicherplatz füllen.

Sie können auch eine allgemeinere und konzeptionelle Beschreibung im Blogartikel über eXtreme DevOps erhalten.

Dokumentation von Funktionen

Ziel dieser Rolle ist es, die Bereitstellung einer Zusammenführung von docker-compose.yml-Dateien in ein Verzeichnis auf einem Host zu automatisieren und die damit verbundenen Aufgaben zu automatisieren.

Von einem Verzeichnis mit einer docker-compose.yml-Datei aus können Sie es in $host:/home/staging mit folgendem Befehl bereitstellen:

bigsudo yourlabs.compose home=/home/staging $user@$host

Wenn $user@$host nicht definiert ist, wird es auf localhost ausgeführt.

Sie können mehrere Compose-Dateien übergeben, und Umgebungsvariablen werden beim Generieren der endgültigen Datei weitergeleitet:

FOO=bar bigsudo yourlabs.compose \
    home=/home/staging \
    compose_django_image=$YOUR_IMAGE \
    compose=docker-compose.yml,docker-compose.staging.yml

Verzeichnisgenerierung

Diese Rolle kann auch Verzeichnisse mit einer bestimmten uid, gid und Berechtigung vorab erstellen, mit dem Label io.yourlabs.compose.mkdir wie folgt:

volumes:
- "./log/admin:/app/log"
labels:
- "io.yourlabs.compose.mkdir=./app/log:1000:1000:0750"

Dies führt zur Erstellung des Verzeichnisses {{ home }}/log/admin mit dem Eigentümer 1000, der Gruppe 1000 und der Berechtigung 0750.

Umgebungsbereitstellung

Eine weitere interessante Funktion ist die automatische Umgebungsbereitstellung mit jeder Variable, die in der Dienstumgebung deklariert und zur Laufzeit definiert ist. Zum Beispiel mit diesem Inhalt in docker-compose.yml:

environment:
- FOO

Wenn Sie dann die yourlabs.compose-Rolle mit der FOO-Variablen so ausführen:

FOO=bar bigsudo yourlabs.compose home=/home/test

Ergibt sich die folgende Umgebung:

environment:
- FOO=bar

YAML-Überschreibungen über die CLI

Sie können auch Dienstwerte mit der Variable compose_servicename_keyname hinzufügen oder überschreiben. Beispiel für das Überschreiben des Wertes compose[services][django][image] zur Laufzeit:

bigsudo yourlabs.compose home=/home/test compose_django_image=yourimage

Sie können Werte zur Laufzeit leeren, indem Sie einfach leere Werte übergeben. Um beispielsweise compose[services][django][build] leer zu machen, geben Sie compose_django_build= ohne Wert an. Wenn Sie Ihr Repo nicht im Home-Verzeichnis klonen, würde Docker-Compose eine Fehlermeldung ausgeben, wenn der Pfad zur Dockerfile nicht gefunden wird; dies umgeht diese Einschränkung:

bigsudo yourlabs.compose home=/home/test compose_django_build=

Netzwerkautomatisierung

Netzwerke können auch etwas kompliziert zu verwalten sein mit Docker-Compose. Beispielsweise haben wir typischerweise ein web Netzwerk mit einem Load Balancer wie Traefik. Dies fügt das web Netzwerk dem Django-Dienst hinzu und wird automatisch verknüpft, wenn das Netzwerk vorhanden ist, indem das Netzwerk web in der docker-compose.yml-Datei als extern deklariert wird:

bigsudo yourlabs.compose home=/home/test compose_django_networks=web

Wenn Sie die docker-compose.yml Ihres Load Balancers erstellen, haben Sie das gegenteilige Problem: die docker-compose.yml deklariert ein web Netzwerk als extern. Docker-Compose up wird es jedoch nicht erstellen und würde daher mit folgendem Fehler scheitern:

ERROR: Network web declared as external, but could not be found. Please create the network manually using `docker network create lol` and try again.

Diese Rolle verhindert dieses Problem, indem sie die docker-compose.yml nach externen Netzwerken durchsucht und das Ansible-Modul docker_network verwendet, um es bei Bedarf auf dem Host vorab zu erstellen.

Als Ansible-Rolle

Abschließend können Sie diese Rolle wie jede andere Ansible-Rolle verwenden, wenn Sie sie in weitere Aufgaben in Ihrem Repo einfügen möchten:

- name: Sicherstellen, dass Docker einmal auf diesem Host eingerichtet wurde
  include_role: name=yourlabs.compose
  vars:
    home: /home/yourthing
    compose_django_image: foobar
    compose_django_build:
    compose_django_networks:
    - web

Backups

Automatisierte Backups sind für Bereitstellungen mit einem home Argument aktiviert. Es werden 3 Skripte in /home eingerichtet:

  • ./backup.sh: erstellt ein lokales Backup und ein Backup in Restic.
  • ./restore.sh: listet Restic-Snapshots auf, führen Sie es mit einem Restic-Snapshot-Hash als Argument aus, um den Snapshot wiederherzustellen.
  • ./prune.sh: entfernt alte Backups.

Es werden 1 Systemd-Dienst und 1 Systemd-Timer erstellt:

  • backup-PROJECTNAME.service
  • backup-PROJECTNAME.timer

Hacking

Um diese Rolle auf localhost zu entwickeln:

# Docker-Image erstellen
docker build -t test .

# bigsudo so ausführen:
bigsudo . home=/tmp/test compose_django_build= compose_django_image=test compose=docker-compose.yml,docker-compose.persist.yml

Beachten Sie, dass es immer versucht, das Backup-Skript vor der Aktualisierung auszuführen. Wenn Sie es ändern, müssen Sie backup.sh vor der erneuten Ausführung von yourlabs.compose löschen, damit es backup.sh aktualisiert.

Über das Projekt

Deploy a docker-compose.yml in a target directory

Installieren
ansible-galaxy install yourlabs.compose
GitHub Repository
Lizenz
Unknown
Downloads
4k
Besitzer
OSS Hack'n'Dev, we provide all kind of paid services on OSS and sponsor OSS