v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика

This commit is contained in:
2026-06-16 17:41:06 +03:00
parent 6ab74f01aa
commit 56b5d09a4d
123 changed files with 13572 additions and 21 deletions
+28
View File
@@ -0,0 +1,28 @@
#!/usr/bin/env bash
# Консистентный онлайн-бэкап SQLite из работающего контейнера.
# Запуск по cron на хосте Pi, например ежедневно в 04:00:
# 0 4 * * * /home/pi/ForbidenStarsApp/scripts/backup.sh >> /var/log/fs-backup.log 2>&1
set -euo pipefail
PROJECT_DIR="$(cd "$(dirname "$0")/.." && pwd)"
BACKUP_DIR="${BACKUP_DIR:-$PROJECT_DIR/backups}"
KEEP="${KEEP:-14}"
SERVICE="app"
TS="$(date +%Y%m%d_%H%M%S)"
mkdir -p "$BACKUP_DIR"
# .backup внутри контейнера (sqlite3 модуль Python) → консистентная копия в /data.
docker compose -f "$PROJECT_DIR/docker-compose.yml" exec -T "$SERVICE" \
python -c "import sqlite3; s=sqlite3.connect('/data/forbidden_stars.db'); d=sqlite3.connect('/data/backup_tmp.db'); s.backup(d); d.close(); s.close()"
# Копируем во вне контейнера и сжимаем.
CID="$(docker compose -f "$PROJECT_DIR/docker-compose.yml" ps -q "$SERVICE")"
docker cp "$CID:/data/backup_tmp.db" "$BACKUP_DIR/fs_$TS.db"
docker compose -f "$PROJECT_DIR/docker-compose.yml" exec -T "$SERVICE" rm -f /data/backup_tmp.db
gzip -f "$BACKUP_DIR/fs_$TS.db"
# Ротация: оставить последние $KEEP.
ls -1t "$BACKUP_DIR"/fs_*.db.gz 2>/dev/null | tail -n +"$((KEEP + 1))" | xargs -r rm -f
echo "[backup] Готово: $BACKUP_DIR/fs_$TS.db.gz"
+20
View File
@@ -0,0 +1,20 @@
#!/usr/bin/env bash
# Выгрузка ПРОДА: в целевую папку попадают только файлы, нужные для запуска
# прод-контейнера (без тестов, dev-входа и тест-специфики).
#
# Использование: scripts/export-prod.sh <целевая-папка> [git-ref]
# git-ref по умолчанию HEAD; для прод-ветки: scripts/export-prod.sh /srv/fs prod
set -euo pipefail
DEST="${1:?Укажите целевую папку: scripts/export-prod.sh <dir> [ref]}"
REF="${2:-HEAD}"
mkdir -p "$DEST"
# git archive уважает export-ignore из .gitattributes (тесты, dev-вход и т.п. отсеяны)
git archive --format=tar "$REF" | tar -x -C "$DEST"
# тест/dev-специфика в проде не нужна (тест-compose и лаунчер)
rm -f "$DEST/docker-compose.test.yml" "$DEST/run.ps1" "$DEST/run.sh"
echo "[export-prod] Прод выгружен в: $DEST"
echo " дальше: cp .env.example .env && docker compose up -d --build"
+18
View File
@@ -0,0 +1,18 @@
#!/usr/bin/env bash
# Выгрузка ТЕСТА (прод-клон для локального контейнера на x86): в целевую папку
# попадают только файлы, нужные для запуска тест-контейнера.
#
# Использование: scripts/export-test.sh <целевая-папка> [git-ref]
set -euo pipefail
DEST="${1:?Укажите целевую папку: scripts/export-test.sh <dir> [ref]}"
REF="${2:-HEAD}"
mkdir -p "$DEST"
git archive --format=tar "$REF" | tar -x -C "$DEST"
# прод-compose в тест-папке не нужен (тест запускается своим docker-compose.test.yml)
rm -f "$DEST/docker-compose.yml"
echo "[export-test] Тест выгружен в: $DEST"
echo " дальше: cp .env.example .env (APP_ENV=test) && docker compose -f docker-compose.test.yml up -d --build"