ansible-role-nextcloud/README.md
2023-10-25 18:04:18 +02:00

99 lines
4.3 KiB
Markdown

Nextcloud
=========
Diese Rolle installiert [Nextcloud](https://nextcloud.com). Sie umfasst:
- Einrichtung der Datenbank
- Installation und Ersteinrichtung von Nextcloud
- Anlegen eines Zertifikates + Konfigurarion des Reverse Proxies
- Anlegen eines PHP-FPM-Master-Prozesses mit socket activation
# Verfügbare Variablen
Zur Konfiguration von Nextcloud stehen zwei Dictionaries zur Verfügung. Unter `groups_vars/all/nextcloud.yaml`
befinden sich im Dictionary `default_occ_config` die Default-Einstellungen für alle Instanzen.
Zur individuellen Konfiguration können weitere Variablen in den `host_vars` unter `nextcloud_instaces` als Dictionary
`occ_config` angegeben werden. Beide Dictionaries werden beim Ausführen des Playbooks gemergt.
Die Struktur der Dictonaries muss dabei zwingend der Nextcloud-Syntax folgen. Diese lässt sich auf eine bestenden Instanz mit [occ](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#config-commands) ausgeben:
```Shell
occ config:list --private
```
Beispiel-Konfiguration:
```YAML
default_occ_config:
system:
default_language: de
default_locale: de_DE
nextcloud_instances:
- name: coop.systemausfall.org
user: nextcloud
database: nextcloud
database_type: PostgreSQL
hiddenservice: true
occ_config:
apps:
core:
backgroundjobs_mode: cron
system:
mail_from: noreply
mail_domain: systemausfall.org
```
# Ausführen der Rolle
## Vorbereitungen
Nextcloud lässt sich per Kommandozeile mittels [occ](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html#file-operations-label)
recht umfangreich konfigurieren und steuern. Wichtig ist, dass die PHP-Variable `apc.enable_cli: 1` gesetzt ist.
Dies übernimmt die Rolle `senselab.php` passieren, wenn in den ensprechenden `host_vars` des Nextcloud-Servers folgendes gesetzt ist:
```YAML
php_cli_config:
apc.enable_cli: 1
memory_limit: 512M
...
```
## Neue Nextcloud-Instanz anlegen
- Trage die Informationen zur neuen Instanz in die entsprechende `host_vars`-Datei unter `nextcloud_instances` ein:
| Variable | Wert | Beschreibung |
|----------|------|--------------|
| `name` | string | Domain-Name der Instanz |
| `alias`| string | Array mit weiteren Domain-Alias-Namen für diese Instanz |
| `user` | string | Name eines anzulegenden Systemnutzers, der den PHP-FPM-Prozess ausführt |
| `database` | string | Name der anzulegenden Datenbank |
| `database_type` | string | `MariaDB` oder `PostgreSQL` |
| `hiddenservice` | bol | Richtet für die Instanz einen Onion Service ein |
- Lege in den `host_vars` den Webserver-Typ fest:
| Variable | Wert | Beschreibung |
|----------|------|--------------|
| `nextcloud_webserver` | string | `Apache` oder `Nginx` |
- Starte anschließend das Playbook:
```Shell
ansible-playbook playbooks/nextcloud.yml
```
- Bei der Erstinstallation einer Nextcloud-Instanz gibt die Rolle anschließend die Anmeldeinformationen für den Admin-Zugang aus.
## Tasks einzeln ausführen
Tasks können auch einzeln ausgeführt werden. Der Tasks `configuration` sollte immer mit `hiddenservice` ausgeführt werden (Reihenfolge ist wichtig):
```Shell
ansible-playbook playbooks/nextcloud.yml --tags configuration,hiddenservice
```
# Aktualisierung des Cores/ von Apps
Mit dem Skript `nextcloud-updater` können alle Nextcloud-Instanzen und die installierten Apps gleichzeitig aktualisiert werden.
# Hinweise
## Serverseitige Verschlüsselung
- Bei der serverseitigen Verschlüsselung wird der Schlüssel im Klartext auf dem Server gespeichert. Sofern die Daten also nicht auf einem externen Speicher liegen, bringt dies keinen Sicherheitsgewinn.
- In unseren Tests führte die serverseitige Verschlüsselung teilweise zu Problemen bei der Entschlüsselung.
- Per [occ](https://docs.nextcloud.com/server/latest/admin_manual/configuration_server/occ_command.html?highlight=occ+encryption#encryption-label) lässt sich die Verschlüsselung wieder deaktivieren und alle Daten können in einem Schritt entschlüsselt werden.
- Möglicherweise liegen dann immer noch Daten verschlüsselt vor (Dazu gibt es diverse Fehlerberichte). Mit dem PHP-Skript von [Syseleven](https://github.com/syseleven/nextcloud-tools/blob/master/rescue/decrypt-all-files.php) können die Daten entschlüsselt werden.