Зафиксирован импорт FluffyChat в SWChat-App и переход к сборке клиента
Этот коммит содержится в:
+23
-137
@@ -14,12 +14,20 @@
|
|||||||
- основной виджет StackWorks / https://widget.stackworks.ru/;
|
- основной виджет StackWorks / https://widget.stackworks.ru/;
|
||||||
- текущие сайты и домены FastPanel.
|
- текущие сайты и домены FastPanel.
|
||||||
|
|
||||||
|
## Клиентские репозитории
|
||||||
|
|
||||||
|
Клиентское приложение вынесено отдельно от Core:
|
||||||
|
- Core/backend/docs: https://github.com/viktor138irk/SWChat
|
||||||
|
- App/client: https://github.com/viktor138irk/SWChat-App
|
||||||
|
|
||||||
|
SWChat-App создан как отдельный репозиторий для Flutter/FluffyChat клиента.
|
||||||
|
FluffyChat импортирован в SWChat-App.
|
||||||
|
Найден pubspec.yaml upstream FluffyChat: name fluffychat, version 2.6.0+3553, Flutter/Dart SDK >=3.11.1 <4.0.0.
|
||||||
|
|
||||||
## Текущая архитектура установки
|
## Текущая архитектура установки
|
||||||
|
|
||||||
Принято решение ставить SWChat Core на отдельный новый сервер.
|
Принято решение ставить SWChat Core на отдельный новый сервер.
|
||||||
|
|
||||||
Старый сервер с FastPanel используется только для будущего frontend/web-клиента, без размещения Matrix/PostgreSQL/TURN.
|
|
||||||
|
|
||||||
Разделение:
|
Разделение:
|
||||||
- новый сервер: Matrix Synapse, PostgreSQL, TURN/STUN, backend, media storage, backups;
|
- новый сервер: Matrix Synapse, PostgreSQL, TURN/STUN, backend, media storage, backups;
|
||||||
- FastPanel-сервер: домены, frontend/web-client, публичная витрина и reverse proxy, без размещения PostgreSQL/TURN и без вмешательства в чужие production-проекты.
|
- FastPanel-сервер: домены, frontend/web-client, публичная витрина и reverse proxy, без размещения PostgreSQL/TURN и без вмешательства в чужие production-проекты.
|
||||||
@@ -27,14 +35,6 @@
|
|||||||
## Стратегия тестирования
|
## Стратегия тестирования
|
||||||
|
|
||||||
Сначала SWChat Core тестируется через официальные Matrix-клиенты.
|
Сначала SWChat Core тестируется через официальные Matrix-клиенты.
|
||||||
|
|
||||||
Порядок:
|
|
||||||
1. Поднять и проверить Matrix/Synapse на Core-сервере.
|
|
||||||
2. Проверить локальный Matrix endpoint.
|
|
||||||
3. Настроить публичный домен matrix.stackworks.ru.
|
|
||||||
4. Проверить вход, регистрацию, комнаты, сообщения и файлы через официальные клиенты Matrix/Element.
|
|
||||||
5. Только после успешного тестирования официальными клиентами начинать разработку собственного Android/Web-клиента SWChat.
|
|
||||||
|
|
||||||
Свой клиент не писать, пока не подтверждено, что серверная часть работает стабильно через официальные клиенты.
|
Свой клиент не писать, пока не подтверждено, что серверная часть работает стабильно через официальные клиенты.
|
||||||
|
|
||||||
## Жёсткое правило про FastPanel
|
## Жёсткое правило про FastPanel
|
||||||
@@ -59,8 +59,6 @@
|
|||||||
- готовить backup-скрипты;
|
- готовить backup-скрипты;
|
||||||
- описывать, что пользователь может сделать вручную в FastPanel.
|
- описывать, что пользователь может сделать вручную в FastPanel.
|
||||||
|
|
||||||
Применение любых изменений в FastPanel — только после отдельной явной команды пользователя.
|
|
||||||
|
|
||||||
## Постоянное правило ведения .sw
|
## Постоянное правило ведения .sw
|
||||||
|
|
||||||
Файл .sw является главным журналом проекта и ведётся постоянно.
|
Файл .sw является главным журналом проекта и ведётся постоянно.
|
||||||
@@ -78,11 +76,10 @@
|
|||||||
|
|
||||||
В новом диалоге продолжение проекта начинается с чтения .sw.
|
В новом диалоге продолжение проекта начинается с чтения .sw.
|
||||||
|
|
||||||
## Важно про widget.stackworks.ru
|
## Защищённые проекты
|
||||||
|
|
||||||
widget.stackworks.ru — отдельный действующий production-проект StackWorks.
|
widget.stackworks.ru — отдельный действующий production-проект StackWorks.
|
||||||
|
ArtistFlow должен оставаться нетронутым.
|
||||||
На текущем этапе SWChat НЕ связывается с widget.stackworks.ru и НЕ создаёт новый виджет.
|
|
||||||
|
|
||||||
Запрещено без отдельной явной команды:
|
Запрещено без отдельной явной команды:
|
||||||
- менять vhost/config домена widget.stackworks.ru;
|
- менять vhost/config домена widget.stackworks.ru;
|
||||||
@@ -90,17 +87,9 @@ widget.stackworks.ru — отдельный действующий production-п
|
|||||||
- затирать файлы виджета;
|
- затирать файлы виджета;
|
||||||
- менять SSL и настройки домена;
|
- менять SSL и настройки домена;
|
||||||
- интегрировать виджет с Matrix;
|
- интегрировать виджет с Matrix;
|
||||||
- создавать новый параллельный виджет для SWChat.
|
- создавать новый параллельный виджет для SWChat;
|
||||||
|
- менять vhost/config домена artistflow.ru;
|
||||||
## Важно про ArtistFlow
|
- трогать MySQL/БД ArtistFlow.
|
||||||
|
|
||||||
ArtistFlow должен оставаться нетронутым:
|
|
||||||
- не менять vhost/config домена artistflow.ru;
|
|
||||||
- не перезаписывать общий nginx.conf FastPanel;
|
|
||||||
- не ставить новый Nginx поверх FastPanel;
|
|
||||||
- не трогать MySQL/БД ArtistFlow;
|
|
||||||
- не занимать порты FastPanel и текущих сайтов;
|
|
||||||
- перед изменениями nginx/FastPanel делать backup конфигов.
|
|
||||||
|
|
||||||
## Принятая архитектура SWChat
|
## Принятая архитектура SWChat
|
||||||
|
|
||||||
@@ -114,18 +103,9 @@ SWChat Core разворачивается на отдельном сервер
|
|||||||
- Android-приложение — отдельный клиент Matrix, позже брендированный под SWChat/StackWorks;
|
- Android-приложение — отдельный клиент Matrix, позже брендированный под SWChat/StackWorks;
|
||||||
- FastPanel/Nginx reverse proxy — основной публичный HTTPS слой для SWChat.
|
- FastPanel/Nginx reverse proxy — основной публичный HTTPS слой для SWChat.
|
||||||
|
|
||||||
## Клиентские репозитории
|
|
||||||
|
|
||||||
Клиентское приложение вынесено отдельно от Core:
|
|
||||||
- Core/backend/docs: https://github.com/viktor138irk/SWChat
|
|
||||||
- App/client: https://github.com/viktor138irk/SWChat-App
|
|
||||||
|
|
||||||
SWChat-App создан как отдельный репозиторий для Flutter/FluffyChat клиента.
|
|
||||||
|
|
||||||
## Основная публичная схема
|
## Основная публичная схема
|
||||||
|
|
||||||
Выбрана архитектура:
|
Выбрана архитектура:
|
||||||
|
|
||||||
FastPanel reverse proxy → SWChat Core.
|
FastPanel reverse proxy → SWChat Core.
|
||||||
|
|
||||||
Поток трафика:
|
Поток трафика:
|
||||||
@@ -151,8 +131,6 @@ FastPanel reverse proxy → SWChat Core.
|
|||||||
- поиск по сообщениям;
|
- поиск по сообщениям;
|
||||||
- медиа/файлы внутри профиля чата.
|
- медиа/файлы внутри профиля чата.
|
||||||
|
|
||||||
Внутри Matrix личный диалог всё равно является direct room, а групповой чат — room, но пользователь не должен видеть техническую терминологию «комнаты», room_id, aliases и federation-механику.
|
|
||||||
|
|
||||||
Правило UX:
|
Правило UX:
|
||||||
- основной ориентир интерфейса — Telegram;
|
- основной ориентир интерфейса — Telegram;
|
||||||
- не использовать слово «комната» в пользовательском интерфейсе SWChat;
|
- не использовать слово «комната» в пользовательском интерфейсе SWChat;
|
||||||
@@ -164,21 +142,12 @@ FastPanel reverse proxy → SWChat Core.
|
|||||||
|
|
||||||
## Приватная сеть между серверами
|
## Приватная сеть между серверами
|
||||||
|
|
||||||
Зафиксировано: FastPanel proxy сервер и SWChat Core объединены в локальную сеть.
|
FastPanel proxy сервер и SWChat Core объединены в локальную сеть.
|
||||||
|
|
||||||
Текущие private IP:
|
Текущие private IP:
|
||||||
- FastPanel proxy: 192.168.0.221;
|
- FastPanel proxy: 192.168.0.221;
|
||||||
- SWChat Matrix/Core: 192.168.0.141.
|
- SWChat Matrix/Core: 192.168.0.141.
|
||||||
|
|
||||||
Это предпочтительная production-схема.
|
|
||||||
|
|
||||||
Преимущества:
|
|
||||||
- Matrix port 8008 не публикуется в интернет;
|
|
||||||
- FastPanel proxy подключается к Synapse по private IP;
|
|
||||||
- снижается поверхность атаки;
|
|
||||||
- упрощается firewall;
|
|
||||||
- Core-сервер становится изолированным backend-узлом.
|
|
||||||
|
|
||||||
Рекомендованная схема:
|
Рекомендованная схема:
|
||||||
- FastPanel proxy имеет public IP;
|
- FastPanel proxy имеет public IP;
|
||||||
- Core-сервер использует private IP 192.168.0.141;
|
- Core-сервер использует private IP 192.168.0.141;
|
||||||
@@ -196,29 +165,6 @@ FastPanel reverse proxy → SWChat Core.
|
|||||||
- выпустить SSL для matrix.stackworks.ru;
|
- выпустить SSL для matrix.stackworks.ru;
|
||||||
- настроить для этого сайта reverse proxy на http://192.168.0.141:8008.
|
- настроить для этого сайта reverse proxy на http://192.168.0.141:8008.
|
||||||
|
|
||||||
FastPanel/Nginx сам разрулит поддомены по vhost/server_name.
|
|
||||||
|
|
||||||
## Вариант с другим FastPanel-сервером
|
|
||||||
|
|
||||||
Можно разместить публичные домены SWChat на другом нашем сервере с FastPanel, если этот сервер не является текущим production-сервером ArtistFlow/widget.stackworks.ru.
|
|
||||||
|
|
||||||
Разрешённая роль такого FastPanel-сервера:
|
|
||||||
- держать DNS/домены и SSL для chat.stackworks.ru, messenger.stackworks.ru, matrix.stackworks.ru;
|
|
||||||
- размещать web-клиент SWChat;
|
|
||||||
- работать как reverse proxy до Core-сервера с Matrix Synapse;
|
|
||||||
- отдавать статическую витрину/лендинг/документацию SWChat.
|
|
||||||
|
|
||||||
Нежелательная роль FastPanel-сервера:
|
|
||||||
- размещать PostgreSQL Matrix;
|
|
||||||
- размещать TURN/STUN для звонков;
|
|
||||||
- хранить тяжёлые media/backups Matrix;
|
|
||||||
- смешивать Matrix Core с чужими production-проектами.
|
|
||||||
|
|
||||||
Предпочтительная схема:
|
|
||||||
- Core-сервер: Synapse, PostgreSQL, media, backups, TURN позже;
|
|
||||||
- отдельный FastPanel-сервер: домены, SSL, frontend и proxy;
|
|
||||||
- старый production FastPanel с ArtistFlow/widget.stackworks.ru не трогать.
|
|
||||||
|
|
||||||
## Домены проекта
|
## Домены проекта
|
||||||
|
|
||||||
Рекомендуемая безопасная схема:
|
Рекомендуемая безопасная схема:
|
||||||
@@ -237,30 +183,8 @@ FastPanel/Nginx сам разрулит поддомены по vhost/server_nam
|
|||||||
- /opt/swchat/backups — резервные копии;
|
- /opt/swchat/backups — резервные копии;
|
||||||
- /opt/swchat/logs — логи.
|
- /opt/swchat/logs — логи.
|
||||||
|
|
||||||
## Что понадобится на новом Core-сервере
|
|
||||||
|
|
||||||
- Ubuntu 24.04 или Ubuntu 22.04;
|
|
||||||
- root-доступ;
|
|
||||||
- Docker Engine;
|
|
||||||
- Docker Compose plugin;
|
|
||||||
- PostgreSQL в контейнере;
|
|
||||||
- Matrix Synapse в контейнере;
|
|
||||||
- FastPanel reverse proxy на отдельном сервере;
|
|
||||||
- приватная сеть/VPN между серверами;
|
|
||||||
- coturn позже;
|
|
||||||
- отдельные DNS-записи на proxy FastPanel сервер или wildcard-запись *.stackworks.ru на него.
|
|
||||||
|
|
||||||
## MVP проекта
|
## MVP проекта
|
||||||
|
|
||||||
Первая рабочая цель:
|
|
||||||
1. Подготовить базовый репозиторий.
|
|
||||||
2. Поднять Matrix Synapse на отдельном Core-сервере.
|
|
||||||
3. Подключить PostgreSQL.
|
|
||||||
4. Проверить локальный Matrix endpoint.
|
|
||||||
5. Подготовить DNS/proxy инструкции без изменения production FastPanel.
|
|
||||||
6. Протестировать через официальные Matrix-клиенты.
|
|
||||||
7. Только после этого подготовить Android/Web-клиент SWChat.
|
|
||||||
|
|
||||||
Минимальные функции:
|
Минимальные функции:
|
||||||
- регистрация/вход;
|
- регистрация/вход;
|
||||||
- личные сообщения;
|
- личные сообщения;
|
||||||
@@ -305,53 +229,26 @@ FastPanel/Nginx сам разрулит поддомены по vhost/server_nam
|
|||||||
- Исправлена проблема compose down без env: POSTGRES_PASSWORD получил безопасный fallback.
|
- Исправлена проблема compose down без env: POSTGRES_PASSWORD получил безопасный fallback.
|
||||||
- SWChat Core успешно поднялся на новом сервере: swchat-synapse healthy, swchat-postgres up.
|
- SWChat Core успешно поднялся на новом сервере: swchat-synapse healthy, swchat-postgres up.
|
||||||
- Локальный Matrix endpoint успешно отвечает: curl http://127.0.0.1:8008/_matrix/client/versions вернул HTTP 200 OK и JSON версий Matrix API.
|
- Локальный Matrix endpoint успешно отвечает: curl http://127.0.0.1:8008/_matrix/client/versions вернул HTTP 200 OK и JSON версий Matrix API.
|
||||||
- Зафиксировано, что widget.stackworks.ru — отдельный production-виджет StackWorks.
|
|
||||||
- Зафиксировано, что widget.stackworks.ru пока никак не связывается с Matrix/SWChat.
|
|
||||||
- Зафиксировано, что новый виджет SWChat не планируется.
|
|
||||||
- Зафиксировано постоянное правило: файл .sw ведётся всегда и обновляется после каждого значимого шага.
|
|
||||||
- Зафиксировано жёсткое правило: всё, что касается FastPanel, самостоятельно не трогать; только готовить инструкции и шаблоны до отдельной явной команды пользователя.
|
|
||||||
|
|
||||||
2026-05-09:
|
2026-05-09:
|
||||||
- Версия проекта повышена до 0.1.1.
|
- Версия проекта повышена до 0.1.1.
|
||||||
- В docker-compose.yml добавлен отдельный контейнер swchat-caddy.
|
- В docker-compose.yml добавлен отдельный контейнер swchat-caddy.
|
||||||
- Принято решение использовать Caddy как основной HTTPS reverse proxy для SWChat Core.
|
|
||||||
- Создан deploy/caddy/Caddyfile.
|
- Создан deploy/caddy/Caddyfile.
|
||||||
- HTTPS реализуется полностью на отдельном Core-сервере без участия FastPanel.
|
|
||||||
- Caddy проксирует HTTPS-трафик на локальный Matrix Synapse 127.0.0.1:8008.
|
|
||||||
- Добавлены постоянные директории хранения Caddy data/config/logs.
|
|
||||||
- Обновлён scripts/healthcheck.sh.
|
- Обновлён scripts/healthcheck.sh.
|
||||||
- Исправлено старое имя WSMessenger в healthcheck.
|
|
||||||
- Healthcheck теперь дополнительно проверяет 80/443 порты и локальный Matrix endpoint.
|
|
||||||
- Рассмотрен вариант размещения публичных доменов SWChat на другом нашем сервере с FastPanel.
|
|
||||||
- Зафиксировано: отдельный FastPanel-сервер можно использовать для доменов, SSL, web-клиента и reverse proxy до Core-сервера.
|
|
||||||
- Зафиксировано: Matrix Core, PostgreSQL, media storage, backups и TURN/STUN лучше держать на отдельном Core-сервере, а не внутри FastPanel.
|
|
||||||
- Зафиксировано: текущий production FastPanel с ArtistFlow/widget.stackworks.ru не трогать.
|
|
||||||
- Принято финальное решение использовать схему FastPanel reverse proxy → SWChat Core.
|
- Принято финальное решение использовать схему FastPanel reverse proxy → SWChat Core.
|
||||||
- Создан docs/FASTPANEL_REVERSE_PROXY.md.
|
- Создан docs/FASTPANEL_REVERSE_PROXY.md.
|
||||||
- Зафиксирована схема ограничения доступа к Matrix port 8008 только с IP FastPanel proxy сервера.
|
|
||||||
- Зафиксировано: SSL и публичные домены обслуживаются FastPanel/Nginx.
|
|
||||||
- Зафиксировано: Synapse остаётся изолированным на Core-сервере.
|
|
||||||
- Зафиксировано: между FastPanel proxy и SWChat Core можно использовать приватную сеть/VPN.
|
|
||||||
- Создан docs/PRIVATE_NETWORK_BETWEEN_SERVERS.md.
|
- Создан docs/PRIVATE_NETWORK_BETWEEN_SERVERS.md.
|
||||||
- Зафиксировано: private network между серверами является предпочтительной production-схемой.
|
|
||||||
- Уточнены реальные private IP: FastPanel proxy 192.168.0.221, Matrix/Core 192.168.0.141.
|
- Уточнены реальные private IP: FastPanel proxy 192.168.0.221, Matrix/Core 192.168.0.141.
|
||||||
- Зафиксировано: proxy_pass должен идти на http://192.168.0.141:8008.
|
|
||||||
- Зафиксировано: доступ к Core:8008 разрешать только с 192.168.0.221.
|
|
||||||
- Проверено с FastPanel proxy: curl http://192.168.0.141:8008/_matrix/client/versions успешно вернул JSON Matrix API.
|
- Проверено с FastPanel proxy: curl http://192.168.0.141:8008/_matrix/client/versions успешно вернул JSON Matrix API.
|
||||||
- Зафиксировано: связка FastPanel proxy → Matrix/Core по локальной сети работает.
|
|
||||||
- Зафиксировано: если stackworks.ru и wildcard-поддомены уже направлены на FastPanel, matrix.stackworks.ru можно разрулить созданием отдельного сайта/vhost в FastPanel без отдельной DNS-записи.
|
|
||||||
- Проверено: https://matrix.stackworks.ru/_matrix/client/versions через FastPanel reverse proxy успешно вернул Matrix API JSON.
|
- Проверено: https://matrix.stackworks.ru/_matrix/client/versions через FastPanel reverse proxy успешно вернул Matrix API JSON.
|
||||||
- Зафиксировано: публичный HTTPS endpoint Matrix через FastPanel работает.
|
- Публичный HTTPS endpoint Matrix через FastPanel работает.
|
||||||
- При создании первого пользователя поймана ошибка UnicodeEncodeError из-за битого/кириллического символа в localpart имени пользователя.
|
|
||||||
- Зафиксировано: первого администратора Matrix создавать только латиницей и цифрами, например admin или stackworks_admin.
|
|
||||||
- Проверено: registration_shared_secret присутствует в /opt/swchat/data/synapse/homeserver.yaml.
|
- Проверено: registration_shared_secret присутствует в /opt/swchat/data/synapse/homeserver.yaml.
|
||||||
- Зафиксировано: bootstrap-регистрация администратора через register_new_matrix_user разрешена.
|
- Зафиксировано: bootstrap-регистрация администратора через register_new_matrix_user разрешена.
|
||||||
- При входе в Element пойман M_LIMIT_EXCEEDED после нескольких попыток авторизации.
|
- При входе в Element пойман M_LIMIT_EXCEEDED после нескольких попыток авторизации.
|
||||||
- Зафиксировано: M_LIMIT_EXCEEDED означает временный rate limit Synapse, а не ошибку SSL/proxy или отключённую регистрацию.
|
- Принято UX-решение: SWChat делать максимально в стиле Telegram.
|
||||||
- Принято UX-решение: в собственном клиенте SWChat скрывать комнатную структуру Matrix и показывать интерфейс как в обычных мессенджерах — чаты, диалоги, группы, контакты.
|
- Репозиторий клиентского приложения подтверждён: https://github.com/viktor138irk/SWChat-App.
|
||||||
- Принято UX-решение: SWChat делать максимально в стиле Telegram, так как это основной удобный ориентир пользовательского интерфейса.
|
- FluffyChat импортирован в SWChat-App.
|
||||||
- Репозиторий клиентского приложения переименован и подтверждён: https://github.com/viktor138irk/SWChat-App.
|
- Проверен pubspec.yaml FluffyChat в SWChat-App.
|
||||||
- Зафиксировано разделение: SWChat — Core/backend/docs, SWChat-App — Flutter/FluffyChat клиент.
|
|
||||||
|
|
||||||
## Текущий этап установки
|
## Текущий этап установки
|
||||||
|
|
||||||
@@ -360,24 +257,13 @@ SWChat Core локально работает на новом отдельном
|
|||||||
Публичный HTTPS endpoint через FastPanel reverse proxy работает:
|
Публичный HTTPS endpoint через FastPanel reverse proxy работает:
|
||||||
- https://matrix.stackworks.ru/_matrix/client/versions возвращает Matrix API JSON.
|
- https://matrix.stackworks.ru/_matrix/client/versions возвращает Matrix API JSON.
|
||||||
|
|
||||||
Текущий выбранный этап:
|
Клиентский репозиторий SWChat-App содержит импортированный FluffyChat и готов к первичной сборке.
|
||||||
- отдельный FastPanel reverse proxy сервер с private IP 192.168.0.221;
|
|
||||||
- публичный SSL через FastPanel;
|
|
||||||
- приватная сеть между FastPanel и Core;
|
|
||||||
- Matrix Synapse на Core с private IP 192.168.0.141;
|
|
||||||
- локальный доступ FastPanel → Core:8008 подтверждён;
|
|
||||||
- публичный доступ Internet → FastPanel → Core подтверждён;
|
|
||||||
- registration_shared_secret найден;
|
|
||||||
- временный rate limit авторизации Synapse активировался после повторных попыток входа;
|
|
||||||
- для будущего приложения выбран Telegram-like UX без отображения Matrix rooms пользователю;
|
|
||||||
- клиентский репозиторий SWChat-App готов к импорту FluffyChat.
|
|
||||||
|
|
||||||
## Следующий шаг
|
## Следующий шаг
|
||||||
|
|
||||||
Следующий этап:
|
Следующий этап:
|
||||||
- импортировать FluffyChat в https://github.com/viktor138irk/SWChat-App;
|
- собрать SWChat-App локально: flutter pub get, flutter run или flutter build apk;
|
||||||
- затем начать ребрендинг: название SWChat, package id, default homeserver matrix.stackworks.ru, логотипы и Telegram-like UX;
|
- затем начать ребрендинг: название SWChat, package id, default homeserver matrix.stackworks.ru, логотипы и Telegram-like UX;
|
||||||
- проверить создание пользователя stackworks_admin через register_new_matrix_user;
|
|
||||||
- проверить вход через Element по homeserver https://matrix.stackworks.ru;
|
- проверить вход через Element по homeserver https://matrix.stackworks.ru;
|
||||||
- закрыть прямой доступ к Core:8008 из интернета и разрешить только 192.168.0.221;
|
- закрыть прямой доступ к Core:8008 из интернета и разрешить только 192.168.0.221;
|
||||||
- проверить создание комнаты, отправку сообщений и файлов;
|
- проверить создание комнаты, отправку сообщений и файлов;
|
||||||
|
|||||||
Ссылка в новой задаче
Block a user