vault backup: 2025-05-13 18:22:29
This commit is contained in:
6
.obsidian/workspace.json
vendored
6
.obsidian/workspace.json
vendored
@@ -13,12 +13,12 @@
|
|||||||
"state": {
|
"state": {
|
||||||
"type": "markdown",
|
"type": "markdown",
|
||||||
"state": {
|
"state": {
|
||||||
"file": "WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
|
"file": "WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md",
|
||||||
"mode": "source",
|
"mode": "source",
|
||||||
"source": false
|
"source": false
|
||||||
},
|
},
|
||||||
"icon": "lucide-file",
|
"icon": "lucide-file",
|
||||||
"title": "Все идеи для Моли"
|
"title": "Traefik config"
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
]
|
]
|
||||||
@@ -171,6 +171,7 @@
|
|||||||
},
|
},
|
||||||
"active": "343836aed0394d03",
|
"active": "343836aed0394d03",
|
||||||
"lastOpenFiles": [
|
"lastOpenFiles": [
|
||||||
|
"WORK & PROJECTS/Mol/Ideas/Все идеи для Моли.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md",
|
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Traefik config.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Angie config.md",
|
"WORK & PROJECTS/Mol/Серверы/PROXY_PASS/Angie config.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/Схема инфраструктуры.canvas",
|
"WORK & PROJECTS/Mol/Серверы/Схема инфраструктуры.canvas",
|
||||||
@@ -194,7 +195,6 @@
|
|||||||
"SKILLS DOCS/OLD PHP INSTALL.md",
|
"SKILLS DOCS/OLD PHP INSTALL.md",
|
||||||
"SKILLS DOCS/DOCS/Load Balancer 2.md",
|
"SKILLS DOCS/DOCS/Load Balancer 2.md",
|
||||||
"SKILLS DOCS/DOCS/Load Balancer.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 resizeTableColumnWidth.md",
|
||||||
"WORK & PROJECTS/Mol/Code Chunks/TipTap Plugin.md",
|
"WORK & PROJECTS/Mol/Code Chunks/TipTap Plugin.md",
|
||||||
"WORK & PROJECTS/Mol/Серверы/Alfa cloud prod_canvas2doc-data/newdoc-node_72b797b472986e84_fromCanvas.md",
|
"WORK & PROJECTS/Mol/Серверы/Alfa cloud prod_canvas2doc-data/newdoc-node_72b797b472986e84_fromCanvas.md",
|
||||||
|
|||||||
@@ -603,4 +603,156 @@ accessLog:
|
|||||||
| Как масштабироваться | Горизонтально: добавление ещё Traefik-нод (в кластере) |
|
| Как масштабироваться | Горизонтально: добавление ещё 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 для тестирования.
|
||||||
|
|
||||||
|
Просто напиши — подготовлю конкретный пример под твой случай!
|
||||||
|
|||||||
Reference in New Issue
Block a user