From 5588ad1c5f5768b3db161a934e5346f8acc1fb50 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=D0=92=D0=B8=D0=BA=D1=82=D0=BE=D1=80?= <78488229+viktor138irk@users.noreply.github.com> Date: Sat, 9 May 2026 02:08:38 +0900 Subject: [PATCH] =?UTF-8?q?=D0=97=D0=B0=D1=84=D0=B8=D0=BA=D1=81=D0=B8?= =?UTF-8?q?=D1=80=D0=BE=D0=B2=D0=B0=D0=BD=20=D0=B8=D0=BC=D0=BF=D0=BE=D1=80?= =?UTF-8?q?=D1=82=20FluffyChat=20=D0=B2=20SWChat-App=20=D0=B8=20=D0=BF?= =?UTF-8?q?=D0=B5=D1=80=D0=B5=D1=85=D0=BE=D0=B4=20=D0=BA=20=D1=81=D0=B1?= =?UTF-8?q?=D0=BE=D1=80=D0=BA=D0=B5=20=D0=BA=D0=BB=D0=B8=D0=B5=D0=BD=D1=82?= =?UTF-8?q?=D0=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .sw | 160 +++++++++--------------------------------------------------- 1 file changed, 23 insertions(+), 137 deletions(-) diff --git a/.sw b/.sw index eba6786..7904cf9 100644 --- a/.sw +++ b/.sw @@ -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; - проверить создание комнаты, отправку сообщений и файлов;