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:
106
infra/nginx/README.md
Normal file
106
infra/nginx/README.md
Normal 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
|
||||
Reference in New Issue
Block a user