Деплой на свой сервер

LaunchKit — обычное Next.js-приложение со standalone-сборкой, поэтому его можно задеплоить куда угодно, где есть Docker. Это руководство описывает деплой на Coolify — self-hosted PaaS поверх вашего собственного сервера (VPS), с автоматическим TLS через Let's Encrypt и встроенным reverse-proxy (Traefik). Именно так задеплоен сам сайт документации, который вы сейчас читаете.

Почему Coolify

1. Dockerfile

В корне репозитория уже есть готовый multi-stage Dockerfile:

FROM node:22-slim AS base
RUN corepack enable && corepack prepare pnpm@11.1.2 --activate

FROM base AS deps
WORKDIR /app
COPY package.json pnpm-lock.yaml* ./
RUN pnpm install --frozen-lockfile

FROM base AS build
WORKDIR /app
COPY --from=deps /app/node_modules ./node_modules
COPY . .
RUN pnpm db:generate
RUN pnpm build

FROM base AS runner
WORKDIR /app
ENV NODE_ENV=production
ENV PORT=3000
RUN addgroup --system --gid 1001 nodejs && adduser --system --uid 1001 nextjs
COPY --from=build /app/public ./public
COPY --from=build --chown=nextjs:nodejs /app/.next/standalone ./
COPY --from=build --chown=nextjs:nodejs /app/.next/static ./.next/static
COPY --from=build --chown=nextjs:nodejs /app/prisma ./prisma
USER nextjs
EXPOSE 3000
CMD ["node", "server.js"]

Он рассчитан на output: 'standalone' в next.config.ts (уже включено в шаблоне) — итоговый образ содержит только то, что реально нужно для запуска, без dev-зависимостей и без полного node_modules.

2. Дать Coolify доступ к репозиторию

Coolify клонирует репозиторий по SSH. В своём GitLab/GitHub добавьте deploy key (публичный ключ, который сгенерирует/попросит Coolify при создании приложения) с правом чтения на нужный репозиторий.

3. Создать приложение в Coolify

В интерфейсе Coolify: New Resource → Application → Deploy from a Git repository, дальше:

| Поле | Значение | |---|---| | Repository | ваш git URL по SSH, например git@your-git-host:you/launchkit-core.git | | Branch | main (или ваша боевая ветка) | | Build Pack | Dockerfile | | Dockerfile location | Dockerfile | | Base directory | / (корень репозитория — контекст сборки) | | Port | 3000 | | Domain | https://your-domain.ru |

Coolify сам выпустит TLS-сертификат Let's Encrypt для указанного домена при первом успешном деплое, если A-запись домена уже указывает на IP сервера.

4. Переменные окружения

В разделе Environment Variables приложения задайте как минимум:

NODE_ENV=production
AUTH_SECRET=<сгенерируйте: npx auth secret>
AUTH_URL=https://your-domain.ru
NEXT_PUBLIC_APP_URL=https://your-domain.ru
DATABASE_URL=postgresql://user:password@host:5432/dbname

Плюс всё, что реально используете: REDIS_URL, AUTH_GOOGLE_ID/AUTH_GOOGLE_SECRET, AUTH_YANDEX_ID/AUTH_YANDEX_SECRET, SMTP_*/EMAIL_FROM, PAYMENT_PROVIDER и ключи выбранного платёжного провайдера (см. «Аутентификация», «Почта», «Платежи»). Ничего из .env не коммитится — все значения вводятся в интерфейсе Coolify как секреты приложения.

Если база данных не поднята отдельно на том же сервере — самый простой вариант для старта: создать в Coolify ресурс PostgreSQL (тот же интерфейс, отдельная кнопка «New Resource → Database») и указать выданный им DATABASE_URL в переменных приложения.

5. Первый деплой и миграции

После первого успешного деплоя выполните миграции Prisma внутри контейнера (Coolify → приложение → Terminal, либо через docker exec на сервере):

pnpm db:deploy

db:deploy (prisma migrate deploy) применяет уже существующие миграции без интерактивных вопросов — то, что нужно в проде, в отличие от db:migrate (prisma migrate dev), который предназначен для разработки.

6. Проверка

Автодеплой и staging/prod

Coolify умеет автоматически передеплоивать приложение при пуше в указанную ветку (webhook от git-хостинга) — удобно для staging-окружения. Для боевого домена разумно оставить ручное подтверждение деплоя (Coolify поддерживает деплой по тегу/вручную), чтобы код, трогающий платежи или доступ пользователей, не попадал в прод без осознанного шага — так устроен деплой самого LaunchKit (staging-окружения автодеплоятся на push, прод — только по ручной промоции).

Логи и откат

Вкладка Logs приложения в Coolify показывает вывод сборки и рантайма в реальном времени — первое место для диагностики упавшего билда. Каждый деплой сохраняется в истории — при проблеме можно откатиться на предыдущий успешный деплой одной кнопкой, не трогая git-историю.