File size: 3,165 Bytes
a8a723c
484ec23
 
 
 
a8a723c
484ec23
a8a723c
 
 
484ec23
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
---
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`.