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 3000API из /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-apiset -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-webAPI перезапускают, если менялись apps/server или пакеты, которые он импортирует (packages/trpc, packages/database). Миграцию гоняют до рестарта, если в поставке есть новый SQL.
Документацию пересобирают отдельно: node documentation/build.mjs и копируют documentation/dist в /var/www/docs.daydreammods.ru. Сборку Next это не требует.