Прод на Pi: деплой из 2 файлов (compose + .env), ключ туннеля из .env
Теперь на Pi нужны только docker-compose.yml и .env — без репозитория, сборки и файла ключа. - docker-compose.yml: pull_policy: always (образы тянутся из реестра, сборка не запускается); ключ туннеля больше не монтируется томом — берётся из .env (TUNNEL_KEY_B64, base64); у VPS_TUNNEL_HOST убран :? (ломал бы buildx bake на ПК, где переменная не задана) — проверка обязательности перенесена в tunnel.sh (рантайм). - deploy/tunnel/tunnel.sh: приватный ключ из TUNNEL_KEY_B64 (base64) с фолбэком на смонтированный /key/id_tunnel (для dev/test, где репозиторий на хосте). - .env.example: TUNNEL_KEY_B64 + как сгенерировать base64 (Git Bash / PowerShell). - deploy/pi/README: полный поток «голый Pi → 2 файла»: Docker, curl compose+.env из Gitea, up; обновление, автозапуск, бэкап как опция. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
+12
-10
@@ -9,18 +9,20 @@ VPS_TUNNEL_USER="${VPS_TUNNEL_USER:-tunnel}"
|
||||
: "${VPS_TUNNEL_PORT:?VPS_TUNNEL_PORT is required}"
|
||||
UPSTREAM="${UPSTREAM:-app:8000}"
|
||||
|
||||
# Ключ должен быть смонтирован файлом. Если тут пусто/папка — Docker создал каталог,
|
||||
# потому что файла deploy/tunnel/id_tunnel на хосте нет.
|
||||
if [ ! -f /key/id_tunnel ]; then
|
||||
echo "[tunnel] ERROR: /key/id_tunnel is not a regular file."
|
||||
echo "[tunnel] Put your private key at deploy/tunnel/id_tunnel on the host (its pubkey must be in authorized_keys of tunnel@VPS)."
|
||||
# Источник приватного ключа: либо TUNNEL_KEY_B64 (base64 в .env — прод: только compose+env),
|
||||
# либо смонтированный файл /key/id_tunnel (dev/test, где репозиторий есть на хосте).
|
||||
mkdir -p /root/.ssh
|
||||
KEY=/root/.ssh/id_tunnel
|
||||
if [ -n "${TUNNEL_KEY_B64:-}" ]; then
|
||||
echo "$TUNNEL_KEY_B64" | base64 -d > "$KEY"
|
||||
elif [ -f /key/id_tunnel ]; then
|
||||
cp /key/id_tunnel "$KEY"
|
||||
else
|
||||
echo "[tunnel] ERROR: нет ключа — задай TUNNEL_KEY_B64 в .env (base64) или примонтируй /key/id_tunnel."
|
||||
echo "[tunnel] base64 ключа без переносов: base64 -w0 deploy/tunnel/id_tunnel"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Копируем ключ и выставляем строгие права (с хоста права могут не годиться, особенно с Windows).
|
||||
mkdir -p /root/.ssh
|
||||
cp /key/id_tunnel /root/.ssh/id_tunnel
|
||||
chmod 600 /root/.ssh/id_tunnel
|
||||
chmod 600 "$KEY"
|
||||
|
||||
echo "[tunnel] -R ${VPS_TUNNEL_PORT}:${UPSTREAM} -> ${VPS_TUNNEL_USER}@${VPS_TUNNEL_HOST}"
|
||||
exec ssh -N \
|
||||
|
||||
Reference in New Issue
Block a user