--- title: SalGram emoji: 💬 colorFrom: blue colorTo: indigo sdk: docker app_port: 7860 pinned: false --- # SalGram Мессенджер на Flask + flask-sock (WebSocket) + SQLite. Аккаунты, профили, личная и групповая переписка, каналы, голосовые, GIF, push-уведомления, модерация. ## Запуск на Hugging Face Spaces Space типа **Docker**. Контейнер слушает порт `7860` (gunicorn, 1 воркер, многопоточный — этого требует хранение WebSocket-соединений в памяти процесса). ### Хранение данных Все данные (база `salgram.db`, ключ шифрования, загруженные файлы) пишутся в каталог из переменной `SALGRAM_DATA_DIR` (по умолчанию `/data`). На бесплатном Space `/data` эфемерно — при пересборке/перезапуске/«засыпании» данные пропадают. ### Резервное копирование в приватный репозиторий (бесплатная персистентность) Чтобы данные переживали перезапуски без платного Persistent storage, приложение само раз в 20 минут выгружает консистентную копию БД (вместе с ключом шифрования и медиа) в **приватный** dataset-репозиторий, а при старте контейнера восстанавливает оттуда (см. `hf_backup.py`). Код остаётся в публичном Space, а данные лежат только в приватном репо — их видишь и качаешь только ты. Включается переменными окружения (задаются в **Settings → Variables and secrets** у Space): | Переменная | Тип | Назначение | |---|---|---| | `HF_BACKUP_REPO` | variable | id приватного репо, напр. `username/salgram-data` | | `HF_TOKEN` | **secret** | токен с правом записи в этот репо | | `HF_BACKUP_INTERVAL` | variable (необяз.) | период в секундах, по умолчанию `1200` (20 мин) | Без этих переменных бэкап выключен (no-op) — локальная разработка и Amvera не затронуты. Скачать актуальную БД можно из приватного репо (файл `salgram.db`). Ключ шифрования `secret.key` и VAPID-ключи генерируются автоматически при первом запуске, если их нет (и далее переносятся бэкапом). ## Локальный запуск ```bash pip install -r requirements.txt # десктоп-версия (с pywebview/pystray) python app.py # http://localhost:8000 ``` Для веб/сервера достаточно `requirements-web.txt`.