chore(deploy): адреса серверов из deploy/.env.local, а не из репозитория

DEPLOY_HOST, RELAY_HOST и TELEGRAM_BOT_ID обязательны и читаются из
неотслеживаемого deploy/.env.local (образец — .env.local.example).
This commit is contained in:
2026-10-17 17:53:18 +03:00
parent 0a9e5caa0d
commit c1d64f6a79
7 changed files with 27 additions and 9 deletions
+1
View File
@@ -33,3 +33,4 @@ playwright-report/
# бинарник детектора impeccable (16 МБ, ставится `npx impeccable install`)
.claude/skills/impeccable/scripts/bin/
.idea/
!deploy/.env.local.example
+7
View File
@@ -0,0 +1,7 @@
# Скопировать в deploy/.env.local (не коммитится) и заполнить.
# ssh-адрес VPS для deploy.sh и setup-nginx.sh
DEPLOY_HOST=root@<VPS_IP>
# ssh-адрес домашнего сервера для tg-relay/deploy.sh
RELAY_HOST=nick@<HOME_LAN_IP>
# числовая часть токена бота до двоеточия
TELEGRAM_BOT_ID=<BOT_ID>
+5 -2
View File
@@ -2,13 +2,16 @@
# Деплой «Кварты» на VPS. Запускать локально из корня репозитория:
# deploy/deploy.sh — собрать HEAD и выкатить
# deploy/deploy.sh --rollback — вернуть предыдущий тег из /root/kvarta_site/.deployed
# Хост: DEPLOY_HOST (по умолчанию root@185.5.249.52).
# Хост: DEPLOY_HOST из deploy/.env.local или окружения.
#
# На сервере рядом чужие боевые сайты: скрипт трогает только /root/kvarta_site,
# контейнеры проекта kvarta и образы kvarta-landing/kvarta-api. Никаких prune.
set -euo pipefail
DEPLOY_HOST="${DEPLOY_HOST:-root@185.5.249.52}"
# адреса серверов в репо не храним: deploy/.env.local (образец — deploy/.env.local.example)
# shellcheck source=/dev/null
[[ -f "$(dirname "$0")/.env.local" ]] && source "$(dirname "$0")/.env.local"
DEPLOY_HOST="${DEPLOY_HOST:?задайте DEPLOY_HOST в deploy/.env.local (см. deploy/.env.local.example)}"
REMOTE_DIR=/root/kvarta_site
COMPOSE_FILE=docker-compose_vps.yml
PROJECT=kvarta
+5 -2
View File
@@ -1,13 +1,16 @@
#!/usr/bin/env bash
# Однократная настройка nginx и HTTPS для kvarta.unuchak.com. Запускать локально из корня:
# CERTBOT_EMAIL=you@example.com deploy/setup-nginx.sh
# Хост: DEPLOY_HOST (по умолчанию root@185.5.249.52). Повторный запуск безопасен.
# Хост: DEPLOY_HOST из deploy/.env.local или окружения. Повторный запуск безопасен.
#
# На сервере чужие боевые сайты: при ошибке `nginx -t` наш симлинк убирается
# и reload не делается — общий nginx не должен упасть из-за нашего конфига.
set -euo pipefail
DEPLOY_HOST="${DEPLOY_HOST:-root@185.5.249.52}"
# адреса серверов в репо не храним: deploy/.env.local (образец — deploy/.env.local.example)
# shellcheck source=/dev/null
[[ -f "$(dirname "$0")/.env.local" ]] && source "$(dirname "$0")/.env.local"
DEPLOY_HOST="${DEPLOY_HOST:?задайте DEPLOY_HOST в deploy/.env.local (см. deploy/.env.local.example)}"
DOMAIN=kvarta.unuchak.com
CONF_SRC="deploy/nginx/$DOMAIN.conf"
AVAILABLE="/etc/nginx/sites-available/$DOMAIN"
+6 -3
View File
@@ -1,11 +1,14 @@
#!/usr/bin/env bash
# Ставит ретранслятор Bot API на домашний сервер. Запускать локально из корня:
# TELEGRAM_BOT_ID=8959389487 deploy/tg-relay/deploy.sh
# RELAY_HOST (по умолчанию nick@192.168.100.50), RELAY_BIND — адрес Tailscale хоста (по умолчанию его tailscale ip -4).
# deploy/tg-relay/deploy.sh (TELEGRAM_BOT_ID и RELAY_HOST — в deploy/.env.local)
# RELAY_HOST — ssh-адрес домашнего сервера, RELAY_BIND — адрес Tailscale хоста (по умолчанию его tailscale ip -4).
# Токен бота сюда не нужен: ретранслятор только пересылает запросы.
set -euo pipefail
RELAY_HOST="${RELAY_HOST:-nick@192.168.100.50}"
# адреса серверов в репо не храним: deploy/.env.local (образец — deploy/.env.local.example)
# shellcheck source=/dev/null
[[ -f "$(dirname "$0")/../.env.local" ]] && source "$(dirname "$0")/../.env.local"
RELAY_HOST="${RELAY_HOST:?задайте RELAY_HOST в deploy/.env.local (см. deploy/.env.local.example)}"
RELAY_PATH="${RELAY_PATH:-/home/nick/home_server/kvarta_tg_relay}"
: "${TELEGRAM_BOT_ID:?задайте TELEGRAM_BOT_ID — числовая часть токена до двоеточия}"
[[ $TELEGRAM_BOT_ID =~ ^[0-9]+$ ]] || { echo "TELEGRAM_BOT_ID — только цифры" >&2; exit 1; }
+2 -1
View File
@@ -11,10 +11,11 @@ kvarta-api → Tailscale → домашний сервер :8788 kvarta-tg-relay
## Первый запуск
0. `cp deploy/.env.local.example deploy/.env.local` и вписать ssh-адреса VPS и домашнего сервера и id бота — в репо адресов нет.
1. `CERTBOT_EMAIL=… deploy/setup-nginx.sh` — конфиг nginx, `nginx -t`, reload, сертификат. Повторный запуск безопасен.
2. `deploy/deploy.sh` — сборка образов `linux/amd64` локально (JS собирается нативно, нативные модули — под целевую платформу), `docker save | ssh docker load`, `docker-compose up -d`, проверка `/api/health`. Требует чистого дерева git.
3. На VPS заполнить `/root/kvarta_site/api.env` (chmod 600, скрипты его не трогают): `TELEGRAM_BOT_TOKEN`, `TELEGRAM_ADMIN_ID`, `TELEGRAM_API_BASE=http://<tailscale-ip-домашнего>:8788`.
4. `TELEGRAM_BOT_ID=<цифры токена до двоеточия> deploy/tg-relay/deploy.sh` — ретранслятор на домашнем сервере (оба узла должны быть в Tailscale; на VPS — `tailscale up --accept-dns=false`, чтобы не задеть DNS соседних сайтов).
4. `deploy/tg-relay/deploy.sh` — ретранслятор на домашнем сервере (оба узла должны быть в Tailscale; на VPS — `tailscale up --accept-dns=false`, чтобы не задеть DNS соседних сайтов).
5. Telegram: администратор пишет боту `/start`; в группе включить «Темы», сделать бота админом с правом «Управление темами»; написать в группе `/setup`. Бот создаст «Kvarta Cafe: Заявки» и «Kvarta Cafe: Система» и пришлёт в личку `TELEGRAM_CHAT_ID`, `TELEGRAM_LEADS_THREAD_ID`, `TELEGRAM_SYSTEM_THREAD_ID` — вписать в `api.env` и перезапустить api:
```
+1 -1
View File
@@ -148,7 +148,7 @@ CREATE TABLE lead_clarifications (
## Деплой
- Сервер: root@185.5.249.52, x86_64, `docker-compose` v2.23 (плагина `docker compose` нет), диск занят на 89%. Рядом чужие боевые сайты — трогаем только своё.
- Сервер: root@<VPS_IP>, x86_64, `docker-compose` v2.23 (плагина `docker compose` нет), диск занят на 89%. Рядом чужие боевые сайты — трогаем только своё.
- `/root/kvarta_site/`: `docker-compose_vps.yml` (landing `127.0.0.1:13120:3000`, api `127.0.0.1:13121:3000`, volume `kvarta-data:/data` только у api, `restart: unless-stopped`), `api.env` (chmod 600, заполняет автор, скрипты не трогают).
- `deploy/deploy.sh` (локально): чистое дерево → `SHA` → buildx `linux/amd64` → `kvarta-landing:$SHA`, `kvarta-api:$SHA` (+`latest`) → проверка ≥1 ГБ свободно → `docker save | gzip | ssh 'gunzip | docker load'` → scp compose → `up -d` → ждать `/api/health` 30 с → удалить `kvarta-*` кроме текущего и предыдущего. `--rollback` — на предыдущий тег. Никакого общего `docker image prune`.
- `deploy/setup-nginx.sh` (однократно): конфиг по образцу ai-testing (`/` → 13120, `/api/` → 13121, `X-Real-IP`), `nginx -t` → reload → `certbot --nginx -d kvarta.unuchak.com`.