Зафиксирован импорт FluffyChat в SWChat-App и переход к сборке клиента

Этот коммит содержится в:
Виктор
2026-05-09 02:08:38 +09:00
родитель 870943cf4a
Коммит 5588ad1c5f
+23 -137
Просмотреть файл
@@ -14,12 +14,20 @@
- основной виджет StackWorks / https://widget.stackworks.ru/;
- текущие сайты и домены 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 на отдельный новый сервер.
Старый сервер с FastPanel используется только для будущего frontend/web-клиента, без размещения Matrix/PostgreSQL/TURN.
Разделение:
- новый сервер: Matrix Synapse, PostgreSQL, TURN/STUN, backend, media storage, backups;
- FastPanel-сервер: домены, frontend/web-client, публичная витрина и reverse proxy, без размещения PostgreSQL/TURN и без вмешательства в чужие production-проекты.
@@ -27,14 +35,6 @@
## Стратегия тестирования
Сначала SWChat Core тестируется через официальные Matrix-клиенты.
Порядок:
1. Поднять и проверить Matrix/Synapse на Core-сервере.
2. Проверить локальный Matrix endpoint.
3. Настроить публичный домен matrix.stackworks.ru.
4. Проверить вход, регистрацию, комнаты, сообщения и файлы через официальные клиенты Matrix/Element.
5. Только после успешного тестирования официальными клиентами начинать разработку собственного Android/Web-клиента SWChat.
Свой клиент не писать, пока не подтверждено, что серверная часть работает стабильно через официальные клиенты.
## Жёсткое правило про FastPanel
@@ -59,8 +59,6 @@
- готовить backup-скрипты;
- описывать, что пользователь может сделать вручную в FastPanel.
Применение любых изменений в FastPanel — только после отдельной явной команды пользователя.
## Постоянное правило ведения .sw
Файл .sw является главным журналом проекта и ведётся постоянно.
@@ -78,11 +76,10 @@
В новом диалоге продолжение проекта начинается с чтения .sw.
## Важно про widget.stackworks.ru
## Защищённые проекты
widget.stackworks.ru — отдельный действующий production-проект StackWorks.
На текущем этапе SWChat НЕ связывается с widget.stackworks.ru и НЕ создаёт новый виджет.
ArtistFlow должен оставаться нетронутым.
Запрещено без отдельной явной команды:
- менять vhost/config домена widget.stackworks.ru;
@@ -90,17 +87,9 @@ widget.stackworks.ru — отдельный действующий production-п
- затирать файлы виджета;
- менять SSL и настройки домена;
- интегрировать виджет с Matrix;
- создавать новый параллельный виджет для SWChat.
## Важно про ArtistFlow
ArtistFlow должен оставаться нетронутым:
- не менять vhost/config домена artistflow.ru;
- не перезаписывать общий nginx.conf FastPanel;
- не ставить новый Nginx поверх FastPanel;
- не трогать MySQL/БД ArtistFlow;
- не занимать порты FastPanel и текущих сайтов;
- перед изменениями nginx/FastPanel делать backup конфигов.
- создавать новый параллельный виджет для SWChat;
- менять vhost/config домена artistflow.ru;
- трогать MySQL/БД ArtistFlow.
## Принятая архитектура SWChat
@@ -114,18 +103,9 @@ SWChat Core разворачивается на отдельном сервер
- Android-приложение — отдельный клиент Matrix, позже брендированный под SWChat/StackWorks;
- 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.
Поток трафика:
@@ -151,8 +131,6 @@ FastPanel reverse proxy → SWChat Core.
- поиск по сообщениям;
- медиа/файлы внутри профиля чата.
Внутри Matrix личный диалог всё равно является direct room, а групповой чат — room, но пользователь не должен видеть техническую терминологию «комнаты», room_id, aliases и federation-механику.
Правило UX:
- основной ориентир интерфейса — Telegram;
- не использовать слово «комната» в пользовательском интерфейсе SWChat;
@@ -164,21 +142,12 @@ FastPanel reverse proxy → SWChat Core.
## Приватная сеть между серверами
Зафиксировано: FastPanel proxy сервер и SWChat Core объединены в локальную сеть.
FastPanel proxy сервер и SWChat Core объединены в локальную сеть.
Текущие private IP:
- FastPanel proxy: 192.168.0.221;
- SWChat Matrix/Core: 192.168.0.141.
Это предпочтительная production-схема.
Преимущества:
- Matrix port 8008 не публикуется в интернет;
- FastPanel proxy подключается к Synapse по private IP;
- снижается поверхность атаки;
- упрощается firewall;
- Core-сервер становится изолированным backend-узлом.
Рекомендованная схема:
- FastPanel proxy имеет public IP;
- Core-сервер использует private IP 192.168.0.141;
@@ -196,29 +165,6 @@ FastPanel reverse proxy → SWChat Core.
- выпустить SSL для matrix.stackworks.ru;
- настроить для этого сайта 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/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 проекта
Первая рабочая цель:
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.
- 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.
- Зафиксировано, что widget.stackworks.ru — отдельный production-виджет StackWorks.
- Зафиксировано, что widget.stackworks.ru пока никак не связывается с Matrix/SWChat.
- Зафиксировано, что новый виджет SWChat не планируется.
- Зафиксировано постоянное правило: файл .sw ведётся всегда и обновляется после каждого значимого шага.
- Зафиксировано жёсткое правило: всё, что касается FastPanel, самостоятельно не трогать; только готовить инструкции и шаблоны до отдельной явной команды пользователя.
2026-05-09:
- Версия проекта повышена до 0.1.1.
- В docker-compose.yml добавлен отдельный контейнер swchat-caddy.
- Принято решение использовать Caddy как основной HTTPS reverse proxy для SWChat Core.
- Создан deploy/caddy/Caddyfile.
- HTTPS реализуется полностью на отдельном Core-сервере без участия FastPanel.
- Caddy проксирует HTTPS-трафик на локальный Matrix Synapse 127.0.0.1:8008.
- Добавлены постоянные директории хранения Caddy data/config/logs.
- Обновлён 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.
- Создан 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.
- Зафиксировано: private network между серверами является предпочтительной production-схемой.
- Уточнены реальные 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 → 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 endpoint Matrix через FastPanel работает.
- При создании первого пользователя поймана ошибка UnicodeEncodeError из-за битого/кириллического символа в localpart имени пользователя.
- Зафиксировано: первого администратора Matrix создавать только латиницей и цифрами, например admin или stackworks_admin.
- Публичный HTTPS endpoint Matrix через FastPanel работает.
- Проверено: registration_shared_secret присутствует в /opt/swchat/data/synapse/homeserver.yaml.
- Зафиксировано: bootstrap-регистрация администратора через register_new_matrix_user разрешена.
- При входе в Element пойман M_LIMIT_EXCEEDED после нескольких попыток авторизации.
- Зафиксировано: M_LIMIT_EXCEEDED означает временный rate limit Synapse, а не ошибку SSL/proxy или отключённую регистрацию.
- Принято UX-решение: в собственном клиенте SWChat скрывать комнатную структуру Matrix и показывать интерфейс как в обычных мессенджерах — чаты, диалоги, группы, контакты.
- Принято UX-решение: SWChat делать максимально в стиле Telegram, так как это основной удобный ориентир пользовательского интерфейса.
- Репозиторий клиентского приложения переименован и подтверждён: https://github.com/viktor138irk/SWChat-App.
- Зафиксировано разделение: SWChat — Core/backend/docs, SWChat-App — Flutter/FluffyChat клиент.
- Принято UX-решение: SWChat делать максимально в стиле Telegram.
- Репозиторий клиентского приложения подтверждён: https://github.com/viktor138irk/SWChat-App.
- FluffyChat импортирован в SWChat-App.
- Проверен pubspec.yaml FluffyChat в SWChat-App.
## Текущий этап установки
@@ -360,24 +257,13 @@ SWChat Core локально работает на новом отдельном
Публичный HTTPS endpoint через FastPanel reverse proxy работает:
- https://matrix.stackworks.ru/_matrix/client/versions возвращает Matrix API JSON.
Текущий выбранный этап:
- отдельный 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.
Клиентский репозиторий 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;
- проверить создание пользователя stackworks_admin через register_new_matrix_user;
- проверить вход через Element по homeserver https://matrix.stackworks.ru;
- закрыть прямой доступ к Core:8008 из интернета и разрешить только 192.168.0.221;
- проверить создание комнаты, отправку сообщений и файлов;