Files
prod/infra/nginx
Andrey 8be219778c chore: update configuration files for improved logging and service management
- Enhanced .dockerignore to exclude bot logs, Docker volumes, and temporary files.
- Updated .gitignore to include Ansible vars files for better environment management.
- Modified docker-compose.yml health checks to use curl for service verification.
- Refined Ansible playbook by adding tasks for creating default Zsh configuration files and cleaning up temporary files.
- Improved Nginx configuration to support Uptime Kuma with specific location blocks for status and dashboard, including rate limiting and WebSocket support.
2025-09-19 16:40:40 +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