thermograph/infra/Makefile
emi d138f00a20
Some checks failed
Sync infra to hosts / sync-beta (push) Has been skipped
Sync infra to hosts / sync-prod (push) Has been skipped
Sync infra to hosts / sync-dev (push) Failing after 6s
secrets-guard / encrypted (push) Successful in 6s
shell-lint / shellcheck (push) Successful in 13s
Validate observability stack / validate (push) Successful in 17s
PR build (required check) / changes (pull_request) Successful in 6s
secrets-guard / encrypted (pull_request) Successful in 5s
PR build (required check) / build-backend (pull_request) Has been skipped
shell-lint / shellcheck (pull_request) Successful in 6s
PR build (required check) / build-frontend (pull_request) Has been skipped
PR build (required check) / validate-observability (pull_request) Successful in 18s
PR build (required check) / gate (pull_request) Successful in 2s
infra: split the estate into vps1/vps2 — beta joins prod, dev gets a home (#103)
2026-07-26 06:56:38 +00:00

67 lines
3.2 KiB
Makefile
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# docker-compose orchestration only. The app-level targets that used to live
# here (run, lan-run, stop, migrate, migrate-cache, test, shots, indexnow,
# venv, clean) moved to the backend/frontend app repos along with the code
# they operate on.
.PHONY: up down db-up db-down dev-up dev-down om-up om-down om-backfill
# --- docker-compose stack (backend + frontend + PostgreSQL) ---------------------
# Requires a POSTGRES_PASSWORD (copy .env.example -> .env). See docker-compose.yml.
# Pull each service's published image and start the whole stack (backend +
# frontend + db) in the background. docker-compose.yml no longer has a
# top-level `build:` for backend/frontend -- each ships as its OWN image
# (BACKEND_IMAGE_TAG / FRONTEND_IMAGE_TAG), built in its own app repo (a plain
# `docker build` there, or that repo's own build-push.yml in CI) -- so `up`
# here only pulls + runs; it can no longer build in place.
up:
docker compose pull
docker compose up -d
# Stop and remove the stack's containers (named volumes persist).
down:
docker compose down
# Start just the Postgres service (e.g. to run the app against it from a venv).
db-up:
docker compose up -d db
# Stop the Postgres service.
db-down:
docker compose stop db
# The dev overlay: uncapped (no CPU limits). Default publish is 0.0.0.0:8137,
# right for a laptop-local rehearsal (e.g. phones on the same Wi-Fi) -- this is
# also the *fleet* dev environment's own overlay, but that environment now runs
# on vps1 (a public VPS, not a LAN box) and deploys via deploy/deploy-dev.sh,
# which overrides the bind address to the WireGuard mesh IP only
# (DEV_BIND_ADDR, see deploy/env-topology.sh) -- never invoke `make dev-up`
# directly on a fleet host, or it publishes on every interface. (The base file
# is prod/beta's shape: capped + loopback, fronted by their own Caddy LB.)
DEV_COMPOSE = docker compose -f docker-compose.yml -f docker-compose.dev.yml
dev-up:
POSTGRES_PASSWORD=$${POSTGRES_PASSWORD:-thermograph-dev} $(DEV_COMPOSE) up -d --build
dev-down:
$(DEV_COMPOSE) down
# Self-hosted Open-Meteo (prod-only overlay). Serves the ERA5 archive from object
# storage so the app is off the public archive API. See deploy/openmeteo/README.md
# for the object-storage bucket + rclone mount this expects on the host.
OM_COMPOSE = docker compose -f docker-compose.yml -f docker-compose.openmeteo.yml
om-up:
$(OM_COMPOSE) up -d --build
om-down:
$(OM_COMPOSE) down
# One-time historical backfill: write the full 1980→present archive (~11.5 TB of
# .om) to object storage. Runs each dataset once (no --repeat-interval), independent
# of the app/db, so it can run before the stack is flipped over. Hours-long.
OM_LAND_VARS = temperature_2m,dew_point_2m,precipitation,shortwave_radiation,wind_u_component_10m,wind_v_component_10m
OM_ERA5_VARS = wind_gusts_10m,temperature_2m,dew_point_2m,precipitation,shortwave_radiation,wind_u_component_10m,wind_v_component_10m
om-backfill:
$(OM_COMPOSE) run --rm --no-deps open-meteo-sync-land \
sync copernicus_era5_land $(OM_LAND_VARS) --past-days $${OM_BACKFILL_DAYS:-17000}
$(OM_COMPOSE) run --rm --no-deps open-meteo-sync-era5 \
sync copernicus_era5 $(OM_ERA5_VARS) --past-days $${OM_BACKFILL_DAYS:-17000}