Skip to content

Instantly share code, notes, and snippets.

@idolpx
Last active November 29, 2022 13:29
Show Gist options
  • Save idolpx/64cbc2b37218194e21413761e065d9fc to your computer and use it in GitHub Desktop.
Save idolpx/64cbc2b37218194e21413761e065d9fc to your computer and use it in GitHub Desktop.
Docker - Traefik - Nextcloud - OnlyOffice: installed on a single host using multiple domains for the same Nextcloud container
version: "3.3"
networks:
proxy:
ipam:
driver: default
config:
- subnet: 17.100.0.0/16
services:
traefik:
image: traefik:v2.5
container_name: traefik
hostname: traefik
networks:
default:
proxy:
ipv4_address: 17.100.0.2
command:
#- "--log.level=DEBUG"
#- "--certificatesresolvers.le.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--api.insecure=true"
- "--providers.docker=true"
- "--providers.docker.exposedbydefault=false"
- "--entrypoints.http.address=:80"
- "--entrypoints.https.address=:443"
- "--entrypoints.https.http.tls.certResolver=le"
- "--entrypoints.http.http.redirections.entryPoint.to=entrypoints-https"
- "--entrypoints.http.http.redirections.entryPoint.scheme=https"
- "--certificatesResolvers.le.acme.email=email@address.com"
- "--certificatesresolvers.le.acme.storage=/letsencrypt/acme.json"
- "--certificatesResolvers.le.acme.tlsChallenge=true"
- "--certificatesResolvers.le.acme.httpChallenge=true"
- "--certificatesResolvers.le.acme.httpChallenge.entryPoint=http"
volumes:
- /docker/letsencrypt:/letsencrypt
- /var/run/docker.sock:/var/run/docker.sock:ro
ports:
- 80:80
- 443:443
- 8080:8080
restart: always
mariadb:
image: jc21/mariadb-aria:10.4
container_name: mariadb
hostname: mariadb
environment:
MYSQL_ROOT_PASSWORD: 'XXXX'
MYSQL_DATABASE: 'nextcloud'
MYSQL_USER: 'nextcloud'
MYSQL_PASSWORD: 'XXXX'
ports:
- 3307:3306
volumes:
- /docker/mariadb:/var/lib/mysql
restart: unless-stopped
nextcloud:
image: nextcloud:latest
container_name: nextcloud
hostname: nextcloud
networks:
default:
proxy:
ipv4_address: 17.100.0.3
extra_hosts:
# Add entry to /etc/hosts in container to Traefik proxy for OnlyOffice domain
- "onlyoffice.domain.com:17.100.0.2"
labels:
- traefik.enable=true
- traefik.http.routers.nextcloud.rule=Host(`nextcloud1.domain.com`, `nextcloud2.domain.com`)
- traefik.http.routers.nextcloud.tls=true
- traefik.http.routers.nextcloud.tls.certresolver=le
- traefik.http.routers.nextcloud.middlewares=nextcloud,nextcloud_redirect
- 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.accesscontrolalloworiginlist=*
- 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=/.well-known/(card|cal)dav
- traefik.http.middlewares.nextcloud_redirect.redirectregex.replacement=/remote.php/dav/
ports:
- 8888:80
volumes:
- /docker/nextcloud:/var/www/html
- /mnt/time-machine/nextcloud:/var/www/html/data
- /mnt:/mnt
restart: unless-stopped
onlyoffice:
image: alehoho/oo-ce-docker-license
container_name: onlyoffice
hostname: onlyoffice
networks:
default:
proxy:
ipv4_address: 17.100.0.4
extra_hosts:
# Add entry to /etc/hosts in container to Traefik proxy for OnlyOffice and NextCloud domains
- "onlyoffice.domain.com:17.100.0.2"
- "nextcloud1.domain.com:17.100.0.2"
- "nextcloud2.domain.com:17.100.0.2"
labels:
# https://helpcenter.onlyoffice.com/de/installation/docs-community-proxy.aspx
- traefik.enable=true
- traefik.http.routers.onlyoffice.rule=Host(`onlyoffice.domain.com`)
- traefik.http.routers.onlyoffice.tls=true
- traefik.http.routers.onlyoffice.tls.certresolver=le
- traefik.http.routers.onlyoffice.middlewares=onlyoffice
- traefik.http.middlewares.onlyoffice.headers.customrequestheaders.X-Forwarded-Host=onlyoffice.domain.com
- traefik.http.middlewares.onlyoffice.headers.customrequestheaders.X-Forwarded-Proto=https
ports:
- 9981:80
restart: unless-stopped
@TobenderZephyr
Copy link

Docker uses it for the virtual network between containers. Not sure if it routes it externally or not. Regardless... what I have here seems to do the trick.

docker uses 172.17.0.0/16 by default, if you are not using swarm. (and every other private address space counting upwards)
It uses 17.100.0.0/16 because you told it to do so.

As long as you don't serve to people whose ISP have 17.100 address space...

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment