Files
prod/infra/nginx
Andrey f8d6b92fd2 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.
2025-09-16 18:31:51 +03:00
..

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 файл:

# 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:

ansible-playbook -i inventory.ini playbook.yml

Устранение неполадок

Проверка конфигурации nginx

nginx -t

Проверка SSL сертификатов

openssl x509 -in /etc/nginx/ssl/cert.pem -text -noout

Проверка доступности сервисов

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