From 1b2d31031c24e2664d2b5177e011994f9396bdc1 Mon Sep 17 00:00:00 2001 From: sShemet Date: Tue, 13 May 2025 18:22:29 +0500 Subject: [PATCH] vault backup: 2025-05-13 18:22:29 --- .obsidian/workspace.json | 6 +- .../Mol/Серверы/PROXY_PASS/Traefik config.md | 152 ++++++++++++++++++ 2 files changed, 155 insertions(+), 3 deletions(-) diff --git a/.obsidian/workspace.json b/.obsidian/workspace.json index 49e4b78..e858bae 100644 --- a/.obsidian/workspace.json +++ b/.obsidian/workspace.json @@ -13,12 +13,12 @@ "state": { "type": "markdown", "state": { - "file": "WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md", + "file": "WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md", "mode": "source", "source": false }, "icon": "lucide-file", - "title": "Все идеи для Моли" + "title": "Traefik config" } } ] @@ -171,6 +171,7 @@ }, "active": "343836aed0394d03", "lastOpenFiles": [ + "WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md", "WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md", "WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Angie config.md", "WORK & PROJECTS/Mol/Серверы/Схема инфраструктуры.canvas", @@ -194,7 +195,6 @@ "SKILLS DOCS/OLD PHP INSTALL.md", "SKILLS DOCS/DOCS/Load Balancer 2.md", "SKILLS DOCS/DOCS/Load Balancer.md", - "WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md", "WORK & PROJECTS/Mol/Code Chunks/Tiptap resizeTableColumnWidth.md", "WORK & PROJECTS/Mol/Code Chunks/TipTap Plugin.md", "WORK & PROJECTS/Mol/Серверы/Alfa cloud prod_canvas2doc-data/newdoc-node_72b797b472986e84_fromCanvas.md", diff --git a/WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md b/WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md index 5251054..a12ad18 100644 --- a/WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md +++ b/WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md @@ -603,4 +603,156 @@ accessLog: | Как масштабироваться | Горизонтально: добавление ещё Traefik-нод (в кластере) | --- +Отлично, давай разберём **конкретный сценарий**: +> Ты хочешь: +> +> - Добавить новый поддомен (например, `client1.example.com`), +> - Чтобы Traefik автоматически получил для него **TLS-сертификат через HTTP-01 чаллендж**, +> - Чтобы домен работал по HTTPS, +> - А внутрь сети проксировался на бэкенд в подсети (например, `http://192.168.10.10:8080`), +> - И всё это — без ручного участия после добавления конфига. + +--- + +# ✅ Что нужно сделать + +## 1. **Настроить статический конфиг (`traefik.yml`)** + +```yaml +entryPoints: + web: + address: ":80" + websecure: + address: ":443" + +providers: + file: + filename: /etc/traefik/dynamic_conf.yml + watch: true + +certificatesResolvers: + myresolver: + acme: + email: admin@example.com + storage: acme.json + httpChallenge: + entryPoint: web +``` + +### 📌 Важные моменты: +- `myresolver` — это имя resolver'а, которое будем использовать в динамическом конфиге. +- `storage: acme.json` — файл, где будут храниться сертификаты. +- `httpChallenge.entryPoint: web` — указывает, что проверка будет идти через порт 80. + +--- + +## 2. **Добавить динамический маршрут в `dynamic_conf.yml`** + +```yaml +http: + routers: + client1-router: + rule: "Host(`client1.example.com`)" + service: client1-service + entryPoints: + - websecure + tls: + certResolver: myresolver + + services: + client1-service: + loadBalancer: + servers: + - url: http://192.168.10.10:8080 +``` + +### 🔍 Что здесь происходит: +- При запросе `https://client1.example.com`: + - Traefik проверяет, есть ли уже выданный сертификат. + - Если нет — запрашивает его у Let’s Encrypt. + - Для проверки прав на домен — создаёт временный маршрут `//.well-known/acme-challenge/...`. + - После успешной проверки — сохраняет сертификат в `acme.json`. + - Запрос перенаправляется на внутренний сервер `http://192.168.10.10:8080`. + +--- + +## 3. **Как работает HTTP-челлендж?** + +Let’s Encrypt делает GET-запрос: +``` +GET http://client1.example.com/.well-known/acme-challenge/<токен> +``` + +Traefik: +- Автоматически отвечает на этот запрос, +- Не требует дополнительных правил, +- Работает **без участия пользователя**. + +> ⚠️ Убедись, что порт **80 открыт** и доступен извне (Let's Encrypt должен видеть твой сервер). + +--- + +## 4. **Файл `acme.json`** + +Это **ключевой файл**, в котором Traefik хранит: +- Приватные ключи, +- Сертификаты, +- Сроки действия, +- Информацию о доменах. + +Создай его и установи права: +```bash +touch /etc/traefik/acme.json +chmod 600 /etc/traefik/acme.json +``` + +--- + +## 🧩 Как работает вся система? + +1. **Ты добавляешь новый поддомен в `dynamic_conf.yml`** +2. **Traefik обнаруживает изменение** (если включен `watch: true`) +3. **Запрашивает сертификат у Let’s Encrypt** + - Через HTTP-чаллендж (порт 80), + - Проверяет владение доменом, + - Получает сертификат. +4. **Начинает обслуживать сайт по HTTPS** +5. **Проксирует запросы во внутреннюю сеть** +6. **Автоматически обновляет сертификат за 7 дней до истечения** + +--- + +## 📋 Пример полной структуры файлов + +``` +/etc/traefik/ +├── traefik.yml # основной статический конфиг +├── dynamic_conf.yml # динамические маршруты +├── acme.json # хранилище сертификатов +``` + +--- + +## 📈 Полезные советы + +| Задача | Совет | +|-------------------------------------|----------------------------------------------------------------------| +| Обновление сертификатов | Происходит автоматически каждые 24 часа | +| Проверка сертификатов | Открой Traefik Dashboard → раздел HTTPS > Certificates | +| Лимиты Let's Encrypt | Не более 300 новых сертификатов в день на один домен | +| Избегать блокировок | Не делай много ошибочных запросов | +| Бэкапы | Регулярно бэкапь `acme.json` | + +--- + +## 🚀 Хотите пример скрипта или API? + +Если интересно, могу показать: + +- Как написать скрипт на Python, который автоматически добавляет поддомены в `dynamic_conf.yml`. +- Как использовать REST API Traefik вместо файла. +- Как проверить, что HTTP-чаллендж прошёл успешно. +- Как использовать staging-среду Let’s Encrypt для тестирования. + +Просто напиши — подготовлю конкретный пример под твой случай!