Infrastruktur
===============
## TODOs
- [x] Eine TODO Liste erstellen
- [x] Nextcloud ans SSO
- [x] Backups für die Docker container $\to$ siehe [unten](#Verschlüsseltes-Borg-Backup-in-Backnang)
- [x] Configs, docker-compose Dateien etc. in ein Git Repo packen (Git haben wir jetzt ja :D)
- [x] [Matrix-Server](./cttue-matrix-server)
- [x] Doku für Konfiguration der Services etc. (https://cttue.de/doku.php?id=knowledgebase:start)
- [x] Änderungen beim nächsten Meeting ansprechen (https://pad.cttue.de/cttue-infrastruktur-changes)
- [ ] Matrix: TURN(S)-Server
- [ ] Monitoring für Services
- [ ] SearX Instanz (alternativ auch yacy)
- [x] Calendar mit ical
## Ideas
(Bitte in TODOs moven wenn man vor hat, einen dieser Punkte umzusetzen c: Ansonsten sind Sachen "in der Schwebe")
- [ ] Kanban board, z.B. WeKan
- [ ] HedgeDoc Bot (HedgeBot) für autom Erstellung von Protokollen/Sperren dieser nach den Treffen
- [ ] SSO für Emails (?) - bzw. allgemein Webmail (z.B. Roundcube)?
- [ ] Mails einbinden in Nextcloud (Für einfachere Zuweisung über Nutzergruppen/Geteilte Postfächer)
- [ ] Matrix Bridge um Announcements in Signal Gruppe zu schicken
- [ ] Tool bzw. Framework zur Planung von Events (á la TDF)
- [ ] Patch fürs CCC Engelsystem, um Registrierung mit E-Mail optional zu machen (nur user + pass)
## Server beim CCC Freiburg
### Allgemeines
- Zugang
- Ausschließlich per ssh/publickey
- Wer auf dem Server was machen will kann Marco den Public Key schicken (bitte mit einer kleinen Erklärung, was man so vor hat)
- Konfiguration der Services
- Siehe Git Repo: https://git.cttue.de/codingmarco/cttue-infrastruktur
- Firewall: UFW
- Eigentlich wollte ich mit nftables modern sein, aber das beißt sich ziemlich mit Docker und auf komische workarounds hatte ich keine Lust
- Wenn jemand iptables von Hand konfigurieren möchte, gerne melden...
- Reverse Proxy
- ~~Wird automatisch durch [nginx-proxy](https://hub.docker.com/r/jwilder/nginx-proxy) konfiguriert~~
- ~~SSL-Zertifikate werdan automatisch durch [nginxproxy/acme-companion](https://hub.docker.com/r/nginxproxy/acme-companion) erstellt und erneuert~~
- ~~Damit ein Webservice ein SSL-Zertifikate bekommt und der Reverse Proxy eingerichtet wird, müssen die Environment-Variablen `VIRTUAL_HOST`, `VIRTUAL_PORT` und `LETSENCRYPT_HOST` gesetzt werden (siehe pad container). Außerdem muss der Container im externen `cttue_web_services` Netzwerk sein.~~
- Wird automatisch durch traefik (von ansible) konfiguriert, dazu müssen in dem docker-compose file die jeweiligen traefik labels und der container dem traefik netzwerk hinzugefügt werden, e.g.:
```
labels:
- traefik.enable=true
- traefik.docker.network=traefik
- traefik.http.routers.<NAME>.entrypoints=web-secure
- traefik.http.routers.<NAME>.service=<NAME>
- traefik.http.routers.<NAME>.rule=Host(`<SUBDOMAIN>.cttue.de`)
- traefik.http.routers.<NAME>.tls=true
- traefik.http.routers.<NAME>.tls.certResolver=default
- traefik.http.routers.<NAME>.tls.domains[0]=cttue.de
- traefik.http.routers.<NAME>.tls.domains[0].sans=<SUBDOMAIN>.cttue.de
- traefik.http.services.<NAME>.loadbalancer.server.port=<PORT>
networks:
- traefik
```
<NAME> = Frei wählbar, muss nur in dem file gleichbleiben (e.g. pad, cloud)
<SUBDOMAIN> = Die weilige subdomain unter der der Service erreichbar sein soll (e.g. cloud für cloud.cttue.de)
<PORT> = Port den der service innerhalb des containers verwendet
Und am ende des files in der Netzwerkconfig:
```
networks:
traefik:
external: true
```
- Docker container
- Ordner mit docker-compose.yml Dateien drin liegen in `/var/docker-containers`
- Container bitte mit docker-compose aufsetzen
### Services
- Pad
- Service: HedgeDoc
- URL: https://pad.cttue.de/, Metapad: https://pad.cttue.de/cttue-meta
- Docker image: `quay.io/hedgedoc/hedgedoc:1.9.4`
- Cloud
- Service: Nextcloud
- URL: https://cloud.cttue.de/
- Docker image: `nextcloud`
- Benutzer nur für die Nextcloud (ohne SSO) werden auf Request (an Marco) angelegt
- Upload Size Limit ist momentan per Reverse Proxy auf 50 MB eingestellt, da wir nicht viel Speicherplatz haben.
- Der Server ist momentan ausschließlich zum Austausch kleiner Dateien gedacht.
- Git
- Service: Gitea
- URL: https://git.cttue.de/
- Docker image: `gitea/gitea:1.17.3`
- User selbst-registrierung ist aktiviert, kann aber auch deaktiviert werden
- Single Sign-On
- Service: Keycloak
- URL: https://auth.cttue.de/
- Die eigenen Benutzerdaten können hier geändert werden: https://auth.cttue.de/realms/cttue/account/
- Impersonation ist vom Build-Prozess her deaktiviert
- Matrix
- Gemanaged durch [matrix-docker-ansible-deploy](https://github.com/spantaleev/matrix-docker-ansible-deploy)
- Config liegt hier: `/srv/matrix-docker-ansible`
- [Upgrade Docs auf GitHub](https://github.com/spantaleev/matrix-docker-ansible-deploy/blob/master/docs/maintenance-upgrading-services.md)
- Einzige zwei relevante Dateien (darin ist alles konfiguriert), die Symlinks auf die Dateien in `/srv/cttue-infra-git/matrix-docker-ansible` sind:
- `inventory/hosts`
- `inventory/host_vars/matrix.cttue.de/vars.yml`
#### Nextcloud + Keycloak
- Mögliche Plugins:
- https://github.com/pulsejet/nextcloud-oidc-login (Fork von nextcloud-social-login)
- [Blog / Tutorial](https://www.schiessle.org/articles/2020/07/26/nextcloud-and-openid-connect/)
- https://github.com/zorn-v/nextcloud-social-login
- https://github.com/nextcloud/user_saml
- [Blog / Tutorial](https://janikvonrotz.ch/2020/04/21/configure-saml-authentication-for-nextcloud-with-keycloack/)
### Netcup Mail
- Server: `mxe854.netcup.net`
- Secure SMTP Port: 465
### Verschlüsseltes Borg Backup in Backnang
- SSH Config:
```
Host cttuebak
HostName cloud.hacknang.de
Port 2676
User root
IdentityFile ~/.ssh/id_rsa_cttue_backup
```
- Repo: `ssh://cttuebak/media/borg/cttue/{pad,cloud,gitea,keycloak,matrix}`
-
### Domains
| Name | Anbieter |
| --- | --- |
| cttue.de | Netcup |
| chaostreff-tübingen.de | Netcup |
| tuebingen.network | INWX |
### Key Holders
Names denote access + maintainer
(Names in brackets) denote access but limited to no maintenance
| Service | Keyholder(s) |
| --- | --- |
|Netcup | Marco, Pascal |
|vServer Freiburg | Marco (Pascal) |
|Mail Server | Pascal (Marco) |
|cttue.de Website | Pascal (Marco) |
|TDF Website (tdf.cttue.de ) | Marco, Pascal |
| INWX | Pascal |
| Mastodon Instance | Pascal |
| Matrix, Element Web | Marco |
| Gitea Server | Marco (Pascal) |
| Gitea CTT Organisation | Marco, Manu, Pascal |
| Backups | Marco |