CI/CD mit gitlab für Flask-App mit docker-compose: Teil 1: Server aufsetzen.

Für die meisten meiner Projekte verwende ich gitlab und dessen CI/CD Pipelines. Falls ihr das auch tun wollt, hier einen Anleitung dazu.

Webserver

Um zu beginnen braucht ihr einen eigenen Webserver. Ich habe mir hierfür zu Testzwecken ein simples Droplet bei Digital Ocean geklickt. Das geht so:

  • auf https://www.digitalocean.com/ registrieren
  • neues Droplet anlegen:

Auf ‘Create’ klicken..

Als nächstes auf ‘Droplet’ klicken…

Ich habe eine Ubuntu 16.04 Machine genommen und aus dem “Starter Plan” die kleinste Maschine ausgewählt:

Um sie zu finden, müsst ihr auf den Pfeilknopf links klicken:

Jetzt die gewünschte Machine auswählen:

Ich habe das Droplet in Frankfurt erzeugt:

Abschließend noch einen Namen für das Droplet eingeben und dann bestätigen.

Nach kurzer Zeit erscheint euer Droplet. Ihr könnt direkt eure IP-Adresse sehen. Ein ssh-Passwort wurde euch an die E-Mail-Adresse geschickt, die ihr beim Anmelden hinterlegt habt.

Ihr könnt euch jetzt über euer terminal oder putty, wenn ihr auf Windows unterwegs seid so auf eurem System anmelden:

ssh root<eureIPAdresse>

Und nun das Passwort eingeben, dass euch per E-Mail zuschickt wurde. Fertig.

Die wichtigsten fortgeschrittenen Git-Commandos.

Das ist keine absolute Einführung. Wenn ihr gar nichts über git wisst, dann sei euch beispielsweise dieser kostenlose Kurs von Udacity zum Einstieg empfohlen.

Ich sammele hier alle git commands, die meiner Meinung nach über die absoluten Grundlagen hinausgehen und immer wieder nützlich sind.

Auschecken eines remote branches:

git checkout --track origin/<name-des-remote-branches>

Erstellt lokal einen neuen Branch mit dem Namen <name-des-remote-branches>, der auf dem Stand des gleichnamigen remote branches ist. Dieser neue branch ist auch direkt für weitere commits oder pulls von remote bereit.

Rückgängig machen des letzten Commits [Änderungen behalten]:

git reset --soft HEAD~1

Dabei werden die Changes für den letzten commit gelöscht, sondern verbleiben nach Ausführen des Befehlts als uncommitete Veränderungen, die nun weiter verändert oder ersetzt werden können.

Rückgängig machen des letzten Commits [Änderungen löschen]:

git reset --hard HEAD~1

Dieser Befehl macht den letzten commit rückgängig und löscht die damit verbundenen Änderungen.

Rückgängig machen mehrerer commits.

Ihr wollt mehrere commits rückgängig machen. Ihr kennt die genaue Anzahl? Und sie ist x. Dann verwendet dafür:

git reset --soft HEAD~x

git reset --hard HEAD~x

Ihr kennt sie nicht und habt keine Lust zu zählen. Dan schaut via git log den Hash des letzten Commits nach: z.B. 0bc1yz und gebt ein:

git reset --soft 0bc1yz

git reset --hard 0bc1yz

Zeige commits aus einem Branch, die nicht in einem anderen Branch sind.

Der folgende Befehl zeigt dir, welche commits zwar bereits im <feature_branch>, aber noch nicht im <other_branch> sind:

git log --left-right --graph --cherry-pick --oneline <other_branch>..<feature_branch>

Backup von mongodb: dump und restore für in docker.

Mein System: MacOS High Sierra 10.13.5 (2018), die Anleitung sollte aber auch auf den meisten Linuxmaschinen funktionieren. Über Windows kann ich leider keine Aussage machen.

Für mich stellte sich jüngst die Frage wie man eine mongodb-Datenbank aus einem Container exportiert und anschließend in einen neuen Container importiert. Hier für alle, die das auch interessiert / benötigten eine kurze Anleitung wie ich das gemacht habe, Wie immer gibt es mehrere Möglichkeiten. Ich habe mich bemüht eine Lösung zu finden, die einigermaßen einfach ist.

dump / backup der MongoDB aus docker container

Ich gehe davon aus, dass euer docker Container, der mongo beinhaltet läuft. Kümmern wir uns als erstes um das, was ihr braucht. Das sind:

  • den Namen des virtuellen Netzwerks, indem euer Container läuft
  • einen lokalen Ordner für den dump, z.B. ~/backup

Namen des virtuellen Netzwerks eines docker Container finden

container_id finden

> docker container ls

In der ersten Spalte findest du zu deinem Container die docker_id

Namen des virtuelle Netzwerks finden

Wenn ihr:

> docker inspect <container_id>

eingebt, findet ihr direkt unter “Network”, den Namen des Netzwerks. Nenne wir ihn ab jetzt <network_name>.

Dump der MongoDB aus Container

Gebt folgendes ein:

> docker run --rm --network=<network_name> --mount type=bind,src=<Pfad zu eurem Backup Folder>/backup,dst=/backup mongo bash -c 'mongodump --out /backup --host mongo:27017'

(Optional): Geht auch ohne es zu verstehen. Wer es aber verstehen will hier eine Erklärung. docker run startet einen weiteren Container. Die Option –rm stellt sicher, dass sobald der Container seine Aufgabe erfüllt hat wieder gelöscht wird. Die Option –network=<network_name> hängt den neuen temporären Container in dasselbe Netzwerk, indem sich der mongo Container befindet, von dem der dump gewünscht ist.–mount type=bind,src=<Pfad zu eurem Backup Folder>/backup,dst=/backup stellt eine Verbindung eines Backup-Folders auf eurer Maschine mit einem Ordner innerhalb des docker Containers. mongo ist der Name des Images, dass ihr für den temporären Container verwendet.  Der anschließende Befehlt: bash -c ‘mongodump –out /backup –host mongo:27017’ führt in eure Container den Bashbefehl “mongodump –out /backup –host mongo:27017” aus, der letztlich vom im virtuellen Netzwerk befindlichen mongodb Server (Option: —host mongo:27017) dessen Datenbank in den Ordner /backup dumpt (Option: –out /backup). Da der Folder /backup im Docker Container mit dem Folder <Pfad zu eurem Backup Folder> mit eurer lokalen Maschine verbunden ist, findet ihr den dump nun dort.

(Optional) Packen des Dumps:

Für den Fall, dass ihr das dump bewegen wollt, bietet sich packen an. Das geht so:

> tar -cvzf ~mongo_dump.tar.gz <Pfad zu eurem Backup Folder>

Restore der MongoDB in Container

(Optional) Entpacken des Dumps:

Solltet ihr den dump gepackt haben, so müsst ihr diesen nun entpacken. Das geht so. Zunächst müsst ihr das Archiv in den Ordner kopieren, den ihr in einen Container mounten wollte.

> cp <Pfad zu mongo_dump.tar.gz> <Pfad zu eurem Backup Folder>

Anschließend wechselt ihr in diesen Ordner:

> cd /Users/<PROFILE-FOLDER>/backup

Und entpackt den Inhalt:

> tar -xvzf learning_locker_mongo_dump.tar.gz

Und löscht nun die Kopie des Archivs:

> rm mongo_dump.tar.gz

Import des dumps

Findet zuvor analog zur Anleitung oben den Name des virtuellen Netzwerks <network_name> heraus. Einen Backup Folder mit Pfad <Pfad zu eurem Backup Folder> sollte ihr auch haben, indem sich ein entpackter dump befindet.

Gebt nun:

> docker run --rm --network=< --mount type=bind,src=/Users/<PROFILE-FOLDER>/backup,dst=/backup mongo bash -c 'mongorestore /backup --host mongo:27017'

ein.

Viel Erfolg!

How to ignore *.pyc files in Atom.

You are furious about all theses *.pyc files in you workfolder? I hear you. Here is how you can get rid of them.

  • Go to Atom -> Preferences -> Core Tab
  • Scroll down to “Ignored Names”
  • add -> *.pyc

  • in Packages -> type: tree-view
  • click on the card “tree view”
  • check the checkbox next to “Hide Ignored Filenames”

  • You are done! Time to be happy again 🙂