cloudflare + letsencrypt
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
@@ -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
|
||||||
Reference in New Issue
Block a user