feat: add Nginx reverse proxy and SSL configuration

- Introduce Nginx service in docker-compose for handling HTTP/HTTPS traffic.
- Configure Nginx with SSL support and health checks for Grafana and Prometheus.
- Update env.template to include SERVER_IP and STATUS_PAGE_PASSWORD variables.
- Enhance Ansible playbook with tasks for Nginx installation, SSL certificate generation, and configuration management.
This commit is contained in:
2025-09-16 18:31:51 +03:00
parent 30830c5bd9
commit f8d6b92fd2
8 changed files with 483 additions and 0 deletions

106
infra/nginx/README.md Normal file
View File

@@ -0,0 +1,106 @@
# Nginx Reverse Proxy Configuration
## Обзор
Данная конфигурация nginx обеспечивает безопасный доступ к сервисам мониторинга через HTTPS с самоподписанными SSL сертификатами.
## Архитектура
```
Интернет → Nginx (443) →
├→ /grafana → Grafana (3000)
├→ /prometheus → Prometheus (9090)
├→ /status → Status page (с Basic Auth)
└→ / → Redirect to /grafana
```
## Структура файлов
```
infra/nginx/
├── nginx.conf # Основная конфигурация nginx
├── ssl/ # SSL сертификаты (создаются автоматически)
│ ├── cert.pem # SSL сертификат
│ └── key.pem # Приватный ключ
├── conf.d/ # Конфигурации location'ов
│ ├── grafana.conf # Конфиг для Grafana
│ ├── prometheus.conf # Конфиг для Prometheus
│ └── status.conf # Конфиг для status page
└── .htpasswd # Basic Auth для status page
```
## Доступ к сервисам
### Grafana
- **URL**: `https://your-server-ip/grafana/`
- **Аутентификация**: Grafana admin credentials
- **Особенности**: Настроен для работы через sub-path
### Prometheus
- **URL**: `https://your-server-ip/prometheus/`
- **Особенности**: Полный доступ к Prometheus UI
### Status Page
- **URL**: `https://your-server-ip/status`
- **Аутентификация**: Basic Auth (admin/admin123 по умолчанию)
- **Особенности**: Показывает статус nginx (заготовка для Uptime Kuma)
## Переменные окружения
Добавьте в ваш `.env` файл:
```bash
# Server Configuration
SERVER_IP=your_server_ip_here
# Status Page Configuration
STATUS_PAGE_PASSWORD=admin123
```
## Безопасность
- **SSL/TLS**: Самоподписанные сертификаты (365 дней)
- **Rate Limiting**: 10 req/s для API, 1 req/s для status page
- **Security Headers**: X-Frame-Options, X-Content-Type-Options, CSP
- **Basic Auth**: Для status page
- **Fail2ban**: Интеграция с nginx логами
## Мониторинг
- **Health Check**: `https://your-server-ip/nginx-health`
- **Nginx Status**: `https://your-server-ip/nginx_status` (только локальные сети)
- **Logs**: `/var/log/nginx/access.log`, `/var/log/nginx/error.log`
## Развертывание
Конфигурация автоматически развертывается через Ansible playbook:
```bash
ansible-playbook -i inventory.ini playbook.yml
```
## Устранение неполадок
### Проверка конфигурации nginx
```bash
nginx -t
```
### Проверка SSL сертификатов
```bash
openssl x509 -in /etc/nginx/ssl/cert.pem -text -noout
```
### Проверка доступности сервисов
```bash
curl -k https://your-server-ip/grafana/api/health
curl -k https://your-server-ip/prometheus/-/healthy
curl -k https://your-server-ip/nginx-health
```
## Будущие улучшения
- Интеграция с Uptime Kuma для status page
- Let's Encrypt сертификаты вместо самоподписанных
- Дополнительные security headers
- Мониторинг nginx метрик в Prometheus