Почему on-premise
Для многих предприятий облако неприемлемо:
- Данные не должны покидать периметр (152-ФЗ, коммерческая тайна).
- Нет стабильного интернета на производстве.
- Контроль над всем стеком — от БД до приложения.
- Облачные зависимости — риск для критичной инфраструктуры.
On-premise — развёртывание на сервере заказчика. Данные остаются внутри периметра.
Стек развёртывания
- Docker — контейнеризация приложения. Изолированная среда, одинаковая на dev и prod.
- Docker Compose — оркестрация: приложение + PostgreSQL + Nginx. Одна команда запускает весь стек.
- Nginx — обратный прокси, TLS, статика.
- PostgreSQL — в отдельном контейнере, данные на volume.
Пример docker-compose.yml
version: '3.8' services: app: build: . restart: always depends_on: - db env_file: .env ports: - "8000:8000" db: image: postgres:16 restart: always env_file: .env volumes: - pgdata:/var/lib/postgresql/data - ./backup:/backup ports: - "5432:5432" nginx: image: nginx:alpine restart: always depends_on: - app ports: - "80:80" - "443:443" volumes: - ./nginx.conf:/etc/nginx/nginx.conf - ./ssl:/etc/nginx/ssl volumes: pgdata:
Запуск
docker compose up -d
Одна команда. Все сервисы запущены. Приложение доступно на порту 80/443 через Nginx.
Что получает заказчик
- docker-compose.yml — конфигурация всего стека.
- .env — переменные окружения (пароли, пути).
- Инструкцию по запуску — одну команду.
- Backup-скрипты — регламентное копирование.
- Мониторинг — health-check эндпоинты.
Почему не Kubernetes
Для MES/WMS на одном предприятии Kubernetes — избыточен. Один сервер, один стек, простое управление. Docker Compose достаточно.
Kubernetes имеет смысл при:
- Масштабировании на несколько предприятий.
- Микросервисной архитектуре с десятками сервисов.
- Нескольких средах (dev/staging/prod) на одной инфраструктуре.
Для одного завода с одной системой — Docker Compose. Проще, понятнее, дешевле в эксплуатации.
Мониторинг
Health-check эндпоинт в приложении:
GET /health → {"status": "ok", "db": "ok"}
Docker Compose проверяет health-check и перезапускает контейнер при необходимости:
healthcheck: test: curl -f http://localhost:8000/health || exit 1 interval: 30s retries: 3
Backup
Отдельный контейнер или cron-задача:
docker compose exec db pg_dump -U postgres mydb > /backup/db_$(date +%Y%m%d).dump
WAL-архивирование — через volume, общий с backup-сервером.
Итог
On-premise через Docker Compose — это:
- Данные внутри периметра.
- Один сервер, одна команда запуска.
- Полный контроль над стеком.
- Минимальная сложность эксплуатации.
Заказчик получает не «систему в облаке», а свою систему на своём сервере. С кодом, backup и документацией.