Files
Learn_System/DEPLOY-TRUENAS.md
Maxim Dolgolyov 047a3a7e15 deploy: compose.truenas.yml + инструкция под SCALE/сборку-на-NAS
- compose.truenas.yml: готовый host-path compose (build на NAS / или image), env
  с JWT_SECRET/CLIENT_ORIGIN, healthcheck start_period 40s (запас на первичные миграции).
- DEPLOY-TRUENAS.md: переписан под реальный кейс (TrueNAS SCALE, сборка образа на NAS,
  без Docker на ПК): датасет → код по SMB → docker build → правка JWT/пути →
  docker compose up / Custom App → проверка → домен/HTTPS/бэкапы. PC-сборка и CORE — в конце.

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

6.3 KiB
Raw Permalink Blame History

Установка LearnSpace на TrueNAS SCALE

Пошаговая инструкция под твой случай: TrueNAS SCALE, сборка образа прямо на NAS (на рабочем ПК Docker не нужен). В репозитории уже есть Dockerfile, docker-entrypoint.sh и готовый compose.truenas.yml.

Контейнер самоинициализируется: при старте применяет миграции БД, при первом запуске засевает права. Данные (SQLite-БД, загрузки, бэкапы) лежат на датасете и переживают пересоздание/обновление контейнера.

CORE (FreeBSD) Docker не умеет — см. раздел в конце. Если у тебя CORE — скажи, распишу отдельно.


Шаг 1. Датасет под данные

TrueNAS → Datasets → Add Dataset: создай tank/apps/learnspace (вместо tank — имя своего пула). Затем создай в нём три папки (через System → Shell или по SMB):

mkdir -p /mnt/tank/apps/learnspace/{data,uploads,backups}

Здесь будут жить БД, загрузки и бэкапы. Их защищают снапшоты/репликация TrueNAS.

Шаг 2. Положить код проекта на NAS

Самое простое — по SMB скопировать папку репозитория в датасет, например в /mnt/tank/apps/learnspace/src (нужны Dockerfile, compose.truenas.yml, backend/, frontend/, js/, docker-entrypoint.sh). Папку node_modules копировать НЕ нужно — образ ставит зависимости сам.

Либо, если у NAS есть доступ к git-серверу:

cd /mnt/tank/apps/learnspace
git clone <адрес-репозитория> src

Шаг 3. Включить SSH и собрать образ

System → Services → SSH → включить. Зайти в шелл NAS (ssh root@IP_NAS) и собрать:

cd /mnt/tank/apps/learnspace/src
docker build -t learnspace:latest .

(Сборка скачает зависимости и займёт пару минут.)

Шаг 4. Настроить параметры запуска

Открой compose.truenas.yml (в папке src) и поправь три вещи:

  1. Пути /mnt/tank/apps/learnspace/... — под свой пул, если он не tank.
  2. JWT_SECRET — длинная случайная строка. Сгенерируй прямо на NAS:
    openssl rand -hex 32
    
    и вставь значение.
  3. CLIENT_ORIGIN — адрес, по которому будешь открывать сайт (пока http://IP_NAS:3000, позже домен с https).

Шаг 5. Запустить

Способ 1 — командой (просто):

cd /mnt/tank/apps/learnspace/src
docker compose -f compose.truenas.yml up -d

Способ 2 — через UI TrueNAS (интегрированно, app виден в Apps): Apps → Discover Apps → Custom App → Install via YAML → вставь содержимое compose.truenas.yml (этот способ — для SCALE 24.10 «ElectricEel» и новее; на 24.04 «Dragonfish» и старше используй Способ 1).

Первый старт сам накатит миграции и засеет права — отдельных команд не нужно.

Шаг 6. Проверить

docker logs -f learnspace

Ожидаемо: applying migrations... → (на первом старте) seeding permissions...starting server...Server running on port 3000. Через ~3040 с healthcheck станет «healthy».

Открой в браузере http://IP_NAS:3000 и зарегистрируй первого пользователя. (Нужен сразу админ — скажи, добавлю команду/скрипт создания админа.)

Шаг 7. Домен и HTTPS (рекомендуется)

Порт 3000 — внутренний. Для домена с HTTPS поставь reverse-proxy (TrueNAS app Nginx Proxy Manager или Traefik, либо внешний nginx) → проксировать на IP_NAS:3000. В CLIENT_ORIGIN укажи итоговый публичный URL (иначе CORS заблокирует фронт). Для видеосвязи в классах за CGNAT/симметричным NAT нужен TURN-сервер (coturn) — пропиши TURN_URL/TURN_USER/TURN_PASS.

Обновление версии

  1. Обнови код в src (git pull или перекопируй).
  2. Пересобери и перезапусти:
    cd /mnt/tank/apps/learnspace/src
    docker compose -f compose.truenas.yml up -d --build
    
    Данные сохранятся (тома на датасете), новые миграции применятся автоматически.

Бэкапы

Данные — в /mnt/tank/apps/learnspace/{data,uploads}. Настрой снапшоты датасета (+ репликацию при желании). SQLite-файл — data/learnspace.db; консистентный бэкап лучше делать снапшотом ZFS или при остановленном app.


Альтернатива: собрать на ПК (если поставишь Docker Desktop)

docker build -t learnspace:latest .
docker save learnspace:latest | gzip > learnspace.tar.gz   # перенести файл на NAS

На NAS: docker load < learnspace.tar.gz, затем в compose.truenas.yml заменить build: . на image: learnspace:latest и выполнить Шаги 4–6.

TrueNAS CORE (FreeBSD) — без Docker

CORE контейнеры не запускает. Варианты: Linux-VM (bhyve) с Docker внутри → следовать инструкции выше; либо jail с Node ≥ 22: npm ci --omit=dev в backend/, прописать env, npm run migrate && npm run seed:permissions, запускать node src/server.js под supervisor (pm2/rc.d).