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

Этот коммит содержится в:
Виктор
2026-05-09 02:08:38 +09:00
родитель 870943cf4a
Коммит 5588ad1c5f
+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;
- проверить создание комнаты, отправку сообщений и файлов; - проверить создание комнаты, отправку сообщений и файлов;