雲端儲存方案 - Nextcloud

前言

OCI的ARM方案實在很香,弄個Nextcloud也很不錯,而Nextcloud要用Traefik來做reserve proxy就有點…

作法

Docker-compose.yml內容

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
services:
nextcloud:
image: nextcloud
container_name: nextcloud
restart: always
environment:
- SQLITE_DATABASE=${Database_name_you_like}
- NEXTCLOUD_TRUSTED_DOMAINS=nextcloud.example.com
- TRUSTED_PROXIES=${Ip_range_for_containers/mask}
volumes:
- /var/lib/docker/volumes/nextcloud/app:/var/www/html
- /Folder/you/can/storage/data:/var/www/html/data
labels:
- traefik.enable=true
- traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect
- traefik.http.routers.nextcloud.tls.certresolver=myresolver
- traefik.http.routers.nextcloud.rule=Host(`nextcloud.example.com`)
- traefik.http.middlewares.nextcloud.headers.customFrameOptionsValue=ALLOW-FROM https://example.com
- traefik.http.middlewares.nextcloud.headers.contentSecurityPolicy=frame-ancestors 'self' example.com *.example.net
- traefik.http.middlewares.nextcloud.headers.stsSeconds=155520011
- traefik.http.middlewares.nextcloud.headers.stsIncludeSubdomains=true
- traefik.http.middlewares.nextcloud.headers.stsPreload=true
- traefik.http.middlewares.nextcloud_redirect.redirectregex.regex=/.well-known/(card|cal)dav
- traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=/remote.php/dav/

networks:
default:
external: true
name: traefik_backend

說真的,Nextcloud因為他的安全機制所以搞的超級麻煩的…

首先是不能用linuxserver.io的image, 因為他是Nginx+SSL已經弄好的traefik必死

另外也不能用fpm的image會有各種奇怪的問題

最終找到這篇

Deploy Nextcloud with docker-compose, Traefik 2, PostgreSQL and Redis

人家寫得很完整,也很有用…但是我還看不懂…

注意事項

官方的Image預設的uid是33(沒錯就是這麼詭異的…)所以要特別注意

另外因為我是用sqlite所以資料庫會一併扔到/var/html/data也就是我另外mount的volume去