37 lines
1.5 KiB
Bash
Executable File
37 lines
1.5 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# Deploy Hearth to a target host via rsync + docker compose.
|
|
# No default host on purpose — pick/provision an LXC first, see
|
|
# docs/guides/hearth-deploy.md in the ansible repo, then:
|
|
#
|
|
# HEARTH_HOST=10.0.10.xx ./deploy-hearth.sh
|
|
#
|
|
# Assumes: hearth.yml and .env already exist locally (copied from the
|
|
# .example files and filled in) — they are rsync'd but never committed.
|
|
set -euo pipefail
|
|
|
|
: "${HEARTH_HOST:?Set HEARTH_HOST=<target LXC IP> (see docs/guides/hearth-deploy.md)}"
|
|
REMOTE_DIR="${HEARTH_REMOTE_DIR:-/opt/hearth}"
|
|
REPO="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
for required in hearth.yml .env; do
|
|
if [[ ! -f "${REPO}/${required}" ]]; then
|
|
echo "Missing ${REPO}/${required} — copy ${required}.example and fill it in first." >&2
|
|
exit 1
|
|
fi
|
|
done
|
|
|
|
echo "=== Hearth -> ${HEARTH_HOST}:${REMOTE_DIR} ==="
|
|
ssh -o StrictHostKeyChecking=accept-new "root@${HEARTH_HOST}" "mkdir -p ${REMOTE_DIR}/data"
|
|
|
|
rsync -az --delete \
|
|
--exclude='.git' --exclude='.venv' --exclude='__pycache__' \
|
|
--exclude='data/' --exclude='.pytest_cache' \
|
|
"${REPO}/" "root@${HEARTH_HOST}:${REMOTE_DIR}/"
|
|
|
|
ssh "root@${HEARTH_HOST}" "cd ${REMOTE_DIR} && docker compose up -d --build"
|
|
|
|
echo "=== Status ==="
|
|
ssh "root@${HEARTH_HOST}" "cd ${REMOTE_DIR} && docker compose ps && docker compose logs --tail=20 hearth"
|
|
echo ""
|
|
echo "Kill switch: ssh root@${HEARTH_HOST} \"sed -i 's/^HEARTH_ENABLED=.*/HEARTH_ENABLED=false/' ${REMOTE_DIR}/.env && cd ${REMOTE_DIR} && docker compose up -d\""
|