cloudflare + letsencrypt

This commit is contained in:
2025-11-14 01:08:32 +02:00
parent bf0a7fe383
commit ce80873ac2
3 changed files with 136 additions and 44 deletions
+7 -3
View File
@@ -10,6 +10,9 @@ services:
- GITEA__database__NAME=gitea - GITEA__database__NAME=gitea
- GITEA__database__USER=gitea - GITEA__database__USER=gitea
- GITEA__database__PASSWD=gitea - GITEA__database__PASSWD=gitea
- GITEA__server__DOMAIN=gitea.forust.xyz
- GITEA__server__ROOT_URL=https://gitea.forust.xyz/
- GITEA__server__SSH_DOMAIN=gitea.forust.xyz
restart: always restart: always
networks: networks:
- gitea - gitea
@@ -19,13 +22,13 @@ services:
- /etc/timezone:/etc/timezone:ro - /etc/timezone:/etc/timezone:ro
- /etc/localtime:/etc/localtime:ro - /etc/localtime:/etc/localtime:ro
labels: labels:
- traefik.enable=true - "traefik.enable=true"
- traefik.docker.network=traefik-proxy - "traefik.docker.network=traefik-proxy"
ports: ports:
# - "3200:3000"
- "222:22" - "222:22"
depends_on: depends_on:
- db - db
db: db:
image: docker.io/library/postgres:14 image: docker.io/library/postgres:14
restart: always restart: always
@@ -37,6 +40,7 @@ services:
- gitea - gitea
volumes: volumes:
- ./volumes/gitea/postgres:/var/lib/postgresql/data - ./volumes/gitea/postgres:/var/lib/postgresql/data
networks: networks:
gitea: gitea:
external: false external: false
+29 -6
View File
@@ -14,26 +14,49 @@ services:
- "--entryPoints.websecure.http.tls=true" - "--entryPoints.websecure.http.tls=true"
- "--entryPoints.web.http.redirections.entryPoint.to=websecure" - "--entryPoints.web.http.redirections.entryPoint.to=websecure"
- "--entryPoints.web.http.redirections.entryPoint.scheme=https" - "--entryPoints.web.http.redirections.entryPoint.scheme=https"
- "--serversTransport.insecureSkipVerify=true"
- "--providers.file.directory=/etc/traefik/dynamic" - "--providers.file.directory=/etc/traefik/dynamic"
- "--providers.file.watch=true" - "--providers.file.watch=true"
# Let's Encrypt STAGING
- "--certificatesresolvers.letsencrypt.acme.email=${EMAIL}"
- "--certificatesresolvers.letsencrypt.acme.storage=/letsencrypt/acme.json"
- "--certificatesresolvers.letsencrypt.acme.caserver=https://acme-staging-v02.api.letsencrypt.org/directory"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge=true"
- "--certificatesresolvers.letsencrypt.acme.httpchallenge.entrypoint=web"
# Cloudflare - получение реальных IP
- "--entryPoints.web.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22"
- "--entryPoints.websecure.forwardedHeaders.trustedIPs=173.245.48.0/20,103.21.244.0/22,103.22.200.0/22,103.31.4.0/22,141.101.64.0/18,108.162.192.0/18,190.93.240.0/20,188.114.96.0/20,197.234.240.0/22,198.41.128.0/17,162.158.0.0/15,104.16.0.0/13,104.24.0.0/14,172.64.0.0/13,131.0.72.0/22"
# Логирование для отладки
- "--log.level=DEBUG"
- "--log.filePath=/var/log/traefik/traefik.log"
- "--accesslog=true"
- "--accesslog.filepath=/var/log/traefik/access.log"
labels: labels:
- "traefik.enable=true" - "traefik.enable=true"
- "traefik.docker.network=traefik-proxy" - "traefik.docker.network=traefik-proxy"
- glance.name=Traefik - glance.name=Traefik
# - glance.icon=si:traefik
- glance.url=https://traefik.${HOST}/ - glance.url=https://traefik.${HOST}/
- glance.description=Traefik is a modern reverse proxy and load balancer that makes deploying microservices easy. - glance.description=Traefik is a modern reverse proxy and load balancer
ports: ports:
- "80:80" - "80:80"
- "443:443" - "443:443"
- "8080:8080"
volumes: volumes:
- /var/run/docker.sock:/var/run/docker.sock:ro - /var/run/docker.sock:/var/run/docker.sock:ro
- ./traefik/certs:/certs:ro - ./traefik/letsencrypt:/letsencrypt
- ./traefik/dynamic:/etc/traefik/dynamic:ro - ./traefik/dynamic:/etc/traefik/dynamic:ro
- ./traefik/logs:/var/log/traefik
- ./traefik/certs:/certs:ro
networks: networks:
- traefik-proxy - traefik-proxy
environment:
- TZ=Europe/Bratislava
networks: networks:
traefik-proxy: traefik-proxy:
+100 -35
View File
@@ -2,102 +2,112 @@ http:
routers: routers:
# Traefik Dashboard # Traefik Dashboard
traefik-dashboard: traefik-dashboard:
rule: "Host(`traefik.workstation`)" rule: "Host(`traefik.forust.xyz`)"
entryPoints: entryPoints:
- websecure - websecure
service: api@internal service: api@internal
tls: {} middlewares:
- auth
- security-headers
tls:
certResolver: letsencrypt
# Portainer # Portainer
portainer: portainer:
rule: "Host(`portainer.workstation`)" rule: "Host(`portainer.forust.xyz`)"
entryPoints: entryPoints:
- websecure - websecure
service: portainer service: portainer
tls: {} middlewares:
- security-headers
tls:
certResolver: letsencrypt
# AdGuard Home # AdGuard Home
adguard-redirect: adguard:
rule: "Host(`adguard.workstation`)" rule: "Host(`adguard.forust.xyz`)"
entryPoints:
- web
middlewares:
- redirect-https
service: adguard
adguard-secure:
rule: "Host(`adguard.workstation`)"
entryPoints: entryPoints:
- websecure - websecure
service: adguard service: adguard
tls: {} middlewares:
- security-headers
tls:
certResolver: letsencrypt
# Nextcloud AIO Interface # Nextcloud AIO Interface (локальный)
nextcloud-aio: nextcloud-aio:
rule: "Host(`nextcloud-aio.workstation`)" rule: "Host(`nextcloud-aio.workstation`)"
entryPoints: entryPoints:
- websecure - websecure
service: nextcloud-aio service: nextcloud-aio
middlewares:
- security-headers
tls: {} tls: {}
# Nextcloud Main # Nextcloud Main
nextcloud: nextcloud:
rule: "Host(`nextcloud.workstation`)" rule: "Host(`nextcloud.forust.xyz`)"
entrypoints: entrypoints:
- websecure - websecure
service: nextcloud service: nextcloud
middlewares: middlewares:
- nextcloud-chain - nextcloud-chain
tls: {} tls:
certResolver: letsencrypt
# Dockmon # Dockmon
dockmon: dockmon:
rule: "Host(`dockmon.workstation`)" rule: "Host(`dockmon.forust.xyz`)"
entryPoints: entryPoints:
- websecure - websecure
service: dockmon service: dockmon
tls: {} middlewares:
- dockmon-auth
- security-headers
tls:
certResolver: letsencrypt
# Glance # Glance (локальный)
glance: glance:
rule: "Host(`glance.workstation`)" rule: "Host(`glance.workstation`)"
entryPoints: entryPoints:
- websecure - websecure
service: glance service: glance
middlewares:
- security-headers
tls: {} tls: {}
# Watercrawl (edu_master) # Watercrawl (локальный)
watercrawl: watercrawl:
rule: "Host(`watercrawl.workstation`)" rule: "Host(`watercrawl.workstation`)"
entryPoints: entryPoints:
- websecure - websecure
service: watercrawl service: watercrawl
middlewares:
- security-headers
tls: {} tls: {}
# N8N # N8N
n8n: n8n:
rule: "Host(`n8n.workstation`)" rule: "Host(`n8n.forust.xyz`)"
entryPoints: entryPoints:
- websecure - websecure
service: n8n service: n8n
tls: {}
# Gitea Redirect
gitea-redirect:
rule: "Host(`gitea.workstation`)"
entryPoints:
- web
middlewares: middlewares:
- redirect-https - security-headers
service: gitea tls:
certResolver: letsencrypt
# Gitea # Gitea
gitea: gitea:
rule: "Host(`gitea.workstation`)" rule: "Host(`gitea.forust.xyz`)"
entryPoints: entryPoints:
- websecure - websecure
service: gitea service: gitea
tls: {} middlewares:
- security-headers
tls:
certResolver: letsencrypt
services: services:
# Portainer # Portainer
@@ -105,6 +115,7 @@ http:
loadBalancer: loadBalancer:
servers: servers:
- url: "https://portainer:9443" - url: "https://portainer:9443"
serversTransport: insecureTransport
# AdGuard Home # AdGuard Home
adguard: adguard:
@@ -117,6 +128,7 @@ http:
loadBalancer: loadBalancer:
servers: servers:
- url: "https://nextcloud-aio-mastercontainer:8080" - url: "https://nextcloud-aio-mastercontainer:8080"
serversTransport: insecureTransport
# Nextcloud Main # Nextcloud Main
nextcloud: nextcloud:
@@ -129,6 +141,7 @@ http:
loadBalancer: loadBalancer:
servers: servers:
- url: "https://dockmon:443" - url: "https://dockmon:443"
serversTransport: insecureTransport
# Glance # Glance
glance: glance:
@@ -154,6 +167,10 @@ http:
servers: servers:
- url: "http://gitea:3000" - url: "http://gitea:3000"
serversTransports:
insecureTransport:
insecureSkipVerify: true
middlewares: middlewares:
# HTTPS Redirect # HTTPS Redirect
redirect-https: redirect-https:
@@ -161,6 +178,40 @@ http:
scheme: https scheme: https
permanent: true permanent: true
# Basic Auth для Traefik Dashboard
auth:
basicAuth:
users:
- "admin:$$apr1$$57E60OUM$$JoYwmLr/uZKaTy6U4IQd9."
realm: "Traefik Dashboard"
# Basic Auth для Dockmon
dockmon-auth:
basicAuth:
users:
- "admin:$$apr1$$.bCpmIHl$$dxPEKdw5aZLAwo8wUz52b1"
realm: "Dockmon Access"
# Cloudflare IP Whitelist (опционально)
cloudflare-ipwhitelist:
ipWhiteList:
sourceRange:
- "173.245.48.0/20"
- "103.21.244.0/22"
- "103.22.200.0/22"
- "103.31.4.0/22"
- "141.101.64.0/18"
- "108.162.192.0/18"
- "190.93.240.0/20"
- "188.114.96.0/20"
- "197.234.240.0/22"
- "198.41.128.0/17"
- "162.158.0.0/15"
- "104.16.0.0/13"
- "104.24.0.0/14"
- "172.64.0.0/13"
- "131.0.72.0/22"
# Security Headers # Security Headers
security-headers: security-headers:
headers: headers:
@@ -171,15 +222,29 @@ http:
stsPreload: true stsPreload: true
stsSeconds: 31536000 stsSeconds: 31536000
customFrameOptionsValue: "SAMEORIGIN" customFrameOptionsValue: "SAMEORIGIN"
customResponseHeaders:
X-Content-Type-Options: "nosniff"
Referrer-Policy: "strict-origin-when-cross-origin"
# Nextcloud specific headers
nextcloud-secure-headers: nextcloud-secure-headers:
headers: headers:
hostsProxyHeaders: hostsProxyHeaders:
- "X-Forwarded-Host" - "X-Forwarded-Host"
- "X-Forwarded-Proto"
referrerPolicy: "same-origin" referrerPolicy: "same-origin"
customFrameOptionsValue: "SAMEORIGIN"
# Rate limiting
rate-limit:
rateLimit:
average: 100
burst: 50
period: 1m
# Nextcloud chain
nextcloud-chain: nextcloud-chain:
chain: chain:
middlewares: middlewares:
- redirect-https
- nextcloud-secure-headers - nextcloud-secure-headers
- security-headers