Installer NextCloud sur votre serveur avec Docker et SSL
Dans cet article nous allons :
- Installer une stack NextCloud / MariaDB / Redis
- Le rendre accessible via https (cf article #traefik)
On va pas tergiverser longtemps, il nous faut un docker-compose et basta :)
Personnellement j'utilise la version Nextcloud de Wonderfall. Elle me convient très bien.
Docker-compose.yml et .env
On va se créer un fichier .env du style :
#########
# MYSQL #
#########
MYSQL_ROOT_PASSWORD="MyVerySecurePasswordRoot"
# NEXTCLOUD
MYSQL_USER_NEXTCLOUD="nextcloud-user"
MYSQL_PASSWORD_NEXTCLOUD="MyVerySecurePasswordUser"
MYSQL_DATABASE_NEXTCLOUD="nextcloud-db"
PUID="1000"
PGID="997"
TZ="Europe/Paris"
USERDIR="/home/user"
DOMAINNAME="domain.com"
Puis notre docker compose
version: "3.6"
###########
# NETWORK #
###########
networks:
traefik_proxy:
external: true
internal:
driver: bridge
###########
# VOLUMES #
###########
volumes:
nextcloud-db: {}
nextcloud-redis: {}
############
# SERVICES #
############
services:
# NEXTCLOUD #
#############
nextcloud-app:
hostname: nextcloud
container_name: nextcloud
image: ghcr.io/wonderfall/nextcloud:latest
restart: unless-stopped
stdin_open: true
tty: true
depends_on:
- nextcloud-db
- nextcloud-redis
networks:
- traefik_proxy
- internal
environment:
UPLOAD_MAX_SIZE: 10G
APC_SHM_SIZE: 256M
MEMORY_LIMIT: 4G
CRON_PERIOD: 15m
TZ: ${TZ}
DOMAIN: localhost
DB_TYPE: mysql
DB_NAME: ${MYSQL_DATABASE_NEXTCLOUD}
DB_USER: ${MYSQL_USER_NEXTCLOUD}
DB_PASSWORD: ${MYSQL_PASSWORD_NEXTCLOUD}
DB_HOST: nextcloud-db
volumes:
- ${USERDIR}/docker/nextcloud/data:/data
- ${USERDIR}/docker/nextcloud/config:/nextcloud/config
- ${USERDIR}/docker/nextcloud/apps:/nextcloud/apps2
- ${USERDIR}/docker/nextcloud/themes:/nextcloud/themes
healthcheck:
test: ["CMD", "curl", "-f", "http://127.0.0.1:8888"]
interval: 30s
timeout: 10s
retries: 3
start_period: 1m
labels:
traefik.enable: true
traefik.docker.network: traefik_proxy
traefik.http.routers.nextcloud.entrypoints: websecure
traefik.http.routers.nextcloud.rule: Host(`cloud.${DOMAINNAME}`)
traefik.http.routers.nextcloud.service: nextcloud
traefik.http.services.nextcloud.loadbalancer.server.port: 8888
traefik.http.routers.nextcloud.middlewares: nextcloud,nextcloud_redirect
traefik.http.middlewares.nextcloud.headers.customFrameOptionsValue: ALLOW-FROM https://cloud.${DOMAINNAME}
traefik.http.middlewares.nextcloud.headers.contentSecurityPolicy: frame-ancestors 'self' ${DOMAINNAME} *.${DOMAINNAME}
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.headers.customresponseheaders.X-Frame-Options: SAMEORIGIN
traefik.http.middlewares.nextcloud_redirect.redirectregex.permanent: true
traefik.http.middlewares.nextcloud-redirect.redirectRegex.regex: https://(.*)/.well-known/(card|cal)dav
traefik.http.middlewares.nextcloud-redirect.redirectRegex.replacement: https://$${1}/remote.php/dav/
traefik.http.middlewares.nextcloud_webfinger.redirectregex.permanent: true
traefik.http.middlewares.nextcloud-webfinger.redirectRegex.regex: ^(/.well-known.*)
traefik.http.middlewares.nextcloud-webfinger.redirectRegex.replacement: /index.php$${1}
com.centurylinklabs.watchtower.enable: true
# MYSQL #
#########
nextcloud-db:
hostname: nextcloud-db
container_name: nextcloud-db
image: lscr.io/linuxserver/mariadb
restart: unless-stopped
healthcheck:
test: ["CMD", "mysqladmin", "ping", "--silent"]
interval: 30s
timeout: 10s
retries: 3
start_period: 1m
volumes:
- nextcloud-db:/config
environment:
PUID: ${PUID}
PGID: ${PGID}
TZ: ${TZ}
MYSQL_DATABASE: ${MYSQL_DATABASE_NEXTCLOUD}
MYSQL_USER: ${MYSQL_USER_NEXTCLOUD}
MYSQL_PASSWORD: ${MYSQL_PASSWORD_NEXTCLOUD}
MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
networks:
- internal
labels:
com.centurylinklabs.watchtower.enable: true
# Redis #
#########
nextcloud-redis:
container_name: nextcloud-redis
image: redis:alpine
restart: unless-stopped
user: ${PUID}:${PGID}
healthcheck:
test: ["CMD", "redis-cli","ping"]
interval: 30s
timeout: 10s
retries: 3
start_period: 1m
volumes:
- nextcloud-redis:/data
networks:
- internal
labels:
com.centurylinklabs.watchtower.enable: true
Puis un docker-compose up -d et hop voila vous aurez une instance NextCloud auto-hébergée.