правки в транспорт сообщений + немного мониторинга

This commit is contained in:
mi
2026-07-20 19:33:46 +03:00
parent d1a0f3791d
commit 3b71caf7b3
9 changed files with 644 additions and 4 deletions
+152 -1
View File
@@ -8,7 +8,7 @@
- (без спец.символов) openssl rand -hex 16
- openssl rand -base64 16 | xclip -selection clipboard # Linux
Туннель до БД: ssh -i C:\Users\MI\.ssh\hansel -L 5433:192.168.0.211:5433 root@135.106.164.58 -N
Туннель до БД: ssh -i C:\Users\MI\.ssh\hansel -L 5433:192.168.0.211:5432 root@135.106.164.58 -N
#Обновление проекта
@@ -90,6 +90,28 @@ mkdir -p ~/.postgresql/
wget https://storage.dbaas.selcloud.ru/CA.pem -O ~/.postgresql/root.crt
chmod 0600 ~/.postgresql/root.crt
### Правки DNS-маршрутизации (в прошлый раз, какие-то трабблы были с базовой маршрутизацией) - скрипт ниже создаст
sudo tee /etc/netplan/99-han-dns.yaml <<'EOF'
network:
version: 2
ethernets:
eth0:
nameservers:
addresses:
- 8.8.8.8
- 1.1.1.1
search:
- selcloud.ru
eth1:
dhcp4-overrides:
use-dns: false
use-domains: false
EOF
sudo chmod 600 /etc/netplan/99-han-dns.yaml
sudo netplan apply
resolvectl flush-caches
### Проверка подключения к Postgers в ВМ
nc -zv 192.168.0.211 5433
@@ -292,3 +314,132 @@ docker compose --env-file .env ps
docker compose --env-file .env logs --tail=200 <SERVICE_NAME>
docker inspect "$(docker compose --env-file .env ps -q <SERVICE_NAME>)"
```
## Первоначальный выпуск TLS-сертификата
Для ACME требуется работающий nginx по HTTP. В `.env` оставьте
`NGINX_TLS_ENABLED=true`, но первый nginx запустите с временным переопределением:
```sh
NGINX_TLS_ENABLED=false \
docker compose --env-file .env up -d frontend-static nginx
```
Проверьте HTTP:
```sh
curl -I http://chat.han0107.ru/
```
Сначала рекомендуется проверить Certbot через staging:
```sh
docker compose --env-file .env --profile certbot run --rm certbot certonly \
--staging \
--webroot -w /var/www/certbot \
-d chat.han0107.ru \
--cert-name chat.han0107.ru-staging \
--email ap@han.ru \
--agree-tos --no-eff-email --non-interactive
```
После успешного staging-теста выпустите рабочий сертификат с основным cert-name
без `--staging`:
```sh
docker compose --env-file .env --profile certbot run --rm certbot certonly \
--webroot -w /var/www/certbot \
-d chat.han0107.ru \
--cert-name chat.han0107.ru \
--email ap@han.ru \
--agree-tos --no-eff-email --non-interactive
```
Пересоздайте nginx уже с TLS:
```sh
docker compose --env-file .env up -d --force-recreate nginx
docker compose --env-file .env exec -T nginx nginx -t -c /tmp/nginx.conf
curl -I https://chat.han0107.ru/
```
Повторно запустите VM setup, чтобы он обнаружил проект и установил systemd-таймер
продления сертификата:
```sh
sudo /opt/han-chat/backend/deployment/scripts/setup-vm.sh
systemctl status han-chat-ssl-renew.timer
## Запуск всего контура
Теперь можно привести весь проект к состоянию, описанному Compose:
```sh
cd /opt/han-chat/backend
docker compose --env-file .env up -d
docker compose --env-file .env ps
```
Проверьте, что контейнеры не перезапускаются:
```sh
docker compose --env-file .env ps
docker compose --env-file .env logs --since=10m
```
## Публичная проверка
Запустите smoke-тест:
```sh
cd /opt/han-chat/backend
deployment/scripts/smoke.sh
```
Также вручную проверьте:
```sh
curl -fsS https://chat.han0107.ru/api/v1/public/app-config | jq
curl -fsS https://chat.han0107.ru/api/v1/public/content | jq
curl -fsS \
https://chat.han0107.ru/auth/realms/han-chat/.well-known/openid-configuration | jq
```
Внутренний API не должен быть опубликован:
```sh
curl -i https://chat.han0107.ru/internal/safety/v1/messages/check
```
Ожидаемый статус — `404`.
Откройте в браузере:
```text
https://chat.example.ru/
```
Для тестовой авторизации используйте значение `KEYCLOAK_OTP_MOCK_CODE` из `.env`.
Настройки keykcloack:
Для битрикса код установки приложения:
docker compose --env-file .env exec -T api-backend python - <<'PY'
import os
import urllib.request
base = os.environ["BITRIX_LOCAL_APP_BASE_URL"]
token = os.environ["BITRIX_LOCAL_APP_INTERNAL_TOKEN"]
request = urllib.request.Request(
base + "/internal/openlines/v1/setup/retry",
method="POST",
headers={"Authorization": "Bearer " + token},
)
print(urllib.request.urlopen(request).read().decode())
PY