From a98c408f02c0958f8775cc7d8bcf07021d09f49e Mon Sep 17 00:00:00 2001 From: Zalim Date: Mon, 20 Jul 2026 11:46:40 +0300 Subject: [PATCH] Add traefik and nextcloud config --- traefik/acme.json | 0 traefik/config/nextcloud.yml | 37 +++++++++++++++++++++++++++++++ traefik/docker-compose.yml | 43 ++++++++++++++++++++++++++++++++++++ traefik/traefik.yaml | 41 ++++++++++++++++++++++++++++++++++ 4 files changed, 121 insertions(+) create mode 100644 traefik/acme.json create mode 100644 traefik/config/nextcloud.yml create mode 100644 traefik/traefik.yaml diff --git a/traefik/acme.json b/traefik/acme.json new file mode 100644 index 0000000..e69de29 diff --git a/traefik/config/nextcloud.yml b/traefik/config/nextcloud.yml new file mode 100644 index 0000000..bba10ce --- /dev/null +++ b/traefik/config/nextcloud.yml @@ -0,0 +1,37 @@ +http: + routers: + nextcloud: + rule: "Host(`nc.example.com`)" # Указываем свой домен для nectcloud + entrypoints: + - "https" + service: nextcloud + middlewares: + - nextcloud-chain + tls: + certresolver: "challenge" + + services: + nextcloud: + loadBalancer: + servers: + - url: "http://nextcloud-aio-apache:11000" # Adjust to match APACHE_PORT and APACHE_IP_BINDING. See https://github.com/nextcloud/all-in-one/blob/main/reverse-proxy.md#adapting-the-sample-web-server-configurations-below + + middlewares: + nextcloud-secure-headers: + headers: + hostsProxyHeaders: + - "X-Forwarded-Host" + referrerPolicy: "same-origin" + customRequestHeaders: + X-Forwarded-Proto: "https" + + https-redirect: + redirectscheme: + scheme: https + + nextcloud-chain: + chain: + middlewares: + # - ... (e.g. rate limiting middleware) + - https-redirect + - nextcloud-secure-headers \ No newline at end of file diff --git a/traefik/docker-compose.yml b/traefik/docker-compose.yml index e69de29..ad285c1 100644 --- a/traefik/docker-compose.yml +++ b/traefik/docker-compose.yml @@ -0,0 +1,43 @@ +services: + traefik: + image: traefik:latest # Используем последний образ Traefik + container_name: traefik # Имя контейнера + restart: unless-stopped # Говорим докеру, чтобы контейнер всегда пытался перезапуститься, в случае непредвиденной остановки + security_opt: + - no-new-privileges:true # Не даем получить контейнеру дополнительные привилегии без нашего ведома + networks: + proxy: # контейнер будет работать в определенной докер сети с названием 'proxy' + ports: + - 80:80 # определяем HTTP порт + - 443:443 # определяем HTTPS порт +# environment: +# - CF_API_EMAIL=mail@gmail.com # Указываем свою почтовый адрес, который у нас служит аккаунтом в Cloudflare для получения API токена +# - CF_DNS_API_TOKEN=apitoken # указываем значения полученного токена + volumes: + - /etc/localtime:/etc/localtime:ro # синхронизируем время контейнера со временем хоста + - /var/run/docker.sock:/var/run/docker.sock:ro # Разрешаем Traefik взаимодействовать с докером напрямую + - /home/zalim/docker/traefik/traefik.yaml:/traefik.yaml:ro # указываем где у нас находится файл статической конфигурации Traefik + - /home/zalim/docker/traefik/acme.json:/acme.json # указываем где у нас будут храниться все данные о наших SSL сертификатах + - /home/zalim/docker/traefik/config:/config:ro # Указываем где у нас хранится файл динамической конфигурации + - /home/zalim/docker/traefik/logs:/var/log/traefik # прописываем путь до директории, где у нас будут храниться логи Traefik и access log + labels: + - "traefik.enable=true" # Активируем Traefik для данного сервиса + - "traefik.http.routers.traefik.entrypoints=http" # Определяем точку входа HTTP + - "traefik.http.routers.traefik.rule=Host(`traefik.example.com`)" # Определяем хост правило для роутинга + - "traefik.http.middlewares.traefik-auth.basicauth.users=user:password_hash" # Прикручиваем базовую аутентификацию для защиты нашего traefik, указывая логин и пароль в захэшированном виде + - "traefik.http.middlewares.traefik-https-redirect.redirectscheme.scheme=https" # Указываем что HTTP трафик должен быть перенаправлен в HTTPS трафик + - "traefik.http.middlewares.sslheader.headers.customrequestheaders.X-Forwarded-Proto=https" # Задаем передадресацию заголовков для SSL + - "traefik.http.routers.traefik.middlewares=traefik-https-redirect" # Применяем Apply HTTPS redirect middleware для редиректа https трафика + - "traefik.http.routers.traefik-secure.entrypoints=https" # Безопасная точка входа для HTTPS + - "traefik.http.routers.traefik-secure.rule=Host(`traefik.example.com`)" # Хост правило для https роутинга + - "traefik.http.routers.traefik-secure.middlewares=traefik-auth" # Применяем аутентификационную middleware + - "traefik.http.routers.traefik-secure.tls=true" # Включаем TLS для безопасного соединения + - "traefik.http.routers.traefik-secure.tls.certresolver=challenge" # Используем Cloudflare для выпуска сертификатов +# - "traefik.http.routers.traefik-secure.tls.domains[0].main=user.ru" # Доменное имя второго уровня, на который выпускаем SSL сертификат +# - "traefik.http.routers.traefik-secure.tls.domains[0].sans=*.user.ru" # Выпускаем wildcard SSL сертификат на все поддоменные имя в рамках домена, определенного правилом выше + - "traefik.http.routers.traefik-secure.service=api@internal" # Определяем внутренний сервис для Traefik API + +networks: + proxy: + name: proxy # Определяем внешнюю сеть к которой необходимо присоединиться + external: true # Указываем, что сеть является внешней diff --git a/traefik/traefik.yaml b/traefik/traefik.yaml new file mode 100644 index 0000000..5ff90ab --- /dev/null +++ b/traefik/traefik.yaml @@ -0,0 +1,41 @@ +api: + dashboard: true #включаем дэшборд + debug: true # включаем уровень дебаг +entryPoints: # определяем точки входа + http: # название точки входа + address: ":80" # порт который относиться к названию http + http: # следующие пять строчек, говорят нам, что мы на глобальном уровне заставляем весь трафик, который приходит на порт 80 + redirections: + entryPoint: + to: https + scheme: https + https: # название точки входа + address: ":443" # порт который относиться к названию https + http: + encodedCharacters: # Разрешённые закодированные символы (важно для Trilium) + allowEncodedSlash: true # Разрешить %2F + allowEncodedPercent: true # Разрешить %25 + allowEncodedHash: true # Разрешить %23 +serversTransport: # следующие две строчки разрешают нам использовать самоподписанные ssl сертификаты в тех сервиса, которые их используют, например Proxmox + insecureSkipVerify: true +providers: # определяем провайдеров конфигурации - это докер и файл динамической конфигурации + docker: + endpoint: "unix:///var/run/docker.sock" + exposedByDefault: false + file: + directory: /config + watch: true +# filename: /config.yaml +certificatesResolvers: # определяем кто у нас выступает резолвером сертификатов + challenge: # кто именно, указываем, что надо использовать acme; указываем почту, которая используется в cloudflare + acme: + email: admin@example.com #add your email + storage: acme.json # определяем файл, где будет храниться вся информация об ssl сертификатов + httpChallenge: # используем метод получения ssl сертификатов как dns challenge + entryPoint: http + +log: # определяем уровень логирования и путь для логов + level: "INFO" + filePath: "/var/log/traefik/traefik.log" +accessLog: + filePath: "/var/log/traefik/access.log" \ No newline at end of file