В феврале 2026 года к нам в АйТи Фреш обратился стартап «АппЛаб» из Москвы — команда из 12 разработчиков, создающая мобильные приложения для ритейла. Бэкенд состоял из 8 микросервисов в Docker: API gateway, auth-сервис, каталог товаров, корзина, платежи, уведомления, аналитика и admin-панель. Всё работало на двух серверах за nginx reverse proxy.
Проблема звучала просто, но отравляла жизнь всей команде: каждый деплой требовал ручной правки nginx.conf. Новый сервис? Правь конфиг, добавляй upstream, перезагружай nginx. Изменился порт? Правь конфиг. Canary-деплой? Вручную меняй веса в upstream. SSL-сертификаты? Certbot renew по cron, и однажды он сломался, и сертификат истёк в пятницу вечером.
За последний месяц команда 14 раз правила nginx.conf вручную, и дважды это привело к даунтайму из-за опечаток.
«Мы тратим время DevOps-инженера не на автоматизацию, а на ручные правки конфига. Каждый второй PR в нашем репозитории инфраструктуры — это изменение nginx.conf. Это не масштабируется» — CTO «АппЛаб».
Мы проанализировали nginx-конфиг и Docker-инфраструктуру:
# Текущий docker-compose.yml (упрощённо)
# 8 сервисов, каждый на своём порту
services:
api-gateway: # :3000
auth-service: # :3001
catalog: # :3002
cart: # :3003
payments: # :3004
notifications: # :3005
analytics: # :3006
admin-panel: # :3007
# nginx.conf — 247 строк, 8 upstream-блоков
cat /etc/nginx/conf.d/applab.conf | wc -l
# 247
# Каждый сервис — отдельный upstream + location:
# upstream api_gateway {
# server 172.18.0.2:3000;
# }
# upstream auth_service {
# server 172.18.0.3:3001;
# }
# ... и так 8 раз
# Git log инфраструктурного репозитория:
git log --oneline --since="2026-01-01" -- nginx/ | wc -l
# 14 коммитов только в nginx-конфиги за январь
# Certbot — сертификаты через cron:
crontab -l | grep certbot
# 0 3 * * 1 certbot renew --nginx --quiet
# Последний renew: FAILED (nginx config test failed after changes)
Проблемы:
- Ручное управление — IP-адреса контейнеров захардкожены в upstream
- Нет service discovery — при пересоздании контейнера IP меняется
- Нет health checks — nginx продолжал слать трафик на мёртвые контейнеры
- Certbot на cron — ненадёжно, при ошибке никто не узнаёт
- Нет метрик — отсутствует мониторинг latency, error rate по сервисам
- Canary-деплои — вручную через upstream weights
Мы рассмотрели три варианта замены nginx:
| Решение | Плюсы | Минусы |
|---|
| nginx + consul-template | Знакомый nginx, автогенерация конфига | Требует Consul, сложная настройка |
| Envoy Proxy | Мощный, xDS API | Сложный, overengineered для 8 сервисов |
| Traefik v3 | Нативный Docker provider, auto-discovery, Let's Encrypt | Чуть ниже производительность на high-traffic |
Traefik победил: он был создан именно для Docker и микросервисов. Docker provider автоматически обнаруживает контейнеры и создаёт маршруты на основе labels — не нужно править конфиг вообще. Let's Encrypt встроен. Middleware для rate-limit, auth, headers — из коробки. При 8 микросервисах и текущих нагрузках (5 000 RPS) производительности Traefik хватает с запасом.