diff --git a/docs/FASTPANEL_REVERSE_PROXY.md b/docs/FASTPANEL_REVERSE_PROXY.md new file mode 100644 index 0000000..390352c --- /dev/null +++ b/docs/FASTPANEL_REVERSE_PROXY.md @@ -0,0 +1,118 @@ +# SWChat: FastPanel reverse proxy → Core + +Эта схема выбрана для публичного доступа к SWChat. + +## Роль серверов + +### Core-сервер + +На Core-сервере работают: +- Matrix Synapse; +- PostgreSQL; +- media storage; +- backups; +- будущий TURN/STUN. + +Core-сервер не обязан принимать публичные HTTPS-домены напрямую. + +### FastPanel-сервер + +Отдельный FastPanel-сервер принимает публичные домены и SSL: +- `matrix.stackworks.ru` — proxy до Synapse на Core-сервере; +- `chat.stackworks.ru` или `messenger.stackworks.ru` — web-клиент SWChat; +- `api-chat.stackworks.ru` — будущий backend API, если понадобится. + +Текущий production FastPanel с ArtistFlow/widget.stackworks.ru не трогать. + +## DNS + +A-записи доменов SWChat должны указывать на IP FastPanel-сервера, который будет reverse proxy: + +```text +matrix.stackworks.ru A FASTPANEL_PROXY_IP +chat.stackworks.ru A FASTPANEL_PROXY_IP +messenger.stackworks.ru A FASTPANEL_PROXY_IP +api-chat.stackworks.ru A FASTPANEL_PROXY_IP +``` + +## Core-сервер + +Synapse должен быть доступен с FastPanel-сервера по адресу: + +```text +http://CORE_SERVER_IP:8008 +``` + +Если порт `8008` закрыт firewall, нужно разрешить доступ только с IP FastPanel-сервера. + +Пример UFW на Core-сервере: + +```bash +ufw allow from FASTPANEL_PROXY_IP to any port 8008 proto tcp +ufw deny 8008/tcp +``` + +Важно: сначала разрешить FastPanel IP, потом закрывать общий доступ. + +## Nginx proxy-шаблон для matrix.stackworks.ru + +Этот шаблон добавляется только в отдельном FastPanel-сервере для домена `matrix.stackworks.ru`. + +`CORE_SERVER_IP` заменить на IP Core-сервера. + +```nginx +location / { + proxy_pass http://CORE_SERVER_IP:8008; + + proxy_http_version 1.1; + proxy_set_header Host $host; + proxy_set_header X-Real-IP $remote_addr; + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto https; + + client_max_body_size 100M; + proxy_read_timeout 600s; + proxy_send_timeout 600s; +} +``` + +## Проверка с FastPanel-сервера + +```bash +curl -I http://CORE_SERVER_IP:8008/_matrix/client/versions +curl http://CORE_SERVER_IP:8008/_matrix/client/versions +``` + +Ожидается HTTP 200 и JSON Matrix API. + +## Проверка публичного домена + +После DNS и SSL: + +```bash +curl -I https://matrix.stackworks.ru/_matrix/client/versions +curl https://matrix.stackworks.ru/_matrix/client/versions +``` + +Ожидается HTTP 200 и JSON Matrix API. + +## Важное ограничение + +Для стабильной работы Matrix server name должен совпадать с публичным именем в конфиге Synapse: + +```text +SERVER_NAME=matrix.stackworks.ru +public_baseurl: https://matrix.stackworks.ru/ +``` + +Если имя сервера будет изменено после создания пользователей, могут появиться проблемы с федерацией и ID пользователей. + +## Следующий шаг + +1. Настроить DNS `matrix.stackworks.ru` на FastPanel proxy server. +2. Выпустить SSL на FastPanel для `matrix.stackworks.ru`. +3. Добавить proxy до `http://CORE_SERVER_IP:8008`. +4. Ограничить доступ к Core:8008 только IP FastPanel-сервера. +5. Проверить Matrix API через публичный HTTPS. +6. Создать первого Matrix-пользователя. +7. Проверить вход через Element.