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": {
|
||||
"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",
|
||||
|
||||
@@ -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 для тестирования.
|
||||
|
||||
Просто напиши — подготовлю конкретный пример под твой случай!
|
||||
|
||||
Reference in New Issue
Block a user