v0.1 - макет интерфейса, аутентификация через логин, аккаунт админа, создание партии в 2 этапа, базовые настройки профиля и группы, переключение между группами, статистика
This commit is contained in:
@@ -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"
|
||||
@@ -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"
|
||||
@@ -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"
|
||||
Reference in New Issue
Block a user