vault backup: 2025-08-04 16:12:28

This commit is contained in:
Andrey Epifancev
2025-08-04 16:12:28 +04:00
parent 5d14b6031b
commit 75ea95fe6f
5 changed files with 1340 additions and 60 deletions

View File

@@ -1,26 +1,255 @@
# Traefik Reverse Proxy - Конфигурации
## Детальные настройки конфигурации Traefik
*Документация будет дополнена деталями конфигурации*
**[[Обзор системы|← Назад к обзору]]**
## Docker Compose конфигурация
*Разбор всех параметров docker-compose.yml*
## Command Line Arguments
*Детальное описание всех флагов запуска*
### Основной файл: `/DOCKER/reverse-proxy/docker-compose.yml`
## Static Configuration
*Настройки, которые не изменяются во время выполнения*
```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
## Dynamic Configuration
*Конфигурация через Docker labels*
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
*Конфигурация middleware для различных задач*
---
*Эта страница находится в разработке*
### 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 аутентификации

View File

@@ -1,26 +1,325 @@
# Traefik Reverse Proxy - Развертывание
## Пошаговая установка Traefik
*Документация будет дополнена инструкциями по развертыванию*
**[[Обзор системы|← Назад к обзору]]**
## Предварительные требования
*Системные требования и зависимости*
### Системные требования
- **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
*Настройка Docker network*
## Конфигурация Docker Compose
*Подготовка файлов конфигурации*
### Шаг 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 адрес!
## Первый запуск
*Процедура начального запуска*
## Настройка DNS
*Настройка доменных записей*
### Шаг 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/Развертывание]]** - следующий шаг развертывания