Files
Learn_System/docker-entrypoint.sh
T
Maxim Dolgolyov f7c5f222a3 deploy(docker): self-init entrypoint (миграции+засев прав) + гайд по TrueNAS
- docker-entrypoint.sh: при старте node migrations-runner (идемпотентно) + seed-permissions
  только если role_permissions пуста → контейнер поднимается на чистом томе без ручных шагов
  (сервер раньше fail-fast без миграций). Dockerfile: ENTRYPOINT через tini + entrypoint,
  нормализация CRLF (sed) + chmod, label BQ-System → LearnSpace.
- DEPLOY-TRUENAS.md: пошагово для TrueNAS SCALE (датасет → образ → Custom App compose с host-path
  томами и JWT_SECRET → авто-миграции → reverse-proxy/HTTPS/TURN → бэкапы), заметка про CORE.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-19 19:53:24 +03:00

20 lines
1.1 KiB
Bash

#!/bin/sh
# LearnSpace — инициализация контейнера: применить миграции (идемпотентно),
# при первом старте засеять права, затем запустить сервер.
set -e
cd /app/backend
echo "[entrypoint] applying migrations..."
node src/db/migrations-runner.js
# Засев прав — только если реестр пуст (первый запуск): schema-check сервера
# требует непустую role_permissions. Идемпотентно и безопасно при перезапусках.
NEED_SEED=$(node -e "try{const {DatabaseSync}=require('node:sqlite');const db=new DatabaseSync(process.env.DB_PATH||'./data/learnspace.db');const n=db.prepare('SELECT COUNT(*) AS n FROM role_permissions').get().n;process.stdout.write(n>0?'0':'1')}catch(e){process.stdout.write('1')}")
if [ "$NEED_SEED" = "1" ]; then
echo "[entrypoint] seeding permissions (first run)..."
node src/db/seed-permissions.js || echo "[entrypoint] seed-permissions skipped/failed (non-fatal)"
fi
echo "[entrypoint] starting server..."
exec node src/server.js