# Deployment ## Platforms ### Kubernetes (ArgoCD) Primary production deployment target. Manifests in `k8s/`. ### Fly.io Alternative deployment option. Configuration in `fly.toml`. ### Docker Multi-stage Docker build (`Dockerfile`). - Build stage: Elixir compilation + asset bundling - Release stage: Minimal runtime with Erlang/Elixir release ## Release Management ### Building ```bash MIX_ENV=prod mix assets.deploy mix release ``` ### Database Migrations `Aprsme.Release` module handles migrations during release startup. ## Environment Configuration Configuration files in `config/`: - `config.exs` — Base configuration - `dev.exs` — Development overrides - `prod.exs` — Production defaults - `runtime.exs` — Runtime configuration (from env vars) ### Key Environment Variables ## Development Environment ### Nix Shell Nix-based reproducible dev environment via `flake.nix` / `shell.nix`. Provides Elixir, Erlang, PostgreSQL, and all tooling. ### Dev Containers `.devcontainer/` configuration for VS Code / GitHub Codespaces. ## Clustering Optional multi-node deployment via `libcluster`: - Leader election determines which node maintains APRS-IS connection - Packet distribution relayed across nodes - Configuration in cluster modules under `lib/aprsme/cluster/` ## Health Checks - `/health` — Kubernetes liveness (basic) and readiness (DB + PubSub, shutdown-aware) - `/ready` — App readiness check - `/status.json` — JSON status endpoint Handled by `HealthCheck` plug before router.