feat(storage): S3-совместимое хранилище файлов (SeaweedFS/MinIO) и миграция uploads
- storage.js: абстракция хранилища с драйверами local и s3 (AWS SDK v3), ключи объектов совпадают с текущими путями /uploads/<файл>, поэтому схема БД и URL не меняются - docker-compose.yml: сервис s3 (SeaweedFS, том s3-data, API только на loopback), переменные S3_*/STORAGE_*, restart unless-stopped для app и db - docker-compose.minio.yml: оверрайд S3-сервиса на MinIO (образ из своего зеркала) - server.js/worker.js: чтение и запись файлов только через storage (отдача /uploads/*, миниатюры, share-файлы, zip-отчёты, enhance/apply/rollback, photo-worker), автосоздание бакета, глобальная персистенция загрузок multer - бэкап/восстановление и scripts/backup.sh, restore.sh — через scripts/storage-sync.js - scripts/migrate-to-s3.js: идемпотентная миграция uploads/ в бакет (--dry-run, --verify-only, --delete-local) - админка: блок «Хранилище» в системной информации - .env.example, README.md, AGENTS.md: описание драйверов, переменных и перехода на S3
This commit is contained in:
@@ -31,3 +31,29 @@ WG_HANDSHAKE_TIMEOUT=60
|
||||
# ИИ-улучшение фото (Real-ESRGAN), пусто = контейнер photo-ai
|
||||
PHOTO_AI_URL=
|
||||
PHOTO_AI_MAX_PIXELS=4000000
|
||||
|
||||
# === Хранилище файлов (S3: SeaweedFS по умолчанию / MinIO) ===
|
||||
# local — файлы в ./uploads (по умолчанию), s3 — объекты в бакете S3/MinIO.
|
||||
STORAGE_DRIVER=local
|
||||
# Читать локальную копию, если объект ещё не перенесён в S3 (1 — включено).
|
||||
STORAGE_LOCAL_FALLBACK=1
|
||||
# Оставлять локальную копию после выгрузки в S3 (1 — оставлять, 0 — удалять).
|
||||
STORAGE_KEEP_LOCAL=0
|
||||
# Сколько часов хранить локальный кэш оригиналов (для sharp/миниатюр), 0 — не чистить.
|
||||
STORAGE_CACHE_MAX_AGE_HOURS=168
|
||||
# Образ S3-сервиса. По умолчанию SeaweedFS (свободный S3-сервер).
|
||||
# Для MinIO: S3_IMAGE=minio/minio:<тег> и запуск через docker-compose.minio.yml.
|
||||
S3_IMAGE=chrislusf/seaweedfs:latest
|
||||
S3_ENDPOINT=http://s3:9000
|
||||
S3_REGION=us-east-1
|
||||
S3_BUCKET=whatido
|
||||
# Логин/пароль S3 (для SeaweedFS — AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY,
|
||||
# для MinIO — MINIO_ROOT_USER/MINIO_ROOT_PASSWORD).
|
||||
S3_ACCESS_KEY=whatido
|
||||
S3_SECRET_KEY=замените-на-длинный-секрет
|
||||
# Path-style адресация (1 — включено, нужно для MinIO и SeaweedFS).
|
||||
S3_FORCE_PATH_STYLE=1
|
||||
# Необязательный префикс ключей внутри бакета (например, prod).
|
||||
S3_PREFIX=
|
||||
# Показывать веб-консоль MinIO (on/off), только для docker-compose.minio.yml
|
||||
MINIO_BROWSER=off
|
||||
|
||||
Reference in New Issue
Block a user