Бэкап событий работает на живом контуре, а не только в режиме пропуска
Проверка на VPS вскрыла две поломки, которые не проявлялись, пока контур не запущен: ssh склеивал аргументы SQL-запроса в одну строку, и запрос падал с синтаксической ошибкой, а импорт на домашнем сервере требовал clickhouse-client, которого там нет. Теперь аргументы экранируются, клиент можно подменить обёрткой через docker compose (CLICKHOUSE_CLIENT), а скрипты в репозитории получили бит выполнения — иначе make check и make backup не запускались из свежего клона.
This commit is contained in:
parent
c524d20259
commit
33e48d2803
10
DEPLOY.md
10
DEPLOY.md
|
|
@ -101,6 +101,16 @@ cp env/backup.env.example env/backup.env # VPS_SSH, VPS_PORT, VPS_PROJECT_DIR,
|
|||
(`VPS_PROJECT_DIR`, там запускается `docker compose`); на домашнем сервере — `clickhouse-client`
|
||||
и локальный ClickHouse. Настройка SSH-доступа — `deploy/ssh-access.md`.
|
||||
|
||||
Если ставить `clickhouse-client` на хост не хочется, укажите в `env/backup.env` переменную
|
||||
`CLICKHOUSE_CLIENT` — путь к обёртке, которая выполняет клиент внутри контейнера:
|
||||
|
||||
```bash
|
||||
#!/usr/bin/env bash
|
||||
set -euo pipefail
|
||||
cd "$(dirname "$0")/.."
|
||||
exec docker compose --env-file env/backup.env -f docker-compose.yml exec -T clickhouse clickhouse-client "$@"
|
||||
```
|
||||
|
||||
Проверочный прогон (без cron): `make backup E=test` или `./scripts/clickhouse_backup.sh test`.
|
||||
|
||||
Cron на домашнем сервере (вчерашний день уже закрыт, время московское):
|
||||
|
|
|
|||
|
|
@ -104,7 +104,7 @@ make backup E=test # на домашнем сервере: ./scripts/clickho
|
|||
|
||||
## Версионирование
|
||||
|
||||
- Единый источник версии — `common/version.py` (`__version__`), текущая — `0.3.8`.
|
||||
- Единый источник версии — `common/version.py` (`__version__`), текущая — `0.3.9`.
|
||||
- Схема — SemVer-подобная (`MAJOR.MINOR.PATCH`); git-тег = `v` + версия (`v0.1`).
|
||||
- Docker-образы тегируются версией (Блок 2), события ClickHouse получают `bot_version` (Блок 3).
|
||||
- Выпуск: изменить `common/version.py` → коммит → аннотированный тег `vX.Y` → `git push --tags`.
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@
|
|||
|
||||
from __future__ import annotations
|
||||
|
||||
__version__ = "0.3.8"
|
||||
__version__ = "0.3.9"
|
||||
|
|
|
|||
|
|
@ -49,8 +49,14 @@ SSH=(ssh -i "$VPS_SSH_KEY" -p "$VPS_PORT" -o BatchMode=yes -o ServerAliveInterva
|
|||
|
||||
# Запустить команду на VPS. Пароль ClickHouse читается из окружения контейнера,
|
||||
# поэтому клиент вызывается через `sh -c` уже внутри контейнера.
|
||||
# ssh склеивает аргументы в одну строку и отдаёт её удалённому shell, поэтому каждый
|
||||
# аргумент экранируем: в SQL есть пробелы, скобки и кавычки.
|
||||
vps_ch() {
|
||||
"${SSH[@]}" bash -s "$VPS_PROJECT_DIR" "$E" "$VPS_COMPOSE_FILE" "$@" <<'REMOTE'
|
||||
local quoted=() arg
|
||||
for arg in "$@"; do
|
||||
quoted+=("$(printf '%q' "$arg")")
|
||||
done
|
||||
"${SSH[@]}" bash -s "$VPS_PROJECT_DIR" "$E" "$VPS_COMPOSE_FILE" "${quoted[@]}" <<'REMOTE'
|
||||
set -euo pipefail
|
||||
project_dir="$1"; contour="$2"; compose_file="$3"; shift 3
|
||||
cd "$project_dir"
|
||||
|
|
|
|||
|
|
@ -7,4 +7,4 @@ from common import __version__
|
|||
|
||||
def test_version_is_set():
|
||||
assert __version__
|
||||
assert __version__ == "0.3.8"
|
||||
assert __version__ == "0.3.9"
|
||||
|
|
|
|||
Loading…
Reference in New Issue