vault backup: 2025-08-04 16:12:28
This commit is contained in:
@@ -1,29 +1,407 @@
|
|||||||
# Authelia Authentication - Конфигурации
|
# Authelia Authentication - Конфигурации
|
||||||
|
|
||||||
## Детальные настройки конфигурации Authelia
|
← **[[Обзор системы|← Назад к обзору]]**
|
||||||
|
|
||||||
*Документация будет дополнена деталями конфигурации*
|
|
||||||
|
|
||||||
## Docker Compose конфигурация
|
## Docker Compose конфигурация
|
||||||
*Настройки контейнеров Authelia и Redis*
|
|
||||||
|
### Основной файл: `/DOCKER/auth/docker-compose.yml`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
container_name: auth_redis
|
||||||
|
volumes:
|
||||||
|
- redis_data:/data
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
command: redis-server --requirepass Ll8qlQ3rgBFo4Syq
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
authelia:
|
||||||
|
image: authelia/authelia:latest
|
||||||
|
container_name: authelia
|
||||||
|
depends_on:
|
||||||
|
- redis
|
||||||
|
volumes:
|
||||||
|
- ./authelia:/config
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- proxy
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.authelia.rule=Host(`auth.aepif.ru`)
|
||||||
|
- traefik.http.routers.authelia.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.services.authelia.loadbalancer.server.port=9091
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.aepif.ru
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email
|
||||||
|
restart: unless-stopped
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Moscow
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
redis_data:
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
## Основной файл configuration.yml
|
## Основной файл configuration.yml
|
||||||
*Разбор всех параметров конфигурации*
|
|
||||||
|
|
||||||
## User Database
|
### Полная конфигурация: `/DOCKER/auth/authelia/configuration.yml`
|
||||||
*Управление файлом users_database.yml*
|
|
||||||
|
```yaml
|
||||||
|
---
|
||||||
|
theme: auto
|
||||||
|
jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
|
||||||
|
default_redirection_url: https://notes.aepif.ru
|
||||||
|
|
||||||
|
server:
|
||||||
|
host: 0.0.0.0
|
||||||
|
port: 9091
|
||||||
|
|
||||||
|
log:
|
||||||
|
level: info
|
||||||
|
|
||||||
|
totp:
|
||||||
|
issuer: aepif.ru
|
||||||
|
|
||||||
|
authentication_backend:
|
||||||
|
file:
|
||||||
|
path: /config/users_database.yml
|
||||||
|
|
||||||
|
access_control:
|
||||||
|
default_policy: deny
|
||||||
|
rules:
|
||||||
|
- domain: notes.aepif.ru
|
||||||
|
policy: one_factor
|
||||||
|
- domain: git.aepif.ru
|
||||||
|
policy: bypass
|
||||||
|
- domain: webhook.aepif.ru
|
||||||
|
policy: bypass
|
||||||
|
- domain: auth.aepif.ru
|
||||||
|
policy: bypass
|
||||||
|
|
||||||
|
session:
|
||||||
|
name: authelia_session
|
||||||
|
domain: aepif.ru
|
||||||
|
secret: 91Zc/PM0EogwZbsX0tsDGLpr4Wg7zwtQUzcp5tYP5dNdRNTlpkXBfJr9EivuD+A4
|
||||||
|
expiration: 1h
|
||||||
|
inactivity: 5m
|
||||||
|
redis:
|
||||||
|
host: redis
|
||||||
|
port: 6379
|
||||||
|
password: Ll8qlQ3rgBFo4Syq
|
||||||
|
|
||||||
|
regulation:
|
||||||
|
max_retries: 3
|
||||||
|
find_time: 2m
|
||||||
|
ban_time: 5m
|
||||||
|
|
||||||
|
storage:
|
||||||
|
encryption_key: sWLemnH0QNsYsYvbav59mQOWxLOeUvSl
|
||||||
|
local:
|
||||||
|
path: /config/db.sqlite3
|
||||||
|
|
||||||
|
notifier:
|
||||||
|
filesystem:
|
||||||
|
filename: /config/notification.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### Разбор конфигурации по разделам
|
||||||
|
|
||||||
|
#### Server Configuration
|
||||||
|
```yaml
|
||||||
|
server:
|
||||||
|
host: 0.0.0.0 # Слушать на всех интерфейсах
|
||||||
|
port: 9091 # Внутренний порт контейнера
|
||||||
|
```
|
||||||
|
|
||||||
|
#### JWT и безопасность
|
||||||
|
```yaml
|
||||||
|
jwt_secret: 4odTQ0TqW2Ej8m8Cm3K6Wn3VTvg09Mb2Yi4CUzuIPUsHB3fpF54+NbIAqo6+CREA
|
||||||
|
default_redirection_url: https://notes.aepif.ru
|
||||||
|
theme: auto # Автоматическая тема (dark/light)
|
||||||
|
```
|
||||||
|
|
||||||
|
#### Logging
|
||||||
|
```yaml
|
||||||
|
log:
|
||||||
|
level: info # Уровни: trace, debug, info, warn, error
|
||||||
|
```
|
||||||
|
|
||||||
|
## User Database Configuration
|
||||||
|
|
||||||
|
### Файл пользователей: `/DOCKER/auth/authelia/users_database.yml`
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
users:
|
||||||
|
admin:
|
||||||
|
displayname: "Administrator"
|
||||||
|
password: "$argon2id$v=19$m=65536,t=3,p=4$..." # Argon2id hash
|
||||||
|
email: epifantsev1aa@gmail.com
|
||||||
|
groups:
|
||||||
|
- admins
|
||||||
|
- users
|
||||||
|
```
|
||||||
|
|
||||||
|
### Генерация паролей
|
||||||
|
```bash
|
||||||
|
# Использование authelia для генерации хеша пароля
|
||||||
|
docker run --rm authelia/authelia:latest authelia crypto hash generate argon2 --password 'your_password'
|
||||||
|
|
||||||
|
# Результат вставляется в users_database.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
### Структура пользователей
|
||||||
|
- **displayname**: Отображаемое имя пользователя
|
||||||
|
- **password**: Argon2id хеш пароля
|
||||||
|
- **email**: Email для уведомлений и 2FA
|
||||||
|
- **groups**: Массив групп для контроля доступа
|
||||||
|
|
||||||
## Access Control Rules
|
## Access Control Rules
|
||||||
*Детальная настройка политик доступа*
|
|
||||||
|
### Политики доступа
|
||||||
|
```yaml
|
||||||
|
access_control:
|
||||||
|
default_policy: deny # По умолчанию запрещено
|
||||||
|
rules:
|
||||||
|
- domain: notes.aepif.ru
|
||||||
|
policy: one_factor # Требует логин + пароль
|
||||||
|
- domain: git.aepif.ru
|
||||||
|
policy: bypass # Без проверки Authelia
|
||||||
|
- domain: webhook.aepif.ru
|
||||||
|
policy: bypass # API сервис
|
||||||
|
- domain: auth.aepif.ru
|
||||||
|
policy: bypass # Сама страница входа
|
||||||
|
```
|
||||||
|
|
||||||
|
### Типы политик
|
||||||
|
- **deny**: Полный запрет доступа
|
||||||
|
- **bypass**: Доступ без аутентификации через Authelia
|
||||||
|
- **one_factor**: Только логин + пароль
|
||||||
|
- **two_factor**: Логин + пароль + TOTP
|
||||||
|
|
||||||
|
### Расширенные правила доступа
|
||||||
|
```yaml
|
||||||
|
# Пример дополнительных правил
|
||||||
|
access_control:
|
||||||
|
rules:
|
||||||
|
# Ограничение по группам
|
||||||
|
- domain: admin.aepif.ru
|
||||||
|
policy: two_factor
|
||||||
|
subject: "group:admins"
|
||||||
|
|
||||||
|
# Ограничение по пользователям
|
||||||
|
- domain: private.aepif.ru
|
||||||
|
policy: one_factor
|
||||||
|
subject: "user:admin"
|
||||||
|
|
||||||
|
# Ограничение по IP/сети
|
||||||
|
- domain: internal.aepif.ru
|
||||||
|
policy: one_factor
|
||||||
|
networks:
|
||||||
|
- "192.168.1.0/24"
|
||||||
|
|
||||||
|
# Ограничение по методам HTTP
|
||||||
|
- domain: api.aepif.ru
|
||||||
|
policy: one_factor
|
||||||
|
methods:
|
||||||
|
- "GET"
|
||||||
|
- "POST"
|
||||||
|
```
|
||||||
|
|
||||||
## Session Configuration
|
## Session Configuration
|
||||||
*Настройки сессий и Redis интеграции*
|
|
||||||
|
### Настройки сессий
|
||||||
|
```yaml
|
||||||
|
session:
|
||||||
|
name: authelia_session # Имя cookie
|
||||||
|
domain: aepif.ru # Домен для cookie (все поддомены)
|
||||||
|
secret: 91Zc/PM0EogwZbsX0tsDGLpr4Wg7zwtQUzcp5tYP5dNdRNTlpkXBfJr9EivuD+A4
|
||||||
|
expiration: 1h # Время жизни сессии
|
||||||
|
inactivity: 5m # Время неактивности до выхода
|
||||||
|
|
||||||
|
redis:
|
||||||
|
host: redis # Хост Redis контейнера
|
||||||
|
port: 6379 # Порт Redis
|
||||||
|
password: Ll8qlQ3rgBFo4Syq # Пароль Redis
|
||||||
|
```
|
||||||
|
|
||||||
|
### Дополнительные настройки сессий
|
||||||
|
```yaml
|
||||||
|
session:
|
||||||
|
# Дополнительные опции безопасности
|
||||||
|
same_site: lax # Политика SameSite cookie
|
||||||
|
secure: true # Только HTTPS (автоматически в production)
|
||||||
|
remember_me_duration: 1M # Время "запомнить меня"
|
||||||
|
```
|
||||||
|
|
||||||
## TOTP Configuration
|
## TOTP Configuration
|
||||||
*Конфигурация двухфакторной аутентификации*
|
|
||||||
|
|
||||||
## Notifier Settings
|
### Двухфакторная аутентификация
|
||||||
*Настройка уведомлений*
|
```yaml
|
||||||
|
totp:
|
||||||
|
issuer: aepif.ru # Отображается в приложении аутентификации
|
||||||
|
algorithm: sha1 # sha1, sha256, sha512
|
||||||
|
digits: 6 # Количество цифр в коде
|
||||||
|
period: 30 # Период действия кода в секундах
|
||||||
|
skew: 1 # Допуск на рассинхронизацию времени
|
||||||
|
```
|
||||||
|
|
||||||
---
|
### Поддерживаемые приложения
|
||||||
*Эта страница находится в разработке*
|
- Google Authenticator
|
||||||
|
- Authy
|
||||||
|
- Microsoft Authenticator
|
||||||
|
- 1Password
|
||||||
|
- Bitwarden
|
||||||
|
|
||||||
|
## Redis Configuration
|
||||||
|
|
||||||
|
### Настройки Redis контейнера
|
||||||
|
```yaml
|
||||||
|
redis:
|
||||||
|
image: redis:7-alpine
|
||||||
|
command: redis-server --requirepass Ll8qlQ3rgBFo4Syq
|
||||||
|
volumes:
|
||||||
|
- redis_data:/data # Персистентное хранение
|
||||||
|
```
|
||||||
|
|
||||||
|
### Дополнительные настройки Redis
|
||||||
|
```yaml
|
||||||
|
# В configuration.yml для дополнительных опций Redis
|
||||||
|
session:
|
||||||
|
redis:
|
||||||
|
host: redis
|
||||||
|
port: 6379
|
||||||
|
password: Ll8qlQ3rgBFo4Syq
|
||||||
|
database_index: 0 # Номер базы данных
|
||||||
|
maximum_active_connections: 8
|
||||||
|
minimum_idle_connections: 0
|
||||||
|
```
|
||||||
|
|
||||||
|
## Regulation (Rate Limiting)
|
||||||
|
|
||||||
|
### Защита от брутфорса
|
||||||
|
```yaml
|
||||||
|
regulation:
|
||||||
|
max_retries: 3 # Максимум попыток входа
|
||||||
|
find_time: 2m # Временное окно для подсчета попыток
|
||||||
|
ban_time: 5m # Время блокировки после превышения лимита
|
||||||
|
```
|
||||||
|
|
||||||
|
### Расширенная конфигурация
|
||||||
|
```yaml
|
||||||
|
regulation:
|
||||||
|
max_retries: 3
|
||||||
|
find_time: 2m
|
||||||
|
ban_time: 5m
|
||||||
|
|
||||||
|
# Дополнительные настройки
|
||||||
|
bantime_multiplier: 2 # Увеличение времени блокировки при повторных нарушениях
|
||||||
|
cleanup_interval: 1h # Интервал очистки старых записей
|
||||||
|
```
|
||||||
|
|
||||||
|
## Storage Configuration
|
||||||
|
|
||||||
|
### Локальное хранилище
|
||||||
|
```yaml
|
||||||
|
storage:
|
||||||
|
encryption_key: sWLemnH0QNsYsYvbav59mQOWxLOeUvSl
|
||||||
|
local:
|
||||||
|
path: /config/db.sqlite3
|
||||||
|
```
|
||||||
|
|
||||||
|
### База данных содержит
|
||||||
|
- TOTP секреты пользователей
|
||||||
|
- U2F/WebAuthn данные
|
||||||
|
- Статистика авторизации
|
||||||
|
- Конфигурация двухфакторной аутентификации
|
||||||
|
|
||||||
|
## Notifier Configuration
|
||||||
|
|
||||||
|
### Файловые уведомления
|
||||||
|
```yaml
|
||||||
|
notifier:
|
||||||
|
filesystem:
|
||||||
|
filename: /config/notification.txt
|
||||||
|
```
|
||||||
|
|
||||||
|
### SMTP уведомления (альтернатива)
|
||||||
|
```yaml
|
||||||
|
notifier:
|
||||||
|
smtp:
|
||||||
|
username: your_email@gmail.com
|
||||||
|
password: your_app_password
|
||||||
|
host: smtp.gmail.com
|
||||||
|
port: 587
|
||||||
|
sender: your_email@gmail.com
|
||||||
|
startup_check_address: your_email@gmail.com
|
||||||
|
disable_require_tls: false
|
||||||
|
disable_html_emails: false
|
||||||
|
|
||||||
|
subject: "[Authelia] {title}"
|
||||||
|
templates_path: /config/templates
|
||||||
|
```
|
||||||
|
|
||||||
|
## Traefik Integration Labels
|
||||||
|
|
||||||
|
### Forward Auth Middleware
|
||||||
|
```yaml
|
||||||
|
labels:
|
||||||
|
# Основная конфигурация middleware
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.address=http://authelia:9091/api/verify?rd=https://auth.aepif.ru
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.trustForwardHeader=true
|
||||||
|
- traefik.http.middlewares.authelia.forwardauth.authResponseHeaders=Remote-User,Remote-Groups,Remote-Name,Remote-Email
|
||||||
|
```
|
||||||
|
|
||||||
|
### Применение к сервисам
|
||||||
|
```yaml
|
||||||
|
# Для защищенного сервиса
|
||||||
|
labels:
|
||||||
|
- traefik.http.routers.protected-service.middlewares=authelia@docker
|
||||||
|
```
|
||||||
|
|
||||||
|
## Environment Variables
|
||||||
|
|
||||||
|
### Переменные окружения
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- TZ=Europe/Moscow # Часовой пояс
|
||||||
|
- AUTHELIA_JWT_SECRET_FILE=/run/secrets/jwt_secret # Секреты через файлы
|
||||||
|
- AUTHELIA_SESSION_SECRET_FILE=/run/secrets/session_secret
|
||||||
|
```
|
||||||
|
|
||||||
|
## Безопасность конфигурации
|
||||||
|
|
||||||
|
### Генерация секретов
|
||||||
|
```bash
|
||||||
|
# Генерация случайных секретов
|
||||||
|
openssl rand -base64 64 # Для JWT и session secrets
|
||||||
|
openssl rand -hex 32 # Для encryption key
|
||||||
|
```
|
||||||
|
|
||||||
|
### Рекомендации по безопасности
|
||||||
|
1. **Используйте сильные пароли**: Все секреты должны быть случайными
|
||||||
|
2. **Ротация секретов**: Регулярно обновляйте JWT и session секреты
|
||||||
|
3. **Ограничьте доступ к файлам**: Конфигурационные файлы должны быть доступны только контейнеру
|
||||||
|
4. **Мониторинг попыток входа**: Настройте алерты на подозрительную активность
|
||||||
|
|
||||||
|
### Защита конфигурационных файлов
|
||||||
|
```bash
|
||||||
|
# Правильные права доступа
|
||||||
|
chmod 600 /DOCKER/auth/authelia/configuration.yml
|
||||||
|
chmod 600 /DOCKER/auth/authelia/users_database.yml
|
||||||
|
chown root:root /DOCKER/auth/authelia/*.yml
|
||||||
|
```
|
||||||
|
|
||||||
|
## Связанные файлы
|
||||||
|
|
||||||
|
- **[[Развертывание]]** - инструкции по установке и настройке
|
||||||
|
- **[[Администрирование]]** - управление пользователями и мониторинг
|
||||||
|
- **[[../Traefik Reverse Proxy/Конфигурации]]** - интеграция с reverse proxy
|
||||||
@@ -1,37 +1,409 @@
|
|||||||
# Git Service - Конфигурации
|
# Git Service - Конфигурации
|
||||||
|
|
||||||
## Обзор конфигураций
|
← **[[Обзор системы|← Назад к обзору]]**
|
||||||
|
|
||||||
Этот документ содержит детальную информацию о настройках всех компонентов Git Service.
|
|
||||||
|
|
||||||
## Docker Compose конфигурация
|
## Docker Compose конфигурация
|
||||||
|
|
||||||
### Основной файл: `/DOCKER/git/docker-compose.yml`
|
### Основной файл: `/DOCKER/git/docker-compose.yml`
|
||||||
|
|
||||||
*Документация будет дополнена с деталями конфигурации*
|
```yaml
|
||||||
|
version: '3.8'
|
||||||
|
services:
|
||||||
|
gitea:
|
||||||
|
image: gitea/gitea:latest
|
||||||
|
container_name: gitea
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
- GITEA__database__DB_TYPE=postgres
|
||||||
|
- GITEA__database__HOST=db:5432
|
||||||
|
- GITEA__database__NAME=gitea
|
||||||
|
- GITEA__database__USER=gitea
|
||||||
|
- GITEA__database__PASSWORD=sG7hZXBQDAtRab9A
|
||||||
|
- GITEA__server__SSH_DOMAIN=git.aepif.ru
|
||||||
|
- GITEA__server__SSH_PORT=2222
|
||||||
|
volumes:
|
||||||
|
- gitea_data:/data
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
- proxy
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
# HTTP routing
|
||||||
|
- traefik.http.routers.gitea.rule=Host(`git.aepif.ru`)
|
||||||
|
- traefik.http.routers.gitea.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.services.gitea.loadbalancer.server.port=3000
|
||||||
|
# TCP routing for SSH
|
||||||
|
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
|
||||||
|
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
|
||||||
|
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
db:
|
||||||
|
image: postgres:14
|
||||||
|
container_name: gitea_db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=gitea
|
||||||
|
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A
|
||||||
|
- POSTGRES_DB=gitea
|
||||||
|
volumes:
|
||||||
|
- postgres_data:/var/lib/postgresql/data
|
||||||
|
networks:
|
||||||
|
- default
|
||||||
|
restart: unless-stopped
|
||||||
|
|
||||||
|
volumes:
|
||||||
|
gitea_data:
|
||||||
|
external: true
|
||||||
|
name: gitea_gitea_data
|
||||||
|
postgres_data:
|
||||||
|
external: true
|
||||||
|
name: gitea_postgres_data
|
||||||
|
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true
|
||||||
|
default:
|
||||||
|
driver: bridge
|
||||||
|
```
|
||||||
|
|
||||||
## Gitea конфигурация
|
## Gitea конфигурация
|
||||||
|
|
||||||
### Переменные окружения
|
### Environment Variables
|
||||||
*Настройки Gitea через environment variables*
|
```yaml
|
||||||
|
environment:
|
||||||
|
# User Configuration
|
||||||
|
- USER_UID=1000 # UID пользователя в контейнере
|
||||||
|
- USER_GID=1000 # GID пользователя в контейнере
|
||||||
|
|
||||||
### Базовые настройки
|
# Database Configuration
|
||||||
*Конфигурация через app.ini*
|
- GITEA__database__DB_TYPE=postgres
|
||||||
|
- GITEA__database__HOST=db:5432
|
||||||
|
- GITEA__database__NAME=gitea
|
||||||
|
- GITEA__database__USER=gitea
|
||||||
|
- GITEA__database__PASSWORD=sG7hZXBQDAtRab9A
|
||||||
|
|
||||||
|
# Server Configuration
|
||||||
|
- GITEA__server__SSH_DOMAIN=git.aepif.ru
|
||||||
|
- GITEA__server__SSH_PORT=2222
|
||||||
|
```
|
||||||
|
|
||||||
|
### Расширенные настройки через переменные окружения
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
# Server Settings
|
||||||
|
- GITEA__server__DOMAIN=git.aepif.ru
|
||||||
|
- GITEA__server__ROOT_URL=https://git.aepif.ru
|
||||||
|
- GITEA__server__DISABLE_SSH=false
|
||||||
|
- GITEA__server__START_SSH_SERVER=true
|
||||||
|
- GITEA__server__SSH_PORT=22 # Внутренний SSH порт
|
||||||
|
- GITEA__server__SSH_LISTEN_PORT=22 # Порт прослушивания в контейнере
|
||||||
|
|
||||||
|
# Security Settings
|
||||||
|
- GITEA__security__INSTALL_LOCK=true
|
||||||
|
- GITEA__security__SECRET_KEY=your_secret_key_here
|
||||||
|
|
||||||
|
# Service Settings
|
||||||
|
- GITEA__service__DISABLE_REGISTRATION=true
|
||||||
|
- GITEA__service__REQUIRE_SIGNIN_VIEW=false
|
||||||
|
- GITEA__service__ENABLE_NOTIFY_MAIL=false
|
||||||
|
|
||||||
|
# Repository Settings
|
||||||
|
- GITEA__repository__DEFAULT_BRANCH=main
|
||||||
|
- GITEA__repository__ENABLE_PUSH_CREATE_USER=true
|
||||||
|
- GITEA__repository__ENABLE_PUSH_CREATE_ORG=false
|
||||||
|
|
||||||
|
# Webhook Settings
|
||||||
|
- GITEA__webhook__ALLOWED_HOST_LIST=*
|
||||||
|
- GITEA__webhook__SKIP_TLS_VERIFY=false
|
||||||
|
```
|
||||||
|
|
||||||
|
### Структура конфигурации app.ini
|
||||||
|
Gitea также поддерживает конфигурацию через файл `app.ini`:
|
||||||
|
|
||||||
|
```ini
|
||||||
|
# /data/gitea/conf/app.ini внутри контейнера
|
||||||
|
[database]
|
||||||
|
DB_TYPE = postgres
|
||||||
|
HOST = db:5432
|
||||||
|
NAME = gitea
|
||||||
|
USER = gitea
|
||||||
|
PASSWD = sG7hZXBQDAtRab9A
|
||||||
|
SSL_MODE = disable
|
||||||
|
|
||||||
|
[server]
|
||||||
|
DOMAIN = git.aepif.ru
|
||||||
|
HTTP_PORT = 3000
|
||||||
|
ROOT_URL = https://git.aepif.ru/
|
||||||
|
DISABLE_SSH = false
|
||||||
|
SSH_DOMAIN = git.aepif.ru
|
||||||
|
SSH_PORT = 2222
|
||||||
|
START_SSH_SERVER = true
|
||||||
|
SSH_LISTEN_PORT = 22
|
||||||
|
|
||||||
|
[security]
|
||||||
|
INSTALL_LOCK = true
|
||||||
|
SECRET_KEY = your_secret_key_here
|
||||||
|
|
||||||
|
[service]
|
||||||
|
DISABLE_REGISTRATION = true
|
||||||
|
REQUIRE_SIGNIN_VIEW = false
|
||||||
|
ENABLE_NOTIFY_MAIL = false
|
||||||
|
DEFAULT_KEEP_EMAIL_PRIVATE = true
|
||||||
|
|
||||||
|
[mailer]
|
||||||
|
ENABLED = false
|
||||||
|
|
||||||
|
[repository]
|
||||||
|
DEFAULT_BRANCH = main
|
||||||
|
ENABLE_PUSH_CREATE_USER = true
|
||||||
|
ENABLE_PUSH_CREATE_ORG = false
|
||||||
|
|
||||||
|
[webhook]
|
||||||
|
ALLOWED_HOST_LIST = *
|
||||||
|
SKIP_TLS_VERIFY = false
|
||||||
|
```
|
||||||
|
|
||||||
## PostgreSQL конфигурация
|
## PostgreSQL конфигурация
|
||||||
|
|
||||||
### Настройки базы данных
|
### Database Container Settings
|
||||||
*Параметры PostgreSQL для Gitea*
|
```yaml
|
||||||
|
db:
|
||||||
|
image: postgres:14
|
||||||
|
container_name: gitea_db
|
||||||
|
environment:
|
||||||
|
- POSTGRES_USER=gitea # Пользователь БД
|
||||||
|
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A # Пароль БД
|
||||||
|
- POSTGRES_DB=gitea # Имя базы данных
|
||||||
|
```
|
||||||
|
|
||||||
## Networking
|
### Дополнительные настройки PostgreSQL
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
# Performance Settings
|
||||||
|
- POSTGRES_SHARED_PRELOAD_LIBRARIES=pg_stat_statements
|
||||||
|
- POSTGRES_MAX_CONNECTIONS=200
|
||||||
|
- POSTGRES_SHARED_BUFFERS=256MB
|
||||||
|
- POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
|
||||||
|
- POSTGRES_WORK_MEM=4MB
|
||||||
|
|
||||||
### Сетевые настройки
|
# Logging Settings
|
||||||
*Конфигурация сетей Docker*
|
- POSTGRES_LOG_STATEMENT=all
|
||||||
|
- POSTGRES_LOG_MIN_DURATION_STATEMENT=1000
|
||||||
|
|
||||||
## Volumes и Storage
|
# Backup Settings
|
||||||
|
- POSTGRES_WAL_LEVEL=replica
|
||||||
|
- POSTGRES_ARCHIVE_MODE=on
|
||||||
|
```
|
||||||
|
|
||||||
### Хранение данных
|
### PostgreSQL Volume Configuration
|
||||||
*Настройки volumes для персистентности данных*
|
```yaml
|
||||||
|
volumes:
|
||||||
|
postgres_data:
|
||||||
|
external: true
|
||||||
|
name: gitea_postgres_data # External volume для персистентности
|
||||||
|
```
|
||||||
|
|
||||||
---
|
## Traefik Integration Labels
|
||||||
*Эта страница находится в разработке*
|
|
||||||
|
### HTTP Routing
|
||||||
|
```yaml
|
||||||
|
labels:
|
||||||
|
- traefik.enable=true
|
||||||
|
- traefik.http.routers.gitea.rule=Host(`git.aepif.ru`)
|
||||||
|
- traefik.http.routers.gitea.tls.certresolver=letsencrypt
|
||||||
|
- traefik.http.services.gitea.loadbalancer.server.port=3000
|
||||||
|
```
|
||||||
|
|
||||||
|
### TCP Routing для SSH
|
||||||
|
```yaml
|
||||||
|
labels:
|
||||||
|
# SSH TCP routing
|
||||||
|
- traefik.tcp.routers.gitea-ssh.rule=HostSNI(`*`)
|
||||||
|
- traefik.tcp.routers.gitea-ssh.entrypoints=ssh
|
||||||
|
- traefik.tcp.services.gitea-ssh.loadbalancer.server.port=22
|
||||||
|
```
|
||||||
|
|
||||||
|
### Объяснение SSH routing
|
||||||
|
- **HostSNI(`*`)**: Принимает любые TCP соединения на SSH entrypoint
|
||||||
|
- **entrypoints=ssh**: Использует SSH entrypoint (порт 2222) в Traefik
|
||||||
|
- **port=22**: Перенаправляет на порт 22 внутри Gitea контейнера
|
||||||
|
|
||||||
|
## Networking Configuration
|
||||||
|
|
||||||
|
### Networks
|
||||||
|
```yaml
|
||||||
|
networks:
|
||||||
|
proxy:
|
||||||
|
external: true # Подключение к Traefik
|
||||||
|
default:
|
||||||
|
driver: bridge # Внутренняя сеть для Gitea + PostgreSQL
|
||||||
|
```
|
||||||
|
|
||||||
|
### Network Architecture
|
||||||
|
- **proxy network**: Для HTTP/HTTPS трафика через Traefik
|
||||||
|
- **default network**: Для внутренней связи Gitea ↔ PostgreSQL
|
||||||
|
- **SSH traffic**: Напрямую через TCP routing Traefik
|
||||||
|
|
||||||
|
## Volume Configuration
|
||||||
|
|
||||||
|
### Gitea Data Volume
|
||||||
|
```yaml
|
||||||
|
gitea_data:
|
||||||
|
external: true
|
||||||
|
name: gitea_gitea_data
|
||||||
|
```
|
||||||
|
|
||||||
|
**Содержимое Gitea volume:**
|
||||||
|
- **repositories/**: Git репозитории
|
||||||
|
- **conf/**: Конфигурационные файлы (app.ini)
|
||||||
|
- **log/**: Логи Gitea
|
||||||
|
- **data/**: Загруженные файлы, аватары
|
||||||
|
- **ssh/**: SSH ключи сервера
|
||||||
|
|
||||||
|
### PostgreSQL Data Volume
|
||||||
|
```yaml
|
||||||
|
postgres_data:
|
||||||
|
external: true
|
||||||
|
name: gitea_postgres_data
|
||||||
|
```
|
||||||
|
|
||||||
|
**Содержимое PostgreSQL volume:**
|
||||||
|
- **base/**: Файлы базы данных
|
||||||
|
- **global/**: Глобальные настройки кластера
|
||||||
|
- **pg_wal/**: Write-Ahead Log файлы
|
||||||
|
- **pg_tblspc/**: Tablespace ссылки
|
||||||
|
|
||||||
|
### Создание external volumes
|
||||||
|
```bash
|
||||||
|
# Создание volumes перед запуском
|
||||||
|
docker volume create gitea_gitea_data
|
||||||
|
docker volume create gitea_postgres_data
|
||||||
|
|
||||||
|
# Проверка созданных volumes
|
||||||
|
docker volume ls | grep gitea
|
||||||
|
```
|
||||||
|
|
||||||
|
## Time Synchronization
|
||||||
|
|
||||||
|
### Timezone Configuration
|
||||||
|
```yaml
|
||||||
|
volumes:
|
||||||
|
- /etc/timezone:/etc/timezone:ro
|
||||||
|
- /etc/localtime:/etc/localtime:ro
|
||||||
|
```
|
||||||
|
|
||||||
|
Это обеспечивает синхронизацию времени контейнера с хост-системой, что важно для:
|
||||||
|
- Корректных timestamp в Git commits
|
||||||
|
- Правильного отображения времени в веб-интерфейсе
|
||||||
|
- Синхронизации с логами других сервисов
|
||||||
|
|
||||||
|
## Security Configuration
|
||||||
|
|
||||||
|
### User Permissions
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- USER_UID=1000
|
||||||
|
- USER_GID=1000
|
||||||
|
```
|
||||||
|
|
||||||
|
- Gitea запускается под пользователем с UID/GID 1000
|
||||||
|
- Соответствует обычному пользователю в Linux системах
|
||||||
|
- Обеспечивает правильные права доступа к файлам
|
||||||
|
|
||||||
|
### Database Security
|
||||||
|
- **Пароль БД**: Случайно сгенерированный пароль `sG7hZXBQDAtRab9A`
|
||||||
|
- **Изоляция сети**: PostgreSQL доступна только из внутренней сети
|
||||||
|
- **SSL отключен**: Для внутренней связи в Docker сети
|
||||||
|
|
||||||
|
### SSH Security
|
||||||
|
- **Отдельный порт**: SSH на нестандартном порту 2222
|
||||||
|
- **TCP routing**: Прямое подключение через Traefik
|
||||||
|
- **Key management**: SSH ключи управляются через веб-интерфейс
|
||||||
|
|
||||||
|
## Performance Tuning
|
||||||
|
|
||||||
|
### Gitea Performance Settings
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
# Repository settings
|
||||||
|
- GITEA__repository__DEFAULT_REPO_UNITS=repo.code,repo.releases,repo.issues,repo.pulls,repo.wiki
|
||||||
|
- GITEA__repository__DEFAULT_PRIVATE=private
|
||||||
|
|
||||||
|
# Git settings
|
||||||
|
- GITEA__git__MAX_GIT_DIFF_LINES=10000
|
||||||
|
- GITEA__git__MAX_GIT_DIFF_LINE_CHARACTERS=5000
|
||||||
|
- GITEA__git__MAX_GIT_DIFF_FILES=100
|
||||||
|
|
||||||
|
# Session settings
|
||||||
|
- GITEA__session__PROVIDER=memory
|
||||||
|
- GITEA__session__PROVIDER_CONFIG=data/sessions
|
||||||
|
```
|
||||||
|
|
||||||
|
### PostgreSQL Performance
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
# Connection settings
|
||||||
|
- POSTGRES_MAX_CONNECTIONS=200
|
||||||
|
- POSTGRES_SHARED_BUFFERS=256MB
|
||||||
|
- POSTGRES_EFFECTIVE_CACHE_SIZE=1GB
|
||||||
|
- POSTGRES_RANDOM_PAGE_COST=1.1
|
||||||
|
- POSTGRES_WORK_MEM=4MB
|
||||||
|
```
|
||||||
|
|
||||||
|
## Backup Configuration
|
||||||
|
|
||||||
|
### Automated Backups
|
||||||
|
```yaml
|
||||||
|
# Дополнительный контейнер для backup (опционально)
|
||||||
|
backup:
|
||||||
|
image: prodrigestivill/postgres-backup-local
|
||||||
|
environment:
|
||||||
|
- POSTGRES_HOST=db
|
||||||
|
- POSTGRES_DB=gitea
|
||||||
|
- POSTGRES_USER=gitea
|
||||||
|
- POSTGRES_PASSWORD=sG7hZXBQDAtRab9A
|
||||||
|
- BACKUP_KEEP_DAYS=7
|
||||||
|
- BACKUP_KEEP_WEEKS=4
|
||||||
|
- BACKUP_KEEP_MONTHS=6
|
||||||
|
volumes:
|
||||||
|
- ./backups:/backups
|
||||||
|
depends_on:
|
||||||
|
- db
|
||||||
|
```
|
||||||
|
|
||||||
|
### Backup Strategy
|
||||||
|
1. **Database Backup**: Автоматический dump PostgreSQL
|
||||||
|
2. **Repository Backup**: Резервное копирование Git репозиториев
|
||||||
|
3. **Configuration Backup**: Сохранение настроек и конфигурации
|
||||||
|
|
||||||
|
## Monitoring и Logging
|
||||||
|
|
||||||
|
### Log Configuration
|
||||||
|
```yaml
|
||||||
|
environment:
|
||||||
|
- GITEA__log__MODE=file
|
||||||
|
- GITEA__log__LEVEL=Info
|
||||||
|
- GITEA__log__ROOT_PATH=/data/gitea/log
|
||||||
|
```
|
||||||
|
|
||||||
|
### Health Checks
|
||||||
|
```yaml
|
||||||
|
# Дополнительные health checks
|
||||||
|
healthcheck:
|
||||||
|
test: ["CMD", "curl", "-f", "http://localhost:3000/api/healthz"]
|
||||||
|
interval: 30s
|
||||||
|
timeout: 10s
|
||||||
|
retries: 3
|
||||||
|
start_period: 30s
|
||||||
|
```
|
||||||
|
|
||||||
|
## Связанные файлы
|
||||||
|
|
||||||
|
- **[[Развертывание]]** - пошаговая установка и настройка
|
||||||
|
- **[[Администрирование]]** - управление пользователями и репозиториями
|
||||||
|
- **[[../Traefik Reverse Proxy/Конфигурации]]** - настройки интеграции с reverse proxy
|
||||||
@@ -1,26 +1,255 @@
|
|||||||
# Traefik Reverse Proxy - Конфигурации
|
# Traefik Reverse Proxy - Конфигурации
|
||||||
|
|
||||||
## Детальные настройки конфигурации Traefik
|
← **[[Обзор системы|← Назад к обзору]]**
|
||||||
|
|
||||||
*Документация будет дополнена деталями конфигурации*
|
|
||||||
|
|
||||||
## Docker Compose конфигурация
|
## Docker Compose конфигурация
|
||||||
*Разбор всех параметров docker-compose.yml*
|
|
||||||
|
### Основной файл: `/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
|
## Command Line Arguments
|
||||||
*Детальное описание всех флагов запуска*
|
|
||||||
|
|
||||||
## Static Configuration
|
### API Configuration
|
||||||
*Настройки, которые не изменяются во время выполнения*
|
- `--api.dashboard=true` - Включает веб-интерфейс Dashboard
|
||||||
|
- `--api.insecure=true` - **⚠️ Небезопасно**: Доступ к API без аутентификации на порту 8080
|
||||||
|
|
||||||
## Dynamic Configuration
|
### Provider Configuration
|
||||||
*Конфигурация через Docker labels*
|
- `--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
|
## 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 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 аутентификации
|
||||||
@@ -1,26 +1,325 @@
|
|||||||
# Traefik Reverse Proxy - Развертывание
|
# 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
|
## Создание сети 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/Развертывание]]** - следующий шаг развертывания
|
||||||
@@ -1,3 +1,5 @@
|
|||||||
|
# Документация сервера aepif.ru
|
||||||
|
|
||||||
Техническая документация инфраструктуры и сервисов домена aepif.ru. Здесь собрана вся информация о развернутых системах.
|
Техническая документация инфраструктуры и сервисов домена aepif.ru. Здесь собрана вся информация о развернутых системах.
|
||||||
|
|
||||||
## Обзор архитектуры
|
## Обзор архитектуры
|
||||||
Reference in New Issue
Block a user