Vorwort

Dies sollte eigentlich nicht der Einstieg werden, aber nun gut, es spricht ja nichts dagegen auf Grundlagen erst später einzugehen. Auf der Suche nach einer einfachen Variante Formulare zu erstellen habe ich mir einige Möglichkeiten angesehen. Eine der besseren ist sicherlich Form.io Allerdings konnte ich mit Lizenzwechsel in 2020 zu der aktuellen Lizenz OSL-3 nicht viel anfangen. Daher habe ich nach einer anderen Open-Source Alternative gesucht. Fündig geworden bin ich letztendlich bei einem Projekt mit dem Namen Corteza, welches ich auf Anhieb interessant fand, ausprobieren wollte unter das unter Apache 2 Lizenz steht. Mit dieser Low-Code Plattform lassen sich nicht nur Formulare erstellen (hierfür ist form.io wohl besser geeignet), sondern es lassen sich ganze Anwendungen mit keinem oder sehr geringem Programmieraufwand realisieren, sogenannte Low-Code Apps. Mit der integrierten BPMN-Woflow App lassen sich komfortabel auch ungewöhnliche Arbeitsabläufe und Automatisierungen erreichen. Natürlich gibt es noch viel Verbesserungspotential, aber bei meinen Tests funtionierte vieles schon recht gut. Genug der Vorrede, macht Euch selbst ein Bild, ich stelle eine Ansible Rolle zur Verfügung, so dass Ihr mit wenig Aufwand reinschauen könnt.

Voraussetzungen

Um die Installation reibungslos durchzuführen, empfehle ich die Verwendung von Ansible auf einem Rechner mit Ubuntu 20 (z.B. WSL unter Windows). Hiermit habe ich getestet. Von diesem System aus könnt Ihr die Installation nach dieser Anleitung durchführen.

Ansible im WSL installieren

Solltet Ihr Ubuntu 20 gerade erst installiert haben, dann führt bitte folgende vorbereitende Befehle aus. Bitte aktuell den root Nutzer für dieses Tutorial verwenden.

apt update
apt upgrade
apt install git python3-pip
pip3 install ansible
ansible-galaxy collection install ansible.netcommon

Außerdem ist es notwendig, dass der Nutzer einen SSH-Schlüssel hinterlegt hat, den Ansible für die Installation des Servers per SSH verwenden kann. Ich nutze für den Test einen kleinen Server der Hetzner-Cloud. Wie auch bei anderen Hostern kann ich meinen der öffentliche Schlüssel direkt bei der Erstellung des Servers im Webfrontend hinterlegen, so dass dieser den authorized keys des neues Servers automatisch hinzugefügt wird.

Sollte Ihr noch keinen SSH-Schlüssel haben, hier der Vollständigkeit halber die Erstellung in Kurzform. Normalerweise würde ich zur Vergabe einer Passphrase raten, um die Sicherheit für den privaten Schlüssel zu erhöhen und die unauthorisierte Benutzung zu verhindern. Für unseren Einsatzszweck (Ansible) ist es allerdings angenehmer, wenn nicht dauernd das Passwort des Schlüssels eingegeben werden muss.

ssh-keygen -b 4096
chmod 400 ~/.ssh/id_rsa

Wenn Ihr den Anweisungen gefolgt seit, sollte jetzt ein Schlüsselpärchen im Homeverzeichnis liegen. Die Datei id_rsa.pub ist die Datei, die den öffentlichen Schlüssel beinhaltet und daher bei der Erstellung des Servers hinterlegt wird.

Server installieren

Nachdem Ihr einen Server bei einem Hoster der Wahl erstellt habt, sorgt dafür, dass Ihr die passenden DNS-Einträge vornehmt. Diese sollten für eure Domainnamen auf den neu erstellten Server verweissen. Merkt euch die IP des Servers für später. In meinem Fall nutze ich als Testdomain toni-media.com sowie diverse Subdomains. Für dieses Tutorial z.B. corteza.toni-media.com. Die DNS-Einträge müssen vor der Installation vorgenommen werden, weil automatisch gültige SSL-Zertifikate von letsencrypt erstellt werden.

Nachdem der Server eingerichtet ist und Ihr den Zugang mit eurem SSH-Schlüssel getestet habt, geht es im WSL weiter.

cd ~
git clone https://github.com/tnissen375/toni.corteza.git
cd toni.corteza
ansible-galaxy install -r requirements.yml
nano vault

Nach Eingabe der letzten Zeile erhaltet startet nano (mit STRG+X beenden) und könnt eine beliebige Zeichenfolge eingeben, die für die Verschlüsselung von Konfigurationsdaten verwendet wird. Hierdurch können Passwörter ohne Sicherheitsrisiko mit ins Git-Repository übermittelt werden. Verwendet werden können diese Konfigurationen nur mit dem passenden Vaultschlüssel, weshalb Ihr euren Schlüssel später sichern solltet. Das Vault-File selbst gehört logischweise nicht in Git. Jetzt müssen noch einige Werte angepasst werden. Weitere Information zu Vault.

nano inventories/group_vars/all.yml

Auf den Inhalt der Datei werde ich nur im notwendigen Umfang eingehen, die Rollen, die bei der Installation benutzt werden sind nicht speziell für Corteza erstellt, sondern ich verwende diese universell zur Installation unterschiedlichster Software. Daher sind auch Variablen enthalten, deren Namensgebung auf den ersten Blick für die Installation keinen Sinn machen, jedoch korrekt sind. Dazu zu gegebener Zeit mehr.

Ich habe nur die Variablen rausgezogen, die Ihr anpassen müsst. Die Angabe einer Email-Adresse und der Domain sind notwendig, genauso, wie die Angabe der verschlüsselten Passwörter. Ich zeige gleich noch, wie man diese erstellt.

---
domain: "" # <- Eure Hauptdomain 
lets_encrypt_mail: "" #<- eine Emailadresse für letsencrypt 

keycloak_smtp_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;corteza
          39366630653937326330633461353733363431633739656136623261393361306436313466626230
          3964653236316665313536366461616138346666376233380a653862666230643763623131393261
          32333364366666373735316339303030396536346336316134623865323230333933376435353665
          6533643331616433660a663465626335353263306365626437653830386635306161653664386665
          39343562636135366233313164306234386233346563343164383035303631663834

openresty_session_secret: !vault |
          $ANSIBLE_VAULT;1.2;AES256;corteza
          36343036653562363036633237663535333263653665326466306663353530663765303033316436
          3932316461646463393064323563336331353339616161640a333236376664663261333439653734
          65616536396161613438626163393337656334353839393038373736653261333066666232653165
          3863383263393734340a343262333464666239326562383733323939386631626336613062373130
          30616364663136303933626337623839643835636430313934343331616330306133

corteza_mysql_root_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;corteza
          35626362333135383431643336366236653932396431353130616162306430323037343232636236
          6637616462663561346165373439306633383939333261640a633331356266376238643336303233
          63313136643436306663643961313762636663303661316263323734356137663434326363353038
          3434343336643537330a653636626561343636383835646332303265313534616265653531373663
          33363037326266333662383363646566633264313131303266343065313636376339

corteza_mysql_password: !vault |
          $ANSIBLE_VAULT;1.2;AES256;corteza
          32623464383661373236383364323964306536633533653930653166343662303161663631323839
          3962663766396362396361636335313662613262353839380a623036633865356436653264653362
          35343233333731343632343738653831353334303231316637653365643931346364353434653837
          3539353238376334650a303161336463306431333838336536633661353461613436353835326161
          30623236626638303636353566323537396265336436393133333332383232366230

Die folgenden Werte müssen erstellt werden und können dann in der vorherigen Konfiguration ausgetauscht werden.

ansible-vault encrypt_string --stdin-name 'openresty_session_secret' --vault-id corteza@vault

ansible-vault encrypt_string --stdin-name 'corteza_mysql_root_password' --vault-id corteza@vault

ansible-vault encrypt_string --stdin-name 'corteza_mysql_password' --vault-id corteza@vault

ansible-vault encrypt_string --stdin-name 'keycloak_smtp_password' --vault-id corteza@vault

Natürlich ist es auch möglich, den Inhalt der verschlüsselten Werte zu prüfen, sofern das richtige Vault-Passwort vorliegt. Variable ausgeben:

ansible localhost -m debug -a var="keycloak_smtp_password" -i inventories --vault-id corteza@vault

Jetzt muss in der ersten Zeile der Datei inventories/hosts die IP-Adresse des Servers gegen die IP-Adresse eures Servers getauscht werden:

nano inventories/hosts

Die Konfiguration ist abgeschlossen, und der Server kann ganz einfach installiert werden:

ansible-playbook ./install.yml -i inventories --vault-id corteza@vault

Der Server wird mit den aktuell vorgenommenen Einstellungen als Schwarm mit einer Node installiert. Nachdem das Playbook erfolgreich durchgelaufen ist, steht der Corteza Server unter corteza.<your domain>.de, in meinem Fall corteza.toni-media.com zur Verfügung.

Ich hoffe die Installation ist erfolgreich verlaufen.

Wie immer: Wenn Ihr Fragen, Anmerkungen oder Verbesserungsvorschläge habt, Hilfe benötigt oder die Tutorials nicht so funktionieren wie sollten - dann meldet Euch gerne bei mir 😉