Ich mag es ja wirklich mit der Cloud-umgebung von Hetzner zu arbeiten. Sie hat noch was von nachvollziehbar und bodenständig. Dennoch gibt es ein paar moderne Dinge, die man vielleicht nicht vermissen möchte.
Mir macht das Arbeiten mit Terraform zum Beispiel sehr viel Spaß und ich freue mich, dass es einen entsprechenden Provider dafür gibt. Aber auch die Arbeit mit Ansible ist sehr sehr geil und so freut es mich, dass es ein dynamisches Inventory gibt.
Sicherlich hat der eine oder andere Leser meines Blogs andere Bedürfnisse - so ist auf JEDEN FALL ein Blick in dieses sündige, fabulöse und vor allem richtig nice Git-Repo empfohlen... Es gibt viele Tolls und Helferlein zu entdecken.
Quellen und Links
Es ist gar schlimm. Da hat man einen feinen Server, der tut auch seinen Dienst und prompt will ihn auch jeder benutzen. Men legt Benutzer an, richtet Gruppen ein und doch fühlt es sich nicht gut an jemandem einfach so - natürlich mit guter Absicht - Daten und Dateien auf den Server zu legen.
Grade bei RSync erlebe ich es immer wieder, das man eigentlich nur das Ziel hat immer mal wieder einen Datenbestand zu synchronisieren - aber Einschränkungen werden nicht oder nur zu lasch gesetzt.
Freude, Strahlen, Sonnenschein: Die Entwickler von Rsync haben das Thema bereits aufgegriffen und rrsync eine Lösung dafür gebaut. Dies wird sogar in den meisten Fällen mit installiert und befindet sich dann an unscheinbaren Orten wie /usr/share/doc/rsync/scripts/rrsync.gz.
Im Grunde genommen muss man dann auch nicht viel mehr tun als
gunzip /usr/share/doc/rsync/scripts/rrsync.gz -c > /bin/rrsync
chmod +x /bin/rrsync
und natürlich die gewünschten Beschränkungen in die ~/.ssh/authorizedkeys aufnehmen. Das geschieht dann in der Art wie
command="/bin/rrsync -ro /path/to/dir"
und wie sich der normalintelligente schon denken kann, ist mir ro READ ONLY gemeint.
Und schon fühle ich mich ein wenig sicherer jemanden was mit meinem Server machen zu lassen.
Quellen und Links
ich kam letztens in die Gelegenheit einen nativ betriebenen Mattermost Dienst zu dockerisieren. Dabei sollten natürlich auch die Daten erhalten bleiben.
Wie das geht, zeige ich nachfolgend:
Zunächst einmal müssen wir natürlich ein Backup der Datenbank und der Daten erstellen. Auf meinem System wurde postgresql genutzt und die Daten lagen gemäßg der Dokumentation auch brav unter /opt
su postgres -c "pg_dumpall > /tmp/mattermostbackup_all.psql"
cd /opt
tar -czvf /tmp/mattermostbackup.tgz mattermost
Nachdem nun die Daten schön geordnet gesichert sind, müssen sie natürich auf den neuen (Docker) Host.
scp /tmp/mattermostbackup_all.psql root@neuer-docker-host:/root
scp /tmp/mattermostbackup.tgz root@neuer-docker-host:/root
Mattermost ist so freundlich und stellt gleich ein paar Docker-Compose Files etc zur Verfügung. Sehr löblich. Diese wollen wir nutzen
git clone https://github.com/mattermost/mattermost-docker.git
cd mattermost-docker
docker-compose build
Damit haben wir schon mal unser image gebaut. Nun brauchen wir noch ein paar Volumes. Die Daten vom früheren /opt müssen natürlich anschließend auch dahin kopiert werden. Das die Ordnerstruktur beachtet werden muss ist obligatorisch.
mkdir -pv ./volumes/app/mattermost/{data,logs,config,plugins,client-plugins}
sudo chown -R 2000:2000 ./volumes/app/mattermost/
Jetzt kann es losgehen: wir starten die Maschinen
docker-compose up -d
Selbstverständlich nutzen wir SSL. Wer will das denn schon nicht machen? Dazu kopieren wir unser super, duper Zertifikat einfach in das Volume und starten das deployment neu.
cp /etc/ssl/mein-tolles-ssl-cert.pem ./volumes/web/cert/cert.pem
cp /etc/ssl/mein-tolles-ssl-key.pem ./volumes/web/cert/key-no-password.pem
docker-compose restart
Wenn wir schon grade dabei sind, können wir auch unsere Datenbank importieren und so zumindest den Großteil der releanten Datenk rekonstruieren.
docker stop mattermost-docker_app_1
docker stop mattermost-docker_web_1
docker-compose exec db dropdb mattermost -U postgres
docker-compose exec db createdb mattermost -U postgres
cat /root/mattermostbackup_all.psql | docker-compose exec -T db psql -d mattermost -U postgres
docker start mattermost-docker_app_1
docker start mattermost-docker_web_1
Quellen und Links