deploy nextcloud

This commit is contained in:
2026-04-18 00:36:40 -05:00
parent 4db6f0b06f
commit 9961fe1ed4
13 changed files with 592 additions and 256 deletions

View File

@@ -57,6 +57,19 @@ services:
- proxy
restart: unless-stopped
cloudflared:
image: docker.io/cloudflare/cloudflared:latest
container_name: cloudflared
restart: unless-stopped
command: tunnel --no-autoupdate run
environment:
- TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
networks:
- proxy
depends_on:
traefik:
condition: service_healthy
networks:
proxy:
external: true

View File

@@ -0,0 +1,66 @@
---
services:
traefik:
image: docker.io/library/traefik:v3.6.8
container_name: traefik
security_opt:
- no-new-privileges:true
command:
- "--global.checkNewVersion=false"
- "--global.sendAnonymousUsage=false"
- "--log.level=info"
- "--ping=true"
- "--ping.entryPoint=ping"
- "--api.dashboard=true"
- "--api.insecure=true"
# Entrypoints
- "--entrypoints.ping.address=:8082"
- "--entrypoints.web.address=:80"
- "--entrypoints.web.http.redirections.entryPoint.to=websecure"
- "--entrypoints.web.http.redirections.entryPoint.scheme=https"
- "--entrypoints.web.http.encodedCharacters.allowEncodedSlash=true"
- "--entrypoints.websecure.address=:443"
- "--entrypoints.websecure.http.encodedCharacters.allowEncodedSlash=true"
- "--entrypoints.websecure.http.tls.certResolver=cloudflare"
- "--entrypoints.websecure.http.tls.domains[0].main=local.mk-labs.cloud"
- "--entrypoints.websecure.http.tls.domains[0].sans=*.local.mk-labs.cloud"
# ACME / Cloudflare DNS-01
- "--certificatesresolvers.cloudflare.acme.email=ryan.blundon@protonmail.com"
- "--certificatesresolvers.cloudflare.acme.storage=/var/traefik/certs/acme.json"
- "--certificatesresolvers.cloudflare.acme.caServer=https://acme-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.cloudflare.acme.dnsChallenge.provider=cloudflare"
- "--certificatesresolvers.cloudflare.acme.dnsChallenge.resolvers=1.1.1.1:53,8.8.8.8:53"
# Providers
- "--providers.docker=true"
- "--providers.docker.exposedByDefault=false"
- "--providers.docker.network=proxy"
- "--providers.file.directory=/etc/traefik/dynamic"
- "--providers.file.watch=true"
ports:
- "80:80"
- "443:443"
- "8080:8080"
volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro
- traefik_certs:/var/traefik/certs/:rw
- ./dynamic:/etc/traefik/dynamic:ro
environment:
- TZ=America/Chicago
- CF_DNS_API_TOKEN=${CF_DNS_API_TOKEN}
healthcheck:
test: ["CMD", "wget", "--spider", "-q", "http://127.0.0.1:8082/ping"]
interval: 30s
timeout: 5s
retries: 3
start_period: 10s
networks:
- proxy
restart: unless-stopped
networks:
proxy:
external: true
volumes:
traefik_certs:
driver: local

View File

@@ -0,0 +1,24 @@
http:
routers:
nextcloud:
rule: "Host(`nextcloud.local.mk-labs.cloud`) || Host(`the-grid.local.mk-labs.cloud`)"
entryPoints:
- websecure
tls:
certResolver: cloudflare
middlewares:
- nextcloud-caldav
service: nextcloud
middlewares:
nextcloud-caldav:
redirectRegex:
permanent: true
regex: "https://(.*)/.well-known/(card|cal)dav"
replacement: "https://${1}/remote.php/dav/"
services:
nextcloud:
loadBalancer:
servers:
- url: "http://the-grid.local.mk-labs.cloud:80"