-
-
Notifications
You must be signed in to change notification settings - Fork 836
Expand file tree
/
Copy pathremote-hub-setup.sh
More file actions
executable file
·74 lines (61 loc) · 2.26 KB
/
remote-hub-setup.sh
File metadata and controls
executable file
·74 lines (61 loc) · 2.26 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
#!/usr/bin/env bash
set -euo pipefail
if [ $# -lt 1 ]; then
echo "Usage: $0 <ssh-host> [config-path]" >&2
exit 1
fi
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" >/dev/null 2>&1 && pwd)"
ROOT_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
SSH_HOST="$1"
CONFIG_PATH="${2:-$HOME/.config/flow/config.toml}"
if [ ! -f "${CONFIG_PATH}" ]; then
echo "Config file not found at ${CONFIG_PATH}" >&2
exit 1
fi
REMOTE_HOME="$(ssh "${SSH_HOST}" 'printf %s "$HOME"')"
REMOTE_ROOT="${REMOTE_ROOT:-${REMOTE_HOME}/flow-hub}"
REMOTE_PORT="${REMOTE_PORT:-9050}"
REMOTE_BIN_DIR="${REMOTE_ROOT}/bin"
REMOTE_CONFIG_DIR="${REMOTE_ROOT}/config"
REMOTE_SYNC_DIR="${REMOTE_ROOT}/sync"
REMOTE_SERVICE_USER="${REMOTE_SERVICE_USER:-$(ssh "${SSH_HOST}" 'whoami')}"
echo "Building flow CLI and daemon (release profile)..."
FLOW_PROFILE=release "${ROOT_DIR}/scripts/deploy.sh" >/dev/null
FLOW_BIN="${ROOT_DIR}/target/release/f"
echo "Copying binary and config to ${SSH_HOST}:${REMOTE_ROOT}"
ssh "${SSH_HOST}" "mkdir -p ${REMOTE_BIN_DIR} ${REMOTE_CONFIG_DIR}"
scp "${FLOW_BIN}" "${SSH_HOST}:${REMOTE_BIN_DIR}/f"
scp "${CONFIG_PATH}" "${SSH_HOST}:${REMOTE_CONFIG_DIR}/flow.toml"
if [ -n "${REMOTE_SYNC_PATHS:-}" ]; then
ssh "${SSH_HOST}" "mkdir -p ${REMOTE_SYNC_DIR}"
IFS=':' read -ra SYNC_PATHS <<<"${REMOTE_SYNC_PATHS}"
for path in "${SYNC_PATHS[@]}"; do
[ -z "${path}" ] && continue
if [ ! -e "${path}" ]; then
echo "Skipping sync path (missing): ${path}" >&2
continue
fi
echo "Syncing ${path} -> ${SSH_HOST}:${REMOTE_SYNC_DIR}"
scp -r "${path}" "${SSH_HOST}:${REMOTE_SYNC_DIR}"
done
fi
SERVICE_UNIT="[Unit]
Description=Remote flow hub
After=network.target
[Service]
Type=simple
Environment=FLOW_CONFIG=${REMOTE_CONFIG_DIR}/flow.toml
ExecStart=${REMOTE_BIN_DIR}/f daemon --host 0.0.0.0 --port ${REMOTE_PORT}
Restart=always
RestartSec=5
User=${REMOTE_SERVICE_USER}
WorkingDirectory=${REMOTE_ROOT}
[Install]
WantedBy=multi-user.target"
echo "Configuring systemd service on ${SSH_HOST}"
ssh "${SSH_HOST}" "sudo bash -c 'cat <<\"EOF\" > /etc/systemd/system/flowd.service
${SERVICE_UNIT}
EOF
systemctl daemon-reload
systemctl enable --now flowd.service'"
echo "Remote hub deployed. Use tailscale to reach ${SSH_HOST}:${REMOTE_PORT}."