Nextcloud
NextCloud est un peu le Graal en matière d’auto hébergement. Bien plus qu’une solution de sync and share , il permet de gérer vos agendas, vos carnets d’adresses et bien plus encore…
Installation
Cette installation repose sur l’infra déployée précédemment et ne présente pas de problème particulier. Nextcloud propose aussi une alternative sans SGBD ( avec SQLite ) mais elle est déconseillée pour l’utilisation du client de synchronisation (voir doc)
2 variables d’environnements sont toutefois nécessaires:
TRUSTED_PROXIES=172.19.0.0/24
: correspond au subnet dédié à Traefik (voir doc)
1$ docker inspect traefik_lan | grep Subnet
2 "Subnet": "172.19.0.0/24",
APACHE_DISABLE_REWRITE_IP=1
: (not set by default): Set to 1 to disable rewrite ip.
J’utilise également le middleware chain de Traefik pour cumuler 2 autres middlewares:
headers
1cat /opt/traefik/config/dynamic-conf/SecHeader.toml
2[http]
3 [http.middlewares]
4 [http.middlewares.SecHeader]
5 [http.middlewares.SecHeader.headers]
6 frameDeny = true
7 contentTypeNosniff = true
8 browserXssFilter = true
9 forceSTSHeader = true
10 sslRedirect = true
11 stsPreload = true
12 stsSeconds = 15552000
13 stsIncludeSubdomains = true
14 customFrameOptionsValue = "SAMEORIGIN"
redirectRegex
pour le Service Discovery
1cat /opt/traefik/config/dynamic-conf/nextcloud-redir.toml
2[http.middlewares]
3 [http.middlewares.nextcloud-redir.redirectRegex]
4 permanent = true
5 regex = "https://(.*)/.well-known/(card|cal)dav"
6 replacement = "https://${1}/remote.php/dav/"
Docker Compose
1version: '3'
2
3services:
4 app:
5 image: nextcloud:20.0.2-apache
6 container_name: nextcloud_app
7 networks:
8 - "traefik_lan"
9 - "lan"
10 expose:
11 - "80"
12 volumes:
13 - app:/var/www/html
14 restart: unless-stopped
15 depends_on: db
16 environment:
17 - "TRUSTED_PROXIES=172.19.0.0/24"
18 - "APACHE_DISABLE_REWRITE_IP=1"
19 - "NEXTCLOUD_DATA_DIR=/var/www/html/data"
20 - "MYSQL_DATABASE=nextcloud"
21 - "MYSQL_USER=nextcloud"
22 - "MYSQL_PASSWORD=secured_password"
23 - "MYSQL_HOST=db"
24
25 labels:
26 - "traefik.enable=true"
27 - "traefik.docker.network=traefik_lan"
28 - "traefik.http.routers.nextcloudnotls.rule=Host(`drive.exemple.com`)"
29 - "traefik.http.routers.nextcloudnotls.entrypoints=webinsecure"
30 - "traefik.http.routers.nextcloudnotls.middlewares=tlsredir@file"
31 - "traefik.http.routers.nextcloud.rule=Host(`drive.exemple.com`)"
32 - "traefik.http.routers.nextcloud.entrypoints=websecure"
33 - "traefik.http.routers.nextcloud.tls=true"
34 - "traefik.http.routers.nextcloud.tls.certresolver=letsencrypt"
35 - "traefik.http.routers.nextcloud.middlewares=sh_nc"
36 - "traefik.http.middlewares.sh_nc.chain.middlewares=SecHeader@file,nextcloud-redir@file"
37
38 db:
39 image: mariadb:10.5.6
40 container_name: nextcloud_db
41 command: --transaction-isolation=READ-COMMITTED --binlog-format=ROW
42 networks:
43 - "lan"
44 expose:
45 - "3306"
46 restart: unless-stopped
47 volumes:
48 - db:/var/lib/mysql
49 environment:
50 - MYSQL_ROOT_PASSWORD=secured-root-password
51 - MYSQL_PASSWORD=secured-password
52 - MYSQL_DATABASE=nextcloud
53 - MYSQL_USER=nextcloud
54
55networks:
56 traefik_lan:
57 external: true
58 lan:
59 ipam:
60 driver: default
61 config:
62 - subnet: "172.18.0.8/29"
63
64volumes:
65 app:
66 db:
après le traditionnel docker-compose up -d
on obtient une instance NextCloud opérationnelle
OCC
occ
(ownCloud Console) est une interface en ligne de commande pour administrer une instance Nextcloud. En environnement conteneurisé, il peut être pratique d’utiliser un alias:
1echo alias occ=\'docker exec -it -u www-data nextcloud_app php occ\' >> ~/.bashrc
Cela permet de lancer directement des opérations de maintenance comme l’ajout de clés primaires dans la base suite à une montée de version :
1$ occ db:add-missing-primary-keys
2Check primary keys.
3Adding primary key to the federated_reshares table, this can take some time...
4federated_reshares table updated successfully.
5Adding primary key to the systemtag_object_mapping table, this can take some time...
6systemtag_object_mapping table updated successfully.
7Adding primary key to the comments_read_markers table, this can take some time...
8comments_read_markers table updated successfully.