✨ Реорганизация структуры заметок v2.0
- Создана новая организационная структура с эмодзи-папками - Добавлена система Inbox для быстрого захвата идей - Созданы шаблоны для всех типов заметок с YAML метаданными - Перенесен весь контент из старой структуры в новую - Добавлен главный дашборд с динамическими запросами - Создано подробное руководство по использованию системы - Техническая документация реорганизована по типам Основные улучшения: ✅ Inbox-first подход для новых заметок ✅ Тематическая организация по 8 областям знаний ✅ Шаблоны с метаданными для структурированности ✅ Система связей между заметками ✅ Динамические дашборды с аналитикой ✅ Централизованная техническая документация без дублирования
This commit is contained in:
@@ -0,0 +1,29 @@
|
||||
# Traefik Reverse Proxy - Администрирование
|
||||
|
||||
## Ежедневное администрирование Traefik
|
||||
|
||||
*Документация будет дополнена процедурами администрирования*
|
||||
|
||||
## Мониторинг Dashboard
|
||||
*Работа с веб-интерфейсом Traefik*
|
||||
|
||||
## Управление SSL сертификатами
|
||||
*Мониторинг и обновление сертификатов*
|
||||
|
||||
## Анализ логов
|
||||
*Работа с логами доступа и ошибок*
|
||||
|
||||
## Добавление новых сервисов
|
||||
*Процедура подключения новых сервисов*
|
||||
|
||||
## Troubleshooting
|
||||
*Решение типовых проблем*
|
||||
|
||||
## Обновления
|
||||
*Процедуры обновления Traefik*
|
||||
|
||||
## Backup и восстановление
|
||||
*Резервное копирование конфигурации*
|
||||
|
||||
---
|
||||
*Эта страница находится в разработке*
|
||||
255
⚙️ Техническое/🖥️ Серверы/Traefik Reverse Proxy/Конфигурации.md
Normal file
255
⚙️ Техническое/🖥️ Серверы/Traefik Reverse Proxy/Конфигурации.md
Normal file
@@ -0,0 +1,255 @@
|
||||
# Traefik Reverse Proxy - Конфигурации
|
||||
|
||||
← **[[Обзор системы|← Назад к обзору]]**
|
||||
|
||||
## Docker Compose конфигурация
|
||||
|
||||
### Основной файл: `/DOCKER/reverse-proxy/docker-compose.yml`
|
||||
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v3.0
|
||||
container_name: traefik
|
||||
command:
|
||||
# API и Dashboard
|
||||
- --api.dashboard=true
|
||||
- --api.insecure=true
|
||||
|
||||
# Docker Provider
|
||||
- --providers.docker=true
|
||||
- --providers.docker.exposedbydefault=false
|
||||
- --providers.docker.network=proxy
|
||||
|
||||
# Entrypoints
|
||||
- --entrypoints.web.address=:80
|
||||
- --entrypoints.websecure.address=:443
|
||||
- --entrypoints.ssh.address=:2222
|
||||
|
||||
# SSL Configuration
|
||||
- --certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru
|
||||
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
|
||||
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
|
||||
|
||||
# TCP Routing
|
||||
- --providers.docker.exposedByDefault=false
|
||||
|
||||
ports:
|
||||
- "80:80" # HTTP
|
||||
- "443:443" # HTTPS
|
||||
- "8080:8080" # Dashboard
|
||||
- "2222:2222" # SSH для Git
|
||||
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- traefik_data:/data
|
||||
|
||||
networks:
|
||||
- proxy
|
||||
|
||||
labels:
|
||||
# Самонастройка для Dashboard
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
|
||||
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
|
||||
- traefik.http.routers.traefik.service=api@internal
|
||||
|
||||
# HTTP to HTTPS redirect
|
||||
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
|
||||
- traefik.http.routers.http-catchall.entrypoints=web
|
||||
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
|
||||
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
traefik_data:
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
## Command Line Arguments
|
||||
|
||||
### API Configuration
|
||||
- `--api.dashboard=true` - Включает веб-интерфейс Dashboard
|
||||
- `--api.insecure=true` - **⚠️ Небезопасно**: Доступ к API без аутентификации на порту 8080
|
||||
|
||||
### Provider Configuration
|
||||
- `--providers.docker=true` - Включает Docker provider для автодискавери
|
||||
- `--providers.docker.exposedbydefault=false` - Сервисы не экспонируются автоматически
|
||||
- `--providers.docker.network=proxy` - Использует сеть `proxy` для подключения
|
||||
|
||||
### Entrypoints
|
||||
- `--entrypoints.web.address=:80` - HTTP entrypoint
|
||||
- `--entrypoints.websecure.address=:443` - HTTPS entrypoint
|
||||
- `--entrypoints.ssh.address=:2222` - TCP entrypoint для SSH
|
||||
|
||||
### SSL Certificate Management
|
||||
- `--certificatesresolvers.letsencrypt.acme.email=your_email@aepif.ru` - Email для Let's Encrypt
|
||||
- `--certificatesresolvers.letsencrypt.acme.storage=/data/acme.json` - Файл хранения сертификатов
|
||||
- `--certificatesresolvers.letsencrypt.acme.tlschallenge=true` - Использует TLS-01 challenge
|
||||
|
||||
## Port Mapping
|
||||
|
||||
| Внешний порт | Внутренний порт | Назначение |
|
||||
|--------------|-----------------|------------|
|
||||
| 80 | 80 | HTTP трафик (редирект на HTTPS) |
|
||||
| 443 | 443 | HTTPS трафик |
|
||||
| 8080 | 8080 | Dashboard (небезопасно) |
|
||||
| 2222 | 2222 | SSH для Git operations |
|
||||
|
||||
## Volume Configuration
|
||||
|
||||
### traefik_data
|
||||
- **Назначение**: Хранение SSL сертификатов и конфигурации
|
||||
- **Содержимое**:
|
||||
- `acme.json` - Let's Encrypt сертификаты
|
||||
- Конфигурационные файлы Traefik
|
||||
|
||||
### Docker Socket
|
||||
```yaml
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
```
|
||||
- **Назначение**: Доступ к Docker API для service discovery
|
||||
- **Режим**: Read-only для безопасности
|
||||
|
||||
## Network Configuration
|
||||
|
||||
### Proxy Network
|
||||
```yaml
|
||||
networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
**Важно**: Эта сеть должна быть создана заранее и подключена ко всем сервисам, которые должны быть доступны через Traefik.
|
||||
|
||||
## Labels Configuration
|
||||
|
||||
### Self-configuration для Dashboard
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
|
||||
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
|
||||
- traefik.http.routers.traefik.service=api@internal
|
||||
```
|
||||
|
||||
### HTTP to HTTPS Redirect
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
|
||||
- traefik.http.routers.http-catchall.entrypoints=web
|
||||
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
|
||||
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||||
```
|
||||
|
||||
## Dynamic Configuration Examples
|
||||
|
||||
### Типичные labels для сервиса
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.service-name.rule=Host(`service.aepif.ru`)
|
||||
- traefik.http.routers.service-name.tls.certresolver=letsencrypt
|
||||
- traefik.http.services.service-name.loadbalancer.server.port=80
|
||||
```
|
||||
|
||||
### С Authelia middleware
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.protected-service.rule=Host(`protected.aepif.ru`)
|
||||
- traefik.http.routers.protected-service.tls.certresolver=letsencrypt
|
||||
- traefik.http.routers.protected-service.middlewares=authelia@docker
|
||||
- traefik.http.services.protected-service.loadbalancer.server.port=80
|
||||
```
|
||||
|
||||
### TCP routing (для SSH)
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.tcp.routers.git-ssh.rule=HostSNI(`*`)
|
||||
- traefik.tcp.routers.git-ssh.entrypoints=ssh
|
||||
- traefik.tcp.services.git-ssh.loadbalancer.server.port=22
|
||||
```
|
||||
|
||||
## SSL/TLS Configuration
|
||||
|
||||
### ACME Settings
|
||||
- **Challenge Type**: TLS-01 (HTTP challenge через порт 443)
|
||||
- **Storage**: `/data/acme.json` внутри контейнера
|
||||
- **Email**: Обязательно указать для уведомлений о истечении сертификатов
|
||||
- **Domains**: Автоматически из Host rules в labels
|
||||
|
||||
### Security Headers (рекомендуемые)
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.http.middlewares.security-headers.headers.frameDeny=true
|
||||
- traefik.http.middlewares.security-headers.headers.sslRedirect=true
|
||||
- traefik.http.middlewares.security-headers.headers.browserXssFilter=true
|
||||
- traefik.http.middlewares.security-headers.headers.contentTypeNosniff=true
|
||||
- traefik.http.middlewares.security-headers.headers.forceSTSHeader=true
|
||||
- traefik.http.middlewares.security-headers.headers.stsIncludeSubdomains=true
|
||||
- traefik.http.middlewares.security-headers.headers.stsPreload=true
|
||||
- traefik.http.middlewares.security-headers.headers.stsSeconds=31536000
|
||||
```
|
||||
|
||||
## Middleware Configuration
|
||||
|
||||
### Redirect to HTTPS
|
||||
```yaml
|
||||
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||||
```
|
||||
|
||||
### Rate Limiting
|
||||
```yaml
|
||||
- traefik.http.middlewares.rate-limit.ratelimit.burst=100
|
||||
- traefik.http.middlewares.rate-limit.ratelimit.average=50
|
||||
```
|
||||
|
||||
### CORS Headers
|
||||
```yaml
|
||||
- traefik.http.middlewares.cors.headers.accessControlAllowOriginList=*
|
||||
- traefik.http.middlewares.cors.headers.accessControlAllowMethods=GET,OPTIONS,PUT,POST,DELETE
|
||||
- traefik.http.middlewares.cors.headers.accessControlAllowHeaders=*
|
||||
```
|
||||
|
||||
## Environment Variables
|
||||
|
||||
Traefik поддерживает конфигурацию через переменные окружения:
|
||||
|
||||
```yaml
|
||||
environment:
|
||||
- TRAEFIK_API_DASHBOARD=true
|
||||
- TRAEFIK_PROVIDERS_DOCKER=true
|
||||
- TRAEFIK_ENTRYPOINTS_WEB_ADDRESS=:80
|
||||
- TRAEFIK_ENTRYPOINTS_WEBSECURE_ADDRESS=:443
|
||||
- TRAEFIK_CERTIFICATESRESOLVERS_LETSENCRYPT_ACME_EMAIL=your_email@aepif.ru
|
||||
```
|
||||
|
||||
## Безопасность конфигурации
|
||||
|
||||
### ⚠️ Проблемы безопасности в текущей конфигурации
|
||||
1. **Dashboard без аутентификации**: `--api.insecure=true` делает Dashboard доступным без авторизации
|
||||
2. **Docker socket**: Доступ к Docker API может быть использован для эскалации привилегий
|
||||
|
||||
### 🔒 Рекомендации по улучшению безопасности
|
||||
1. Убрать `--api.insecure=true` и настроить аутентификацию для Dashboard
|
||||
2. Добавить middleware для Dashboard:
|
||||
```yaml
|
||||
- traefik.http.routers.traefik.middlewares=authelia@docker
|
||||
```
|
||||
3. Использовать Docker socket proxy для ограничения доступа к Docker API
|
||||
|
||||
## Связанные файлы
|
||||
|
||||
- **[[Развертывание]]** - инструкции по первоначальной настройке
|
||||
- **[[Администрирование]]** - управление и мониторинг
|
||||
- **[[../Authelia Authentication/Конфигурации]]** - настройка middleware аутентификации
|
||||
239
⚙️ Техническое/🖥️ Серверы/Traefik Reverse Proxy/Обзор системы.md
Normal file
239
⚙️ Техническое/🖥️ Серверы/Traefik Reverse Proxy/Обзор системы.md
Normal file
@@ -0,0 +1,239 @@
|
||||
## Описание
|
||||
|
||||
Traefik Reverse Proxy - центральный компонент инфраструктуры aepif.ru, обеспечивающий маршрутизацию трафика, автоматические SSL сертификаты и интеграцию с системой аутентификации.
|
||||
|
||||
## Архитектура системы
|
||||
|
||||
```mermaid
|
||||
graph TB
|
||||
A[Internet] --> B[Traefik v3.0]
|
||||
B --> C[Second Mind - notes.aepif.ru]
|
||||
B --> D[Gitea - git.aepif.ru]
|
||||
B --> E[Authelia - auth.aepif.ru]
|
||||
B --> F[Webhook Service - webhook.aepif.ru]
|
||||
B --> G[Traefik Dashboard - traefik.aepif.ru]
|
||||
|
||||
H[Let's Encrypt] --> B
|
||||
I[Docker Socket] --> B
|
||||
|
||||
subgraph "SSL Certificates"
|
||||
H
|
||||
J[ACME Storage]
|
||||
end
|
||||
|
||||
subgraph "Service Discovery"
|
||||
I
|
||||
K[Docker Labels]
|
||||
end
|
||||
```
|
||||
|
||||
## Основные функции
|
||||
|
||||
### Reverse Proxy
|
||||
- **Назначение**: Централизованная точка входа для всех сервисов
|
||||
- **Технология**: Traefik v3.0
|
||||
- **Порты**:
|
||||
- 80 (HTTP) - автоматический редирект на HTTPS
|
||||
- 443 (HTTPS) - основной трафик
|
||||
- 8080 - Dashboard (небезопасен в production)
|
||||
- 2222 - SSH для Git-сервера
|
||||
|
||||
### SSL Management
|
||||
- **Let's Encrypt**: Автоматическое получение и обновление сертификатов
|
||||
- **ACME Challenge**: TLS challenge для валидации доменов
|
||||
- **Автоматический редирект**: HTTP → HTTPS для всех сервисов
|
||||
- **Хранение**: Персистентные сертификаты в volume
|
||||
|
||||
### Service Discovery
|
||||
- **Docker Integration**: Автоматическое обнаружение сервисов через Docker API
|
||||
- **Label-based Configuration**: Настройка маршрутизации через Docker labels
|
||||
- **Dynamic Configuration**: Изменения конфигурации без перезапуска
|
||||
|
||||
## Конфигурация
|
||||
|
||||
### Docker Compose
|
||||
Основная конфигурация в `/DOCKER/reverse-proxy/docker-compose.yml`:
|
||||
|
||||
```yaml
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v3.0
|
||||
command:
|
||||
- --api.dashboard=true
|
||||
- --providers.docker=true
|
||||
- --providers.docker.exposedbydefault=false
|
||||
- --entrypoints.web.address=:80
|
||||
- --entrypoints.websecure.address=:443
|
||||
- --entrypoints.ssh.address=:2222
|
||||
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "8080:8080"
|
||||
- "2222:2222"
|
||||
```
|
||||
|
||||
### Entrypoints
|
||||
- **web** (80): HTTP трафик с редиректом на HTTPS
|
||||
- **websecure** (443): HTTPS трафик
|
||||
- **ssh** (2222): TCP трафик для Git SSH
|
||||
|
||||
### Middlewares
|
||||
- **redirect-to-https**: Автоматический редирект HTTP → HTTPS
|
||||
- **authelia@docker**: Интеграция с Forward Auth
|
||||
|
||||
## Маршрутизация
|
||||
|
||||
### HTTP Routes
|
||||
| Домен | Сервис | Middleware | Порт |
|
||||
|-------|--------|------------|------|
|
||||
| `notes.aepif.ru` | Second Mind | authelia@docker | 80 |
|
||||
| `git.aepif.ru` | Gitea | - | 3000 |
|
||||
| `auth.aepif.ru` | Authelia | - | 9091 |
|
||||
| `webhook.aepif.ru` | Webhook Service | - | 3000 |
|
||||
| `traefik.aepif.ru` | Dashboard | - | api@internal |
|
||||
|
||||
### TCP Routes
|
||||
- **SSH Git Access**: `git.aepif.ru:2222` → Gitea container port 22
|
||||
|
||||
## Сетевая архитектура
|
||||
|
||||
### Proxy Network
|
||||
```yaml
|
||||
networks:
|
||||
proxy:
|
||||
name: proxy
|
||||
driver: bridge
|
||||
```
|
||||
|
||||
Все сервисы, которые должны быть доступны через Traefik, подключаются к сети `proxy`.
|
||||
|
||||
### Labels Configuration
|
||||
Пример конфигурации сервиса через labels:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.service.rule=Host(`service.aepif.ru`)
|
||||
- traefik.http.routers.service.tls.certresolver=letsencrypt
|
||||
- traefik.http.services.service.loadbalancer.server.port=80
|
||||
```
|
||||
|
||||
## SSL Сертификаты
|
||||
|
||||
### Let's Encrypt Integration
|
||||
- **Email**: `your_email@aepif.ru` для уведомлений
|
||||
- **Challenge Type**: TLS Challenge
|
||||
- **Storage**: `/data/acme.json` в контейнере
|
||||
- **Автоматическое обновление**: Traefik обновляет сертификаты автоматически
|
||||
|
||||
### Wildcard Certificates
|
||||
Для поддержки wildcard сертификатов потребуется DNS Challenge с API ключами DNS провайдера.
|
||||
|
||||
## Dashboard
|
||||
|
||||
### Доступ
|
||||
- **URL**: `https://traefik.aepif.ru`
|
||||
- **Порт**: 8080 (insecure mode)
|
||||
- **Функции**: Мониторинг роутеров, сервисов, middleware
|
||||
|
||||
### Безопасность
|
||||
⚠️ **Внимание**: Dashboard в текущей конфигурации доступен без аутентификации. В production рекомендуется:
|
||||
- Отключить insecure API (`--api.insecure=false`)
|
||||
- Добавить middleware для аутентификации
|
||||
- Ограничить доступ по IP
|
||||
|
||||
## Мониторинг
|
||||
|
||||
### Metrics
|
||||
- **Prometheus**: Встроенная поддержка метрик Prometheus
|
||||
- **Health Checks**: Автоматические проверки состояния backend сервисов
|
||||
- **Access Logs**: Детальные логи запросов
|
||||
|
||||
### Troubleshooting
|
||||
```bash
|
||||
# Проверка статуса Traefik
|
||||
curl -I https://traefik.aepif.ru
|
||||
|
||||
# Логи Traefik
|
||||
docker logs traefik -f
|
||||
|
||||
# Проверка конфигурации
|
||||
docker exec traefik traefik version
|
||||
```
|
||||
|
||||
## Безопасность
|
||||
|
||||
### TLS Configuration
|
||||
- **Минимальная версия**: TLS 1.2
|
||||
- **Cipher Suites**: Современные безопасные шифры
|
||||
- **HSTS**: HTTP Strict Transport Security headers
|
||||
|
||||
### Rate Limiting
|
||||
Можно настроить ограничение запросов через middleware:
|
||||
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.http.middlewares.ratelimit.ratelimit.burst=100
|
||||
- traefik.http.middlewares.ratelimit.ratelimit.average=50
|
||||
```
|
||||
|
||||
## Производительность
|
||||
|
||||
### Load Balancing
|
||||
- **Алгоритм**: Round Robin (по умолчанию)
|
||||
- **Health Checks**: Автоматическое исключение неисправных backend'ов
|
||||
- **Connection Pooling**: Переиспользование соединений
|
||||
|
||||
### Caching
|
||||
- **Static Content**: Заголовки кеширования для статических файлов
|
||||
- **Compression**: Автоматическое сжатие ответов
|
||||
|
||||
## Структура файлов
|
||||
|
||||
```
|
||||
/DOCKER/reverse-proxy/
|
||||
├── docker-compose.yml # Основная конфигурация Traefik
|
||||
└── volumes/
|
||||
└── traefik_data/ # ACME сертификаты и данные
|
||||
└── acme.json # Let's Encrypt сертификаты
|
||||
```
|
||||
|
||||
## Интеграции
|
||||
|
||||
### Docker Integration
|
||||
- **Automatic Service Discovery**: Обнаружение сервисов через Docker API
|
||||
- **Label-based Configuration**: Настройка через labels в docker-compose
|
||||
- **Hot Reload**: Изменения применяются без перезапуска
|
||||
|
||||
### Authelia Integration
|
||||
- **Forward Auth**: Интеграция с Authelia для централизованной аутентификации
|
||||
- **Headers**: Передача информации о пользователе в backend сервисы
|
||||
|
||||
## Backup и восстановление
|
||||
|
||||
### Критически важные данные
|
||||
- **acme.json**: SSL сертификаты Let's Encrypt
|
||||
- **docker-compose.yml**: Конфигурация сервиса
|
||||
- **traefik.yml**: Статическая конфигурация (если используется)
|
||||
|
||||
### Процедура backup
|
||||
```bash
|
||||
# Backup SSL сертификатов
|
||||
docker cp traefik:/data/acme.json ./backup/acme.json
|
||||
|
||||
# Backup всего volume
|
||||
docker run --rm -v traefik_data:/data -v $(pwd):/backup alpine tar czf /backup/traefik_data.tar.gz -C /data .
|
||||
```
|
||||
|
||||
## Связанные сервисы
|
||||
|
||||
- **[[Мой сервер/Authelia Authentication/Обзор системы|Authelia]]** - аутентификация через Forward Auth
|
||||
- **[[Мой сервер/Second Mind Setup/Обзор системы|Second Mind]]** - защищенный доступ к заметкам
|
||||
- **[[Мой сервер/Git Service/Обзор системы|Git Service]]** - HTTP и SSH доступ к Git
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- **[[Traefik Reverse Proxy - Конфигурации]]** - детальные настройки и параметры
|
||||
- **[[Traefik Reverse Proxy - Развертывание]]** - пошаговая установка
|
||||
- **[[Traefik Reverse Proxy - Администрирование]]** - обслуживание и мониторинг
|
||||
325
⚙️ Техническое/🖥️ Серверы/Traefik Reverse Proxy/Развертывание.md
Normal file
325
⚙️ Техническое/🖥️ Серверы/Traefik Reverse Proxy/Развертывание.md
Normal file
@@ -0,0 +1,325 @@
|
||||
# Traefik Reverse Proxy - Развертывание
|
||||
|
||||
← **[[Обзор системы|← Назад к обзору]]**
|
||||
|
||||
## Предварительные требования
|
||||
|
||||
### Системные требования
|
||||
- **Docker**: версия 20.10+
|
||||
- **Docker Compose**: версия 2.0+
|
||||
- **Операционная система**: Linux (Ubuntu 20.04+ рекомендуется)
|
||||
- **RAM**: минимум 512MB для Traefik
|
||||
- **Дисковое пространство**: 1GB для логов и SSL сертификатов
|
||||
|
||||
### Сетевые требования
|
||||
- **Публичный IP**: Для Let's Encrypt ACME challenge
|
||||
- **Открытые порты**: 80, 443, 2222 (для SSH Git), 8080 (Dashboard)
|
||||
- **Доступ к DNS**: Для настройки A-записей
|
||||
|
||||
### DNS настройка
|
||||
Перед развертыванием настройте DNS записи:
|
||||
|
||||
```bash
|
||||
# A записи для всех поддоменов
|
||||
traefik.aepif.ru IN A YOUR_SERVER_IP
|
||||
auth.aepif.ru IN A YOUR_SERVER_IP
|
||||
notes.aepif.ru IN A YOUR_SERVER_IP
|
||||
git.aepif.ru IN A YOUR_SERVER_IP
|
||||
webhook.aepif.ru IN A YOUR_SERVER_IP
|
||||
```
|
||||
|
||||
## Создание сети proxy
|
||||
|
||||
### Шаг 1: Создание Docker network
|
||||
```bash
|
||||
# Создаем external сеть для всех сервисов
|
||||
docker network create proxy
|
||||
|
||||
# Проверяем создание
|
||||
docker network ls | grep proxy
|
||||
```
|
||||
|
||||
### Важность proxy сети
|
||||
Сеть `proxy` позволяет:
|
||||
- Изолировать веб-трафик от внутренних сетей
|
||||
- Автоматически подключать сервисы к Traefik
|
||||
- Обеспечить безопасность через сегментацию сети
|
||||
|
||||
## Подготовка файлов
|
||||
|
||||
### Шаг 2: Создание директории
|
||||
```bash
|
||||
# Создаем рабочую директорию
|
||||
mkdir -p /docker/reverse-proxy
|
||||
cd /docker/reverse-proxy
|
||||
```
|
||||
|
||||
### Шаг 3: Создание docker-compose.yml
|
||||
```yaml
|
||||
version: '3.8'
|
||||
services:
|
||||
traefik:
|
||||
image: traefik:v3.0
|
||||
container_name: traefik
|
||||
command:
|
||||
# API и Dashboard
|
||||
- --api.dashboard=true
|
||||
- --api.insecure=true
|
||||
|
||||
# Docker Provider
|
||||
- --providers.docker=true
|
||||
- --providers.docker.exposedbydefault=false
|
||||
- --providers.docker.network=proxy
|
||||
|
||||
# Entrypoints
|
||||
- --entrypoints.web.address=:80
|
||||
- --entrypoints.websecure.address=:443
|
||||
- --entrypoints.ssh.address=:2222
|
||||
|
||||
# SSL Configuration - ЗАМЕНИТЕ EMAIL!
|
||||
- --certificatesresolvers.letsencrypt.acme.email=YOUR_EMAIL@domain.com
|
||||
- --certificatesresolvers.letsencrypt.acme.storage=/data/acme.json
|
||||
- --certificatesresolvers.letsencrypt.acme.tlschallenge=true
|
||||
|
||||
# Logging
|
||||
- --log.level=INFO
|
||||
- --accesslog=true
|
||||
|
||||
ports:
|
||||
- "80:80"
|
||||
- "443:443"
|
||||
- "8080:8080"
|
||||
- "2222:2222"
|
||||
|
||||
volumes:
|
||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||
- traefik_data:/data
|
||||
|
||||
networks:
|
||||
- proxy
|
||||
|
||||
labels:
|
||||
- traefik.enable=true
|
||||
- traefik.http.routers.traefik.rule=Host(`traefik.aepif.ru`)
|
||||
- traefik.http.routers.traefik.tls.certresolver=letsencrypt
|
||||
- traefik.http.routers.traefik.service=api@internal
|
||||
|
||||
# Global HTTP to HTTPS redirect
|
||||
- traefik.http.routers.http-catchall.rule=hostregexp(`{host:.+}`)
|
||||
- traefik.http.routers.http-catchall.entrypoints=web
|
||||
- traefik.http.routers.http-catchall.middlewares=redirect-to-https
|
||||
- traefik.http.middlewares.redirect-to-https.redirectscheme.scheme=https
|
||||
|
||||
restart: unless-stopped
|
||||
|
||||
volumes:
|
||||
traefik_data:
|
||||
|
||||
networks:
|
||||
proxy:
|
||||
external: true
|
||||
```
|
||||
|
||||
**⚠️ Важно**: Замените `YOUR_EMAIL@domain.com` на свой email адрес!
|
||||
|
||||
## Первый запуск
|
||||
|
||||
### Шаг 4: Запуск Traefik
|
||||
```bash
|
||||
# Переходим в директорию с конфигурацией
|
||||
cd /docker/reverse-proxy
|
||||
|
||||
# Запускаем в detached режиме
|
||||
docker-compose up -d
|
||||
|
||||
# Проверяем статус
|
||||
docker-compose ps
|
||||
```
|
||||
|
||||
### Шаг 5: Проверка логов
|
||||
```bash
|
||||
# Смотрим логи запуска
|
||||
docker-compose logs -f traefik
|
||||
|
||||
# Должны увидеть сообщения о:
|
||||
# - Создании routers и services
|
||||
# - Успешном запуске API
|
||||
# - Подключении к Docker provider
|
||||
```
|
||||
|
||||
## Проверка работоспособности
|
||||
|
||||
### Шаг 6: Тестирование Dashboard
|
||||
```bash
|
||||
# Проверяем доступность Dashboard
|
||||
curl -I http://YOUR_SERVER_IP:8080
|
||||
|
||||
# Проверяем HTTPS редирект
|
||||
curl -I http://traefik.aepif.ru
|
||||
# Должен вернуть 301/302 редирект на HTTPS
|
||||
```
|
||||
|
||||
### Шаг 7: Проверка SSL сертификатов
|
||||
```bash
|
||||
# Проверяем получение SSL сертификата
|
||||
curl -I https://traefik.aepif.ru
|
||||
|
||||
# Проверяем детали сертификата
|
||||
openssl s_client -connect traefik.aepif.ru:443 -servername traefik.aepif.ru | openssl x509 -noout -text
|
||||
```
|
||||
|
||||
## Настройка firewall
|
||||
|
||||
### Шаг 8: Конфигурация UFW (Ubuntu)
|
||||
```bash
|
||||
# Разрешаем необходимые порты
|
||||
sudo ufw allow 22/tcp # SSH
|
||||
sudo ufw allow 80/tcp # HTTP
|
||||
sudo ufw allow 443/tcp # HTTPS
|
||||
sudo ufw allow 2222/tcp # Git SSH
|
||||
sudo ufw allow 8080/tcp # Dashboard (временно)
|
||||
|
||||
# Включаем firewall
|
||||
sudo ufw enable
|
||||
|
||||
# Проверяем статус
|
||||
sudo ufw status
|
||||
```
|
||||
|
||||
## Мониторинг и диагностика
|
||||
|
||||
### Проверка состояния
|
||||
```bash
|
||||
# Статус контейнера
|
||||
docker ps | grep traefik
|
||||
|
||||
# Использование ресурсов
|
||||
docker stats traefik --no-stream
|
||||
|
||||
# Логи в реальном времени
|
||||
docker logs traefik -f
|
||||
```
|
||||
|
||||
### Dashboard интерфейс
|
||||
- **URL**: http://YOUR_SERVER_IP:8080 или https://traefik.aepif.ru
|
||||
- **Разделы**:
|
||||
- **HTTP Routers**: Настроенные маршруты
|
||||
- **HTTP Services**: Backend сервисы
|
||||
- **HTTP Middlewares**: Промежуточное ПО
|
||||
- **TLS**: SSL сертификаты
|
||||
|
||||
## Устранение проблем
|
||||
|
||||
### Проблема: Сертификат не получается
|
||||
```bash
|
||||
# Проверяем DNS записи
|
||||
nslookup traefik.aepif.ru
|
||||
|
||||
# Проверяем доступность порта 443 извне
|
||||
telnet YOUR_SERVER_IP 443
|
||||
|
||||
# Смотрим логи ACME
|
||||
docker logs traefik | grep acme
|
||||
```
|
||||
|
||||
### Проблема: Dashboard недоступен
|
||||
```bash
|
||||
# Проверяем, что контейнер запущен
|
||||
docker ps | grep traefik
|
||||
|
||||
# Проверяем порт
|
||||
netstat -tulpn | grep :8080
|
||||
|
||||
# Проверяем логи
|
||||
docker logs traefik --tail 50
|
||||
```
|
||||
|
||||
### Проблема: Сервисы не обнаруживаются
|
||||
```bash
|
||||
# Проверяем сеть proxy
|
||||
docker network inspect proxy
|
||||
|
||||
# Проверяем подключение Traefik к Docker socket
|
||||
docker logs traefik | grep docker
|
||||
|
||||
# Проверяем labels сервисов
|
||||
docker inspect SERVICE_CONTAINER | grep -A 10 Labels
|
||||
```
|
||||
|
||||
## Безопасность после установки
|
||||
|
||||
### Рекомендации по безопасности
|
||||
1. **Закрыть порт 8080**: Настроить аутентификацию для Dashboard
|
||||
2. **Ограничить доступ к Docker socket**: Использовать Docker socket proxy
|
||||
3. **Настроить логирование**: Централизованный сбор логов
|
||||
4. **Мониторинг**: Настроить алерты на проблемы с сертификатами
|
||||
|
||||
### Закрытие небезопасного Dashboard
|
||||
После настройки всех сервисов, отредактируйте docker-compose.yml:
|
||||
|
||||
```yaml
|
||||
command:
|
||||
- --api.dashboard=true
|
||||
# Убираем эту строку:
|
||||
# - --api.insecure=true
|
||||
```
|
||||
|
||||
И добавьте middleware для аутентификации:
|
||||
```yaml
|
||||
labels:
|
||||
- traefik.http.routers.traefik.middlewares=authelia@docker
|
||||
```
|
||||
|
||||
## Следующие шаги
|
||||
|
||||
После успешного развертывания Traefik:
|
||||
|
||||
1. **[[../Authelia Authentication/Развертывание]]** - Настройка аутентификации
|
||||
2. **[[../Git Service/Развертывание]]** - Развертывание Git сервера
|
||||
3. **[[../Second Mind Setup/Развертывание]]** - Настройка системы заметок
|
||||
4. **[[Администрирование]]** - Ежедневное управление
|
||||
|
||||
## Автоматизация развертывания
|
||||
|
||||
### Скрипт развертывания
|
||||
```bash
|
||||
#!/bin/bash
|
||||
# deploy-traefik.sh
|
||||
|
||||
set -e
|
||||
|
||||
echo "🚀 Развертывание Traefik Reverse Proxy"
|
||||
|
||||
# Проверяем Docker
|
||||
if ! command -v docker &> /dev/null; then
|
||||
echo "❌ Docker не установлен"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Создаем сеть
|
||||
docker network create proxy 2>/dev/null || echo "Сеть proxy уже существует"
|
||||
|
||||
# Создаем директорию
|
||||
mkdir -p /docker/reverse-proxy
|
||||
cd /docker/reverse-proxy
|
||||
|
||||
# Запрашиваем email
|
||||
read -p "📧 Введите email для Let's Encrypt: " ACME_EMAIL
|
||||
|
||||
# Создаем docker-compose.yml с введенным email
|
||||
cat > docker-compose.yml << EOF
|
||||
# Вставляем конфигурацию с заменой email
|
||||
EOF
|
||||
|
||||
# Запускаем
|
||||
docker-compose up -d
|
||||
|
||||
echo "✅ Traefik развернут успешно"
|
||||
echo "🌐 Dashboard: http://$(curl -s ipinfo.io/ip):8080"
|
||||
```
|
||||
|
||||
## Связанные документы
|
||||
|
||||
- **[[Конфигурации]]** - детальные настройки конфигурации
|
||||
- **[[Администрирование]]** - управление и мониторинг
|
||||
- **[[../Authelia Authentication/Развертывание]]** - следующий шаг развертывания
|
||||
Reference in New Issue
Block a user