-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathdeploy.sh
More file actions
executable file
·78 lines (64 loc) · 2.5 KB
/
Copy pathdeploy.sh
File metadata and controls
executable file
·78 lines (64 loc) · 2.5 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
75
76
77
78
#!/usr/bin/env bash
set -euo pipefail
# Deploy script — runs entirely as unprivileged wikirev user.
# Run provision.sh first to set up the server.
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
source "$SCRIPT_DIR/deploy.env"
REMOTE_USER="wikirev"
REVISIONS_DIR="revisions"
RUST_DIR="rust"
ssh_cmd() {
ssh "$REMOTE_USER@$DROPLET_IP" "$@"
}
echo "=== 1. Building release binaries ==="
cd "$RUST_DIR"
cargo build --release --bin web_server --bin prepare_web_cache
cd ..
echo ""
echo "=== 1b. Preparing web cache data ==="
for dataset_dir in "$REVISIONS_DIR"/*/; do
dataset=$(basename "$dataset_dir")
manifest="$dataset_dir/revisions_manifest.json"
if [ ! -f "$manifest" ]; then
continue
fi
echo " Preparing $dataset..."
"$RUST_DIR/target/release/prepare_web_cache" "$dataset_dir" --cache-dir "cache/web/$dataset"
done
echo ""
echo "=== 2. Uploading binary (staged) ==="
scp "$RUST_DIR/target/release/web_server" "$REMOTE_USER@$DROPLET_IP:$REMOTE_DIR/web_server.new"
echo ""
echo "=== 3. Uploading datasets (manifests + web cache) ==="
for dataset_dir in "$REVISIONS_DIR"/*/; do
dataset=$(basename "$dataset_dir")
manifest="$dataset_dir/revisions_manifest.json"
cache_dir="cache/web/$dataset"
if [ ! -f "$manifest" ]; then
echo " Skipping $dataset (no manifest)"
continue
fi
echo " --- $dataset ---"
ssh_cmd "mkdir -p $REMOTE_DIR/revisions/$dataset $REMOTE_DIR/cache/web/$dataset"
# Upload manifest and dataset metadata
echo " Uploading manifest..."
scp "$manifest" "$REMOTE_USER@$DROPLET_IP:$REMOTE_DIR/revisions/$dataset/revisions_manifest.json"
meta="$dataset_dir/dataset_meta.json"
if [ -f "$meta" ]; then
echo " Uploading dataset_meta.json..."
scp "$meta" "$REMOTE_USER@$DROPLET_IP:$REMOTE_DIR/revisions/$dataset/dataset_meta.json"
fi
# Upload all web cache backends produced by prepare_web_cache
# (replace remote cache entirely so stale backends are removed)
echo " Syncing cache/web/$dataset/..."
rsync -az --delete --info=progress2 \
"$cache_dir/" \
"$REMOTE_USER@$DROPLET_IP:$REMOTE_DIR/cache/web/$dataset/"
done
echo ""
echo "=== 4. Swapping binary and restarting ==="
ssh_cmd "mv $REMOTE_DIR/web_server.new $REMOTE_DIR/web_server; sudo systemctl reset-failed wikirev.service 2>/dev/null; kill \$(pgrep -u wikirev web_server) 2>/dev/null || sudo systemctl start wikirev.service"
echo "Service restarted."
echo ""
echo "=== Done! ==="
echo "Server running at http://$DROPLET_IP"