Рецепты развёртывания

Готовые сценарии для популярных стеков — командами 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 — если что-то пошло не так.