ByteInSpace!

Software development with passion

Menu
  • Sample Page
Menu

Heimnetzwerksetup mit Ansible II: MariaDB

Posted on July 23, 2021 by Daniel

Im vorherigen Teil haben wir uns damit beschäftigt, wie wir unser Heimnetzwerk (erst einmal nur die Raspberries) grundsätzlich einrichten.

Im nächsten Schritt möchte ich einen der Raspberries als Datenbankserver aufsetzen, indem ich dort MariaDB installiere. Die Performance des Raspies reicht dazu wunderbar aus und wir haben eine schöne, nette Testmaschine für die Entwicklung.

Wir starten also unsere Maschinen und wechseln in das vorher erstellte lokale Verzeichnis, wo die gesamte Ansible-Konfiguration ist.

MariaDB vom Scratch zu installieren, ist eine sehr, sehr mühsame Angelegenheit mit ganz vielen Problemen. Das alles hier zu beschreiben, würde den Rahmen des Blogs sprengen. Zum Glück gibt es aber passende Rollen, die wir benutzen können.

Eine Rolle in Ansible beschreibt alle Schritte, die für eine bestimmte Aufgabe benötigt werden und kann damit wunderbar von einzelnen Playbooks benutzt werden, ohne dass man das Rad neu erfinden muss. Die meines Erachtens beste Rolle für MariaDB ist die von Geerlingguy. Eigentlich zwar für MySQL, aber da (noch) MariaDB und MySQL praktisch gleich sind und MariaDB bei den meisten DIstributionen als Ersatz für MySQL Einzug gehalten hat, können wir die Rolle benutzen.

Zielhost

Wir wollen ja MariaDB nicht überall installieren, sondern auf einem dedizierten Server. Wir könnten daher direkt den Namen benutzen. Aber vielleicht kommt später noch ein weiterer Server dazu, wo MariaDB kommen sollte. Daher erstellen wir am besten in der Datei hosts eine neue Gruppe:

[mysqlserver]
rastaban-pi

Sie besteht im Moment ausschließlich aus dem von mir gewählten Pi rastaban-pi. Möchte ich später jedoch weitere Maschinen als MariaDB.-Server benutzen, muss ich nur sie hier eintragen und Ansible das Playbook neu ausführen lassen, fertig. Rastaban-pi wird nicht mehr verändert (Ansible installiert nicht neu, sondern prüft nur Abweichungen zwischen Soll und Ist. Gleichen sich beide, wird nichts gemacht) und der neue Server wird installiert.

MySQL Rolle

Ich benutze die ansible-role-mysql von Geerlingguy, daher clonen wir einfach sein Repository:

git clone https://github.com/geerlingguy/ansible-role-mysql.git

Nun gibt es einen kleinen Haken. Wenn wir unsere Sourcen in GitLab hinzufügen, würde dieses Repository ja auch drin landen, was wir nicht wollen. Daher fürs erste fügen wir dieses einfach ins gitignore. Geht auch eleganter, kommt aber später.

nano .gitignore

und fügen hinzu:

ansible-role-mysql

Geerlingguy beschreibt hervorragend in seinem Repository all die vielen Parameter, die man seiner Rolle übergeben kann. So kann sein Script auch gleich Tabellen und User anlegen. Kann man machen, ich bin da aber eher nicht der Freund von. M.E. sollen immer die einzelnen Projekte sich für ihre Datenbankverwaltung kümmern. Bin ich gerade an einem JavaSpring Projekt dran, dann erstelle ich mir von dort die benötigte Datenbank. Aber in manchen Fällen kann es natürlich sinnvoll sein.

Wie von Geerlingguy vorgeschlagen, speichern wir die Variablen in einer separaten Datei. Aber wir legen noch eine weitere für das MariaDB-Root-Passwort, damit es nicht versehentlich in Git landet. Übrigens, es wurden schon sehr, sehr viele Server nur deswegen gehackt, weil jemand seine Passwörter mit ins Git upgeloadet hatte…

Aber nun zum Playbook. Wir erstellen eine Datei playbook_mysql.yml und füllen diese mit folgenden Inhalt:

- hosts: mysqlserver
  become: yes
  vars_files:
    - vars/mysql.yml
    - vars/mysql-password.yml
  roles:
    - { role: geerlingguy.mysql }

Dann erstellen wir das Verzeichnis vars und die beiden Dateien mysql,yml sowie mysql-password.yml:

mkdir vars
touch vars/mysql.yml
touch varS/mysql-password.yml

Zuerst editieren wir die mysql.yml. Ich schreibe mir persönlich gern Kommentare und Verweise, falls noch eine weitere Datei benötigt wird, die ich nicht einchecke, sonst weiß ich evtl. nach Jahren nicht mehr, warum das blöde Skript denn nun wieder nicht funktioniert:

# Das MySQL Password wird in einer separaten Datei gespeichert
# mysql-password.yml
# und via gitignore vom Upload ins Repository ausgeschlossen

#mysql_root_password: sehe oben
mysql_enabled_on_startup: true
mysql_packages:
  - mariadb-client
  - mariadb-server
  - python-mysqldb

Im Gegensatz zum Beispiel von Geerlingguy müssen wir die drei Packages mariadb-client, mariadb-server und python-mysqldb separat aufnehmen, da so die Dateien bei RaspiOS heißen.

Die Datei mysql-password.yml beinhaltet dann nur das Passwort:

mysql_root_password: hierkommtdaspassword

Damit diese nicht via commit ins Git kommt, wird sie mit gitignore ausgeschlossen:

echo 'vars/mysql-password.yml' >> .gitignore

Nun können wir das Playbook ausführen mit

ansible-playbook playbook_mysql.yml

Dauert eine ganze Weile und am Ende ist unser Datenbankserver fertig.

Leave a Reply Cancel reply

Your email address will not be published. Required fields are marked *

Recent Posts

  • Mounten von Shares einer NAS unter Linux
  • Heimnetzwerksetup mit Ansible II: MariaDB
  • Heimnetzwerksetup mit Ansible mit Ansible I
  • Neuzugang: Schneider PC 1512 DD
  • Java und Wege der Filterung

Recent Comments

    Archives

    • October 2021
    • July 2021
    • March 2021
    • June 2020
    • April 2020
    • March 2020
    • January 2020
    • December 2019
    • May 2019
    • April 2019

    Categories

    • Database
    • Development
    • Java
    • Linux
    • PC
    • Reparatur
    • Retrocomputing
    • Schneider
    • Uncategorized
    ©2023 ByteInSpace! | Built using WordPress and Responsive Blogily theme by Superb