ДРАФТ: Uptime Kuma в Docker + nginx + SMTP (Postfix)
Описание
Uptime Kuma — система мониторинга доступности сервисов с поддержкой уведомлений (HTTP, TCP, Ping, SMTP и др.).
Архитектура:
Internet → nginx (80/443) → Uptime Kuma (Docker:3001)
↓
Postfix (SMTP)
Установка Docker (если не установлен)
sudo apt update sudo apt install -y docker.io docker-compose-plugin sudo systemctl enable docker sudo systemctl start docker
Установка ПО
sudo apt update sudo apt install -y nginx certbot python3-certbot-nginx sudo apt install policykit-1
Структура каталогов
mkdir -p /opt/uptime-kuma/data cd /opt/uptime-kuma
docker-compose.yaml
services: kuma: image: louislam/uptime-kuma:2 restart: always ports: - "127.0.0.1:3001:3001" volumes: - ./data:/app/data
nginx.conf
sudo vim /etc/nginx/sites-available/uptime-kuma
server { listen 80; server_name host.yourdomain.ru; location / { proxy_pass http://127.0.0.1:3001; proxy_http_version 1.1; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; } }
Запускаем nginx
nginx -t sudo ln -s /etc/nginx/sites-available/uptime-kuma /etc/nginx/sites-enabled/ sudo nginx -t && sudo systemctl reload nginx
certbot
certbot --nginx -d your-domain.com curl -I https://your-domain.com systemctl status certbot.timer sudo certbot renew --dry-run
Запуск
cd /opt/uptime-kuma docker compose up -d
Проверка:
docker compose ps curl -I http://127.0.0.1 curl -I http://127.0.0.1:3001 sudo docker compose down --remove-orphans sudo docker up -d
Доступ
http://IP-сервера
Первый запуск — создание аккаунта администратора.
Настройка SMTP (Postfix на хосте)
- PTR
- MX
- SPF v=spf1 ip4:123.14.11.55 -all
- DKIM
- DMARC _dmarc.domain.ru v=DMARC1; p=reject; rua=mailto:postmaster@mydomain.ru
Проблема
Уведомления по SMTP не могут быть отправлены на localhost:
connection refused
Причина
В контейнере:
127.0.0.1 != хост
Определить gateway Docker
docker inspect uptime-kuma-kuma-1 \ --format '{{range .NetworkSettings.Networks}}{{.Gateway}}{{end}}'
Пример:
172.19.0.1
Настройки SMTP в Uptime Kuma
Host: 172.19.0.1 Port: 25 Secure: false Ignore TLS: true
Настройка Postfix
Проверка:
postconf inet_interfaces
Если:
inet_interfaces = loopback-only
Исправить:
postconf -e 'inet_interfaces = all' systemctl restart postfix
Разрешить Docker сеть
docker network inspect uptime-kuma_default \ --format '{{range .IPAM.Config}}{{.Subnet}}{{end}}'
Пример:
172.19.0.0/16
Добавить:
postconf -e 'mynetworks = 127.0.0.0/8 172.19.0.0/16' systemctl reload postfix
Логи Postfix
Пример:
client=unknown[172.19.0.2]
Причина: - это IP контейнера (Docker bridge)
Удаление Received (не рекомендуется)
postconf -e 'header_checks = regexp:/etc/postfix/header_checks'
/^Received: from \[127\.0\.0\.1\].*172\.19\..*/ IGNORE
Применение:
systemctl reload postfix
WARNING: - нарушает RFC - ухудшает доставляемость
Типовые ошибки
1. nginx.conf: not a directory
Причина: Docker создал папку вместо файла
Решение:
rm -rf nginx.conf touch nginx.conf
2. Connection refused SMTP
Причины: - Postfix слушает только 127.0.0.1 - неверный IP SMTP
3. WebSocket не работает
Обновление
docker compose pull
docker compose up -d
Бэкап
docker compose down tar -czf kuma-backup.tar.gz data docker compose up -d
Рекомендации
- не публиковать порт 3001 наружу - использовать nginx + TLS - делать бэкапы - не удалять заголовки Received