toolchains/elixir/ops/phoenix-ops/SKILL.md
Phoenix operations and deployment: releases, runtime configuration, clustering, libcluster, telemetry/logging, secrets, assets, background jobs, and production hardening on the BEAM.
npx skillsauth add bobmatnyc/claude-mpm-skills phoenix-opsInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Production-ready Phoenix apps rely on releases, runtime configuration, telemetry, clustering, and secure endpoints. The BEAM enables rolling restarts and supervision resilience when configured correctly.
MIX_ENV=prod PHX_SERVER=true mix assets.deploy
MIX_ENV=prod mix release
_build/prod/rel/my_app/bin/my_app eval "IO.puts(:os.type())"
_build/prod/rel/my_app/bin/my_app start
config/runtime.exs for env-driven settings:
config :my_app, MyApp.Repo,
url: System.fetch_env!("DATABASE_URL"),
pool_size: String.to_integer(System.get_env("POOL_SIZE", "10")),
ssl: true
config :my_app, MyAppWeb.Endpoint,
url: [host: System.fetch_env!("PHX_HOST"), port: 443, scheme: "https"],
http: [ip: {0,0,0,0}, port: String.to_integer(System.get_env("PORT", "4000"))],
secret_key_base: System.fetch_env!("SECRET_KEY_BASE"),
server: true
Secrets
SECRET_KEY_BASE with mix phx.gen.secret.Add libcluster for automatic node discovery:
# mix.exs deps
{:libcluster, "~> 3.3"},
{:phoenix_pubsub, "~> 2.1"},
# application.ex
topologies = [
dns_poll: [
strategy: Cluster.Strategy.DNSPoll,
config: [poll_interval: 5_000, query: "my-app.internal"],
connect: {:net_adm, :ping}
]
]
children = [
{Cluster.Supervisor, [topologies, [name: MyApp.ClusterSupervisor]]},
{Phoenix.PubSub, name: MyApp.PubSub},
MyAppWeb.Endpoint
]
Guidelines
secret_key_base across nodes for consistent session signing.opentelemetry_phoenix and opentelemetry_ecto for traces/metrics.Plug.Telemetry and LoggerJSON or structured logging.:telemetry_poller for VM stats (reductions, memory, schedulers).LOGGER_LEVEL=info in prod; use :debug only for troubleshooting.force_ssl), HSTS, secure cookies (same_site, secure), and proper content_security_policy.cors_plug for API origins.:max_request_line_length, :max_header_value_length).mix assets.deploy runs npm/tailwind/esbuild and digests assets.cache-control headers set in Endpoint.application.ex.mix deps.get --only prod, mix compile, mix assets.deploy, then mix release.Environment= secrets; add Restart=on-failure./health and /ready endpoints (Repo check + PubSub/Presence check).:telemetry_poller for scheduler utilization and memory.PHX_SERVER=true (endpoint won’t start).config/runtime.exs; relying on compile-time config for secrets.secret_key_base or per-node keys → invalid sessions after deploy.development
Optimize web performance using Core Web Vitals, modern patterns (View Transitions, Speculation Rules), and framework-specific techniques
development
Best practices for documenting APIs and code interfaces, eliminating redundant documentation guidance per agent.
development
Comprehensive API design patterns covering REST, GraphQL, gRPC, versioning, authentication, and modern API best practices
development
Visual verification workflow for UI changes to accelerate code review and catch ...