047a3a7e15
- 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>
42 lines
2.4 KiB
YAML
42 lines
2.4 KiB
YAML
# LearnSpace — деплой на TrueNAS SCALE (host-path тома на датасет).
|
|
# Запуск из папки с кодом на NAS: docker compose -f compose.truenas.yml up -d
|
|
# ⚠️ Перед запуском поправь:
|
|
# 1) пути /mnt/tank/apps/learnspace/... под свой пул/датасет;
|
|
# 2) JWT_SECRET — длинная случайная строка (на NAS: openssl rand -hex 32);
|
|
# 3) CLIENT_ORIGIN — публичный адрес, по которому открываешь сайт.
|
|
services:
|
|
app:
|
|
build: . # собрать образ из этого репозитория прямо на NAS
|
|
# image: learnspace:latest # ← вместо build: ., если образ уже собран/загружен (docker load)
|
|
container_name: learnspace
|
|
restart: unless-stopped
|
|
ports:
|
|
- "3000:3000" # внешний:внутренний — поменяй левую часть при конфликте порта
|
|
volumes:
|
|
- /mnt/tank/apps/learnspace/data:/app/backend/data # SQLite-БД (learnspace.db)
|
|
- /mnt/tank/apps/learnspace/uploads:/app/backend/uploads # загрузки (картинки и т.п.)
|
|
- /mnt/tank/apps/learnspace/backups:/app/backups # бэкапы
|
|
environment:
|
|
- NODE_ENV=production
|
|
- PORT=3000
|
|
- JWT_SECRET=ЗАМЕНИ_НА_СЛУЧАЙНУЮ_СТРОКУ # openssl rand -hex 32 — обязательно!
|
|
- JWT_EXPIRES_IN=7d
|
|
- DB_PATH=/app/backend/data/learnspace.db
|
|
- UPLOADS_DIR=/app/backend/uploads
|
|
- CLIENT_ORIGIN=http://NAS_IP:3000 # публичный URL (для CORS); потом — домен с https
|
|
# --- необязательно ---
|
|
# TURN для видеосвязи (классы/доска) за NAT:
|
|
# - TURN_URL=turn:turn.example.com:3478
|
|
# - TURN_USER=user
|
|
# - TURN_PASS=pass
|
|
# LLM «Спроси» (Groq и т.п.):
|
|
# - ASSISTANT_LLM_URL=https://api.groq.com/openai/v1/chat/completions
|
|
# - ASSISTANT_LLM_KEY=
|
|
# - ASSISTANT_LLM_MODEL=llama-3.3-70b-versatile
|
|
healthcheck:
|
|
test: ["CMD", "wget", "-qO-", "http://localhost:3000/api/health"]
|
|
interval: 30s
|
|
timeout: 5s
|
|
start_period: 40s # запас на первичные миграции при первом старте
|
|
retries: 3
|