DaydreamMods

DaydreamMods

Развёртывание

Как устроен прод и как выкатить изменение, не потеряв базу.

Сервер: 109.73.193.237. Домен daydreammods.ru и www смотрят на него записью A. Документация: docs.daydreammods.ru, тоже A на этот адрес, отдельный сайт nginx.

Снаружи SSH открыт на порту 2222. Порт 22 с интернета баннер не отдаёт, даже если на самой машине sshd его слушает.

Каталоги

  • Приложение: /opt/daydreammods.
  • Окружение: /opt/daydreammods/.env.
  • Сборки: /opt/daydreammods/storage/packs.
  • Статическая документация: /var/www/docs.daydreammods.ru.
  • Конфиги nginx: /etc/nginx/sites-available/daydreammods.ru и docs.daydreammods.ru.conf.

Процессы

Веб из /opt/daydreammods/apps/web:

bun x next start -p 3000

API из /opt/daydreammods/apps/server:

bun src/main.ts

Оба оформлены юнитами systemd daydreammods-web и daydreammods-api. В юните должен быть путь к bun (/root/.bun/bin) и рабочий каталог. Переменные читаются из .env при старте, поэтому после правки .env процессы перезапускают.

Первичная база

sudo -u postgres psql -c "CREATE USER daydream WITH PASSWORD 'ПАРОЛЬ';"
sudo -u postgres psql -c "CREATE DATABASE daydreammods OWNER daydream;"
cd /opt/daydreammods
set -a; . ./.env; set +a
bun install
bun run db:migrate
bun run db:seed
bun run build
systemctl restart daydreammods-web daydreammods-api

set -a; . ./.env; set +a обязателен перед migrate. Иначе скрипт не видит DATABASE_URL.

Сертификаты

certbot --nginx -d daydreammods.ru -d www.daydreammods.ru
certbot --nginx -d docs.daydreammods.ru

Продление — задача certbot. Конфиг nginx после certbot содержит и 80, и 443. Новые location добавляют в тот файл, который реально подключён, а не только в копию в репозитории.

Обычное обновление кода

Скопировать изменённые файлы в /opt/daydreammods. Файлы с Windows-переводами строк перед запуском чистят: sed -i 's/\r$//'. Затем:

cd /opt/daydreammods
set -a; . ./.env; set +a
bun run build
systemctl restart daydreammods-web

API перезапускают, если менялись apps/server или пакеты, которые он импортирует (packages/trpc, packages/database). Миграцию гоняют до рестарта, если в поставке есть новый SQL.

Документацию пересобирают отдельно: node documentation/build.mjs и копируют documentation/dist в /var/www/docs.daydreammods.ru. Сборку Next это не требует.