- 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>
6.3 KiB
Установка 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) и поправь три вещи:
- Пути
/mnt/tank/apps/learnspace/...— под свой пул, если он неtank. JWT_SECRET— длинная случайная строка. Сгенерируй прямо на NAS:и вставь значение.openssl rand -hex 32CLIENT_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. Через ~30–40 с 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.
Обновление версии
- Обнови код в
src(git pull или перекопируй). - Пересобери и перезапусти:
Данные сохранятся (тома на датасете), новые миграции применятся автоматически.
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).