salgram / README.md
ChessVania's picture
Deploy SalGram (Docker)
484ec23 verified
|
Raw
History Blame Contribute Delete
3.17 kB
---
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`.