|
| 1 | +#!/usr/bin/env bash |
| 2 | +# SPDX-License-Identifier: PMPL-1.0-or-later |
| 3 | +# Copyright (c) 2026 Jonathan D.A. Jewell (hyperpolymath) <j.d.a.jewell@open.ac.uk> |
| 4 | +# |
| 5 | +# Deploy (or re-deploy) all 4 Umoja seed nodes to fly.io. |
| 6 | +# Run from the boj-server repo root: |
| 7 | +# bash container/fly/deploy-seeds.sh |
| 8 | +# |
| 9 | +# Prerequisites: fly CLI authenticated (fly auth whoami) |
| 10 | + |
| 11 | +set -euo pipefail |
| 12 | + |
| 13 | +REPO_ROOT="$(git rev-parse --show-toplevel)" |
| 14 | +cd "$REPO_ROOT" |
| 15 | + |
| 16 | +declare -A NODES=( |
| 17 | + [eu]="lhr" |
| 18 | + [de]="fra" |
| 19 | + [us]="iad" |
| 20 | + [ap]="syd" |
| 21 | +) |
| 22 | + |
| 23 | +echo "=== BoJ Seed Node Deployment ===" |
| 24 | +echo "Authenticated as: $(fly auth whoami)" |
| 25 | +echo |
| 26 | + |
| 27 | +for region_code in eu de us ap; do |
| 28 | + app="boj-seed-${region_code}" |
| 29 | + fly_region="${NODES[$region_code]}" |
| 30 | + config="container/fly/fly-${region_code}.toml" |
| 31 | + |
| 32 | + echo "--- ${app} (${fly_region}) ---" |
| 33 | + |
| 34 | + # Create app if it doesn't exist |
| 35 | + if ! fly apps list | grep -q "^[[:space:]]*${app}"; then |
| 36 | + echo " Creating app ${app}..." |
| 37 | + fly apps create "${app}" --org personal |
| 38 | + else |
| 39 | + echo " App ${app} already exists." |
| 40 | + fi |
| 41 | + |
| 42 | + # Create volume if none exist for this app |
| 43 | + vol_count=$(fly volumes list --app "${app}" 2>/dev/null | grep -c "boj_data" || true) |
| 44 | + if [ "${vol_count}" -eq 0 ]; then |
| 45 | + echo " Creating 1 GB volume boj_data in ${fly_region}..." |
| 46 | + fly volumes create boj_data \ |
| 47 | + --app "${app}" \ |
| 48 | + --region "${fly_region}" \ |
| 49 | + --size 1 \ |
| 50 | + --yes |
| 51 | + else |
| 52 | + echo " Volume already exists (${vol_count} found)." |
| 53 | + fi |
| 54 | + |
| 55 | + echo " Deploying ${app}..." |
| 56 | + fly deploy \ |
| 57 | + --app "${app}" \ |
| 58 | + --config "${config}" \ |
| 59 | + --dockerfile container/Containerfile \ |
| 60 | + --remote-only \ |
| 61 | + --wait-timeout 900 |
| 62 | + |
| 63 | + echo " Done. Health: https://${app}.fly.dev/health" |
| 64 | + echo |
| 65 | +done |
| 66 | + |
| 67 | +echo "=== All 4 seed nodes deployed ===" |
| 68 | +echo |
| 69 | +echo "REST endpoints:" |
| 70 | +for region_code in eu de us ap; do |
| 71 | + echo " https://boj-seed-${region_code}.fly.dev/health" |
| 72 | +done |
| 73 | +echo |
| 74 | +echo "Update container/seed-nodes.toml and compose.prod.yaml with .fly.dev hostnames." |
0 commit comments