{ "meta": { "author": "Christian Fraß", "date": "2024-07-11", "title": "Digitale Infrastruktur für DIE LINKE.", "contact": { "email_address": "christian.frass@dielinke-glauchau.de" } }, "services": { "theory": [ { "text": "Wie setzt man einen Web-Dienst mit ausgelagerter Anmeldung auf?", "image": "services-0" }, { "text": "Zunächst wird eine Datenbank eingerichtet", "image": "services-1" }, { "text": "Weiterhin wird ein Web-Server benötigt", "image": "services-2" }, { "text": "Zudem soll ein Authentifizierungs-Dienst zum Einsatz kommen", "image": "services-3" }, { "text": "… dieser benötigt in der Regel eine Datenbank-Anbindung", "image": "services-4" }, { "text": "… und soll über den Web-Server von außen erreichbar sein", "image": "services-5" }, { "text": "Der eigentliche Dienst …", "image": "services-6" }, { "text": "… benötigt ebenfalls eine Datenbank-Anbindung", "image": "services-7" }, { "text": "… soll den Authentifizierungs-Dienst nutzen", "image": "services-8" }, { "text": "… und über den Web-Server angesprochen werden", "image": "services-9" } ], "practice": { "example": { "link": "https://linke.sx", "label": "linke.sx" }, "technologies": { "pool": { "debian": { "name": "Debian GNU/Linux", "link": "https://www.debian.org/", "icon": null, "desc": "Betriebssystem" }, "ansible": { "name": "Ansible", "link": "https://www.ansible.com/", "icon": null, "desc": "IAC-Plattform" }, "keepassxc": { "name": "KeePassXC", "link": "https://keepassxc.org/", "icon": null, "desc": "Passwort-Verwaltung" }, "letsencrypt": { "name": "Let's Encrypt", "link": "https://letsencrypt.org/", "icon": null, "desc": "TLS-Zertifikats-Erstellung" }, "inwx": { "name": "INWX", "link": "https://www.inwx.de/", "icon": null, "desc": "Domänen-Registrar" } }, "order": [ "debian", "ansible", "keepassxc", "inwx", "letsencrypt" ] }, "basics": { "pool": { "postgresql": { "name": "PostgreSQL", "link": "https://www.postgresql.org/", "icon": null, "desc": "Datenbank-Server" }, "nginx": { "name": "nginx", "link": "https://nginx.org/", "icon": null, "desc": "Web-Server und Lastenverteiler" }, "authelia": { "name": "Authelia", "link": "https://www.authelia.com/", "icon": null, "desc": "Auth-Server" } }, "order": [ "postgresql", "nginx", "authelia" ] }, "concrete_present": { "pool": { "synapse": { "name": "Synapse", "link": "https://github.com/element-hq/synapse", "icon": "https://matrix.org/images/matrix-favicon.svg", "desc": "Chat-Server" }, "element": { "name": "Element", "link": "https://element.io/", "icon": "https://element.io/images/webclip.png", "desc": "Chat-Client für Browser" }, "hedgedoc": { "name": "Hedgedoc", "link": "https://hedgedoc.org/", "icon": "https://informatik-box.de/images/hedgedoc.png", "desc": "Notizen" }, "gitlab": { "name": "GitLab", "link": "https://about.gitlab.com/", "icon": "https://about.gitlab.com/nuxt-images/ico/favicon-192x192.png", "desc": "Code-Management und Aufgabenverwaltung", "stat": "present" }, "forgejo": { "name": "Forgejo", "link": "https://forgejo.org/", "icon": "https://forgejo.org/favicon.png", "desc": "Code-Management und Aufgabenverwaltung" }, "vikunja": { "name": "Vikunja", "link": "https://vikunja.io/", "icon": "https://vikunja.io/favicon.svg", "desc": "Aufgabenverwaltung und Kalender" }, "dokuwiki": { "name": "Dokuwiki", "link": "https://www.dokuwiki.org/dokuwiki", "icon": "https://www.dokuwiki.org/lib/tpl/dokuwiki/images/logo.png", "desc": "Wissensspeicher" }, "owncloud": { "name": "ownCloud", "link": "https://owncloud.com/de/infinite-scale/", "icon": "https://owncloud.com/wp-content/themes/ownCloud/dist/assets/img/favicon/apple-touch-icon.png", "desc": "Datenablage" }, "murmur": { "name": "Murmur", "link": "https://www.mumble.info/", "icon": "https://www.mumble.info/css/mumble.svg", "desc": "Audiokonferenzen (bislang ohne Authentifizierung)" } }, "order": [ "synapse", "element", "murmur", "hedgedoc", "dokuwiki", "owncloud", "vikunja", "gitlab", "forgejo" ] }, "concrete_planned": { "pool": { "bigbluebutton": { "name": "BigBlueButton", "link": "https://bigbluebutton.org/", "icon": null, "desc": "Videokonferenzen", "stat": "planned" }, "mastodon": { "name": "Mastodon", "link": "https://joinmastodon.org", "icon": "https://creazilla-store.fra1.digitaloceanspaces.com/icons/3204993/logo-mastodon-icon-sm.png", "desc": "Microblogging", "stat": "planned" }, "grav": { "name": "grav", "link": "https://getgrav.org/", "icon": "https://getgrav.org/user/themes/planetoid/images/favicon.png", "desc": "Web-Inhaltsverwaltung", "stat": "planned" }, "dovecot": { "name": "Dovecot", "link": "https://doc.dovecot.org/", "icon": "https://w2.influxdata.com/wp-content/uploads/dovecot-logo.png", "desc": "E-Mail-Empfang", "stat": "planned" }, "postfix": { "name": "Postfix", "link": "https://www.postfix.org/", "icon": "https://webhostinggeeks.com/howto/wp-content/uploads/2012/06/Posfix-Mail.jpg", "desc": "E-Mail-Versand", "stat": "planned" } }, "order": [ "postfix", "dovecot", "mastodon", "grav" ] } }, "alternatives": { "list": [ "MS Exchange", "Google", "facebook", "WhatsApp/Telegram/Signal", "Dropbox", "Nextcloud", "Humhub", "Zetkin", "…" ], "problems": [ "zentralisiert", "proprietär", "datenschutzverletzend", "zwielichtig", "überladen", "unterladen", "kompliziert", "unflexibel", "kaputt" ] } }, "user_management": { "schema": [ { "text": "Die Dienste stehen bereit, aber wer darf sie verwenden?", "image": "user_management-0" }, { "text": "Espe als Nutzerverwaltung …", "image": "user_management-1" }, { "text": "… hat einen typischen technischen Aufbau", "image": "user_management-2" }, { "text": "… und kann den Authentifizierungs-Dienst füttern", "image": "user_management-3" }, { "text": "MGL …", "image": "user_management-4" }, { "text": "… ist über den Browser bedienbar", "image": "user_management-5" }, { "text": "… hat anscheinend auch einen typischen technischen Aufbau", "image": "user_management-6" }, { "text": "… und kann erweitert werden :)", "image": "user_management-7" }, { "text": "… und damit als Quelle für Espe und den Authentifizierungs-Dienst dienen", "image": "user_management-8" } ], "processes": { "entry": [ { "text": "Bei Eintritt legt ein Mitgliederbeauftragter einen Datensatz in MGL an", "image": "user_management-9" }, { "text": "Datensatz landet in MGL-BE/MGL-DB", "image": "user_management-10" }, { "text": "Syncer liest Mitglieder aus und gleicht in Richtung Espe ab", "image": "user_management-11" }, { "text": "Espe erzeugt für jeden neuen Nutzerdatensatz ein Passwort und sendet E-Mail", "image": "user_management-12" }, { "text": "… und schickt die neue Nutzerliste an den Authentifizierungs-Dienst", "image": "user_management-13" } ] }, "example": { "link": "https://zackeneule.linke.sx/", "label": "zackeneule.linke.sx", "remark": " (keine MGL-Anbindung)" } }, "realization": { "todos_technical": [ { "name": "Entwickler gewinnen", "link": null }, { "name": "Penetrationstests durchführen", "link": "https://de.m.wikipedia.org/wiki/Penetrationstest_(Informatik)" }, { "name": "Lastverteilung vorsehen", "link": "https://de.m.wikipedia.org/wiki/Lastverteilung_(Informatik)" }, { "name": "Datensicherung einrichten", "link": "https://de.m.wikipedia.org/wiki/Datensicherung" }, { "name": "Überwachung einrichten", "link": "https://de.m.wikipedia.org/wiki/Monitoring" } ], "todos_social": [ { "name": "Kräfte bündeln", "link": null }, { "name": "Tester gewinnen", "link": null }, { "name": "Admins gewinnen", "link": null }, { "name": "Überzeugungsarbeit leisten", "link": null } ] }, "resources": [ { "name": "Ansible-Rollen für Dienste", "link": "https://gitlab.die-linke.cloud/misc/ansible-base" }, { "name": "Infrastruktur-Definition für LAG Netzpolitik Sachsen", "link": "https://gitlab.die-linke.cloud/misc/infrastructure" }, { "name": "Espe | Datenmodell", "link": "https://gitlab.die-linke.cloud/espe/datamodel" }, { "name": "Espe | Backend", "link": "https://gitlab.die-linke.cloud/espe/backend" }, { "name": "Espe | Frontend | Web", "link": "https://gitlab.die-linke.cloud/espe/frontend-zackeneule" }, { "name": "Espe | Frontend | CLI", "link": "https://gitlab.die-linke.cloud/espe/frontend-mondvogel" }, { "name": "Espe | Ansible-Rollen", "link": "https://gitlab.die-linke.cloud/espe/infrastructure" }, { "name": "MGL-CLI-Client", "link": "https://gitlab.die-linke.cloud/misc/mgl-cli" }, { "name": "MGL-Espe-Syncer", "link": "https://gitlab.die-linke.cloud/misc/mgl-espe-syncer" } ] }