Все 40 резервных копий лежали на том же диске, что и оригинал, а фотографии не дублировались нигде: смерть диска уносила и 59 записей, и 69 снимков. Что появилось: - «📦 Скачать архив» — zip с базой и всеми фотографиями (13 МБ на текущих данных). Работает и с телефона, годится для переноса на другой компьютер. - «📥 Загрузить архив» — восстановление. Сначала показывает, что внутри (сколько вещей в архиве против текущих), и только после подтверждения заменяет данные. Прежнее состояние откладывается в data/backups — и база, и папка со старыми фотографиями. - HLAMINGO_BACKUP_DIR — путь, куда сама уходит копия базы и новых фотографий. Не чаще раза в час и только если путь доступен: сетевой диск отваливается регулярно, а терять запись о вещи из-за этого недопустимо. Состояние и кнопка «Скопировать сейчас» — на вкладке настроек. Имена файлов из архива как пути не используются: только базовое имя и расширение из белого списка. Иначе архив со строкой «../../» писал бы куда угодно — тест это проверяет отдельно. Попутно исправлены два дефекта: - предел загрузки был 8 МБ, и архив в 13 МБ не прошёл бы. Разделён на общий предел запроса и отдельный предел для одного снимка; - настройки нельзя было менять по одной: непереданные поля приходили как null и валились на проверке. Теперь null означает «не трогать», а пустая строка — осознанное «очистить». Про защиту копий на сервере. Задумывался .htaccess, но сайты обслуживает nginx, который его игнорирует, — файл создавал бы ложное чувство защиты. Настоящая защита в расположении: папка лежит рядом с корнем сайта, а не внутри, и nginx за пределы своего root не выпускает. Проверено запросами извне: и сама папка, и db.json, и фотографии дают 404, включая попытку выйти через «/../». .htaccess положен рядом как подстраховка на случай переезда на Apache, о чём честно написано внутри самого файла. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
29 lines
1.6 KiB
Bash
29 lines
1.6 KiB
Bash
# Пример настроек. Скопируйте в .env и поправьте под себя.
|
|
# Файл .env в репозиторий не попадает.
|
|
|
|
# Адрес Ollama. Если Ollama на этом же компьютере — оставьте localhost.
|
|
# Если на другой машине в локальной сети — укажите её адрес.
|
|
OLLAMA_HOST=http://localhost:11434
|
|
|
|
# Модель для разбора свободных фраз. Должна быть установлена в Ollama:
|
|
# ollama pull qwen3:8b
|
|
# HLAMINGO_CHAT_MODEL=qwen3:8b
|
|
|
|
# Модель для эмбеддингов (поиск по смыслу). Необязательна — без неё
|
|
# работает поиск по словам и тегам:
|
|
# ollama pull bge-m3
|
|
# HLAMINGO_EMBED_MODEL=bge-m3
|
|
|
|
# Модель, которая смотрит на фотографии и подсказывает название вещи.
|
|
# Необязательна — пустое значение выключает подсказку:
|
|
# ollama pull gemma3:4b
|
|
# HLAMINGO_VISION_MODEL=gemma3:4b
|
|
|
|
# Куда складывать копию базы и фотографий ВНЕ этого компьютера.
|
|
# Сетевой диск или папка; пусто — внешние копии выключены.
|
|
# Локальные копии в data/backups лежат на том же диске и от его смерти не спасают.
|
|
# HLAMINGO_BACKUP_DIR=T:\hlamingo-backup
|
|
|
|
# Порт веб-интерфейса.
|
|
# HLAMINGO_PORT=5000
|