Рецепты развёртывания
Готовые сценарии для популярных стеков — командами mitdev, от голого VPS до
работающего приложения с HTTPS. Замените example.com, репозитории и имена на
свои. Все команды идемпотентны — повтор безопасен.
Общий первый шаг для всех рецептов — подготовить сервер:
# На новом VPS (от root):
curl -fsSL https://mitdev.top/get | sudo bash
# В TUI выберите нужные компоненты (см. каждый рецепт), задайте пользователя,
# порт SSH и SSH-ключ. После установки доступна команда `mitdev`.
1. Next.js + PostgreSQL + Redis (один сервер)
Компоненты в TUI: system, user, security, node, nginx, certbot, PostgreSQL, Redis, PM2, firewall, fail2ban.
# 1. Развернуть приложение из git (пресет next: сборка + запуск под PM2 + nginx):
sudo mitdev app next webapp https://github.com/you/webapp.git app.example.com
# → клонирование в ~deploy/apps/webapp, npm ci, npm run build,
# pm2 start, nginx reverse-proxy на :3000, предложит выпустить SSL.
# 2. Данные подключения к БД (создаются автоматически модулем PostgreSQL):
sudo cat /root/.mitdev-credentials # postgresql: database/user/password
# В ~deploy/apps/webapp/.env пропишите:
# DATABASE_URL=postgresql://<user>:<pass>@127.0.0.1:5432/<db>
# REDIS_URL=redis://:<redis-pass>@127.0.0.1:6379
# 3. Перезапустить с новым .env и проверить:
sudo -u deploy pm2 restart webapp
mitdev doctor --deep # nginx отвечает, PG принимает, Redis PONG, SSL валиден
Обновление после пуша в git: sudo mitdev deploy webapp.
2. NestJS + MongoDB
Компоненты: system, user, security, node, nginx, certbot, MongoDB, PM2, firewall.
sudo mitdev app nest api https://github.com/you/api.git api.example.com
# Пресет nest: сборка + PM2 + reverse-proxy :3000 + SSL.
# MongoDB (модуль ставит localhost без auth — включите auth перед продакшеном
# или сразу поднимите replica set, п.4). Строка подключения:
# MONGODB_URI=mongodb://127.0.0.1:27017/api
3. Laravel + PostgreSQL (PHP-FPM)
Компоненты: system, user, security, php, nginx, certbot, PostgreSQL, firewall.
# Пресет laravel: composer install + nginx c FastCGI, docroot public/:
sudo mitdev app laravel shop https://github.com/you/shop.git shop.example.com
# .env Laravel (данные PostgreSQL — в /root/.mitdev-credentials):
# DB_CONNECTION=pgsql
# DB_HOST=127.0.0.1 DB_PORT=5432
# DB_DATABASE=<db> DB_USERNAME=<user> DB_PASSWORD=<pass>
sudo -u deploy bash -lc 'cd ~/apps/shop && php artisan key:generate && php artisan migrate --force'
WordPress требует MySQL/MariaDB (mitdev их отдельным модулем не ставит) — разворачивайте его через
docker-composeв репозитории и пресетmitdev app wordpress(nginx+PHP-FPM), либо черезmitdev app docker.
4. Отказоустойчивый кластер на 3 VPS (приватная сеть + HA PostgreSQL + Redis)
Три сервера (db-1, db-2, db-3). Сначала — приватная mesh-сеть, затем
поверх неё HA-сервисы, слушающие только приватную сеть.
# --- Приватная сеть (WireGuard) ---
# На db-1:
sudo mitdev net create # имя, подсеть 10.100.0.0/24 → db-1 = 10.100.0.1
sudo mitdev net token # скопировать токен
# На db-2 и db-3:
sudo mitdev net join <токен> # получат 10.100.0.2 / 10.100.0.3
sudo mitdev net add-peer <peer-токен> # выполнить на остальных узлах (двусторонний mesh)
# ...или полностью автоматически по SSH:
sudo mitdev net join --ssh 10.100.0.1 deploy
mitdev net status # пиры, задержки, handshake
# --- HA PostgreSQL (primary + реплики) ---
# На db-1 (primary) — установлен модуль pgcluster (роль primary) или:
sudo mitdev pg add-replica 10.100.0.2 # разрешить реплику (pg_hba + listen + firewall)
sudo mitdev pg add-replica 10.100.0.3
# На db-2/db-3 — установка с модулем «PostgreSQL-кластер», роль replica, primary = 10.100.0.1
mitdev pg status # роль, стриминг WAL, отставание
# --- HA Redis (Sentinel) ---
# На db-1:
sudo mitdev redis cluster-init mitdev 2 # master + Sentinel
sudo mitdev redis token
# На db-2/db-3:
sudo mitdev redis join <токен> # реплики + Sentinel, авто-failover
# --- Службы слушают только приватную сеть ---
sudo mitdev net bind postgresql private
sudo mitdev net bind redis private
# --- Единый обзор всех кластеров ---
mitdev doctor # блок «Кластеры / HA»: PG, Redis, WG
Приложения подключаются к БД по приватным адресам/именам db-1.internal и т.д.;
при отказе узла PostgreSQL-watchdog и Redis-Sentinel переизбирают нового мастера
автоматически. Для честного кворума нужно ≥3 узла (нечётное число).
5. Приложение в Kubernetes (k3s)
Компоненты: system, user, security, Kubernetes (k3s), nginx (опц.), certbot.
sudo mitdev k8s deploy myapp ghcr.io/you/myapp:latest 3000 app.example.com 2
# Deployment (2 реплики, probes/limits) + Service + публикация:
# traefik (если нет nginx) или reverse-proxy через nginx + SSL.
mitdev k8s status # узлы, поды, приложения mitdev
mitdev k8s delete myapp # удалить приложение и его поды
HA-кластер k3s из 3/5 серверов: режим init/join при установке модуля,
токен — mitdev k8s token.
Дальше: WHY.md — чем mitdev отличается; COMMANDS.md — полный справочник; TROUBLESHOOTING.md — если что-то пошло не так.