diff --git a/DEPLOY.md b/DEPLOY.md index 1ab1727..443b309 100644 --- a/DEPLOY.md +++ b/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 на домашнем сервере (вчерашний день уже закрыт, время московское): diff --git a/README.md b/README.md index c8d14b9..637aca0 100644 --- a/README.md +++ b/README.md @@ -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`. diff --git a/common/version.py b/common/version.py index 9408623..13e8aef 100644 --- a/common/version.py +++ b/common/version.py @@ -7,4 +7,4 @@ from __future__ import annotations -__version__ = "0.3.8" +__version__ = "0.3.9" diff --git a/scripts/check_contour.sh b/scripts/check_contour.sh old mode 100644 new mode 100755 diff --git a/scripts/clickhouse_backup.sh b/scripts/clickhouse_backup.sh old mode 100644 new mode 100755 index b420ab3..3903a0b --- a/scripts/clickhouse_backup.sh +++ b/scripts/clickhouse_backup.sh @@ -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" diff --git a/scripts/clickhouse_import.sh b/scripts/clickhouse_import.sh old mode 100644 new mode 100755 diff --git a/start.sh b/start.sh old mode 100644 new mode 100755 diff --git a/tests/test_version.py b/tests/test_version.py index 791455c..3e2765b 100644 --- a/tests/test_version.py +++ b/tests/test_version.py @@ -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"