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.tools
Xquik X data automation API - Use REST or MCP for tweet search, user lookup, follower exports, media downloads, monitors, webhooks, giveaway draws, and confirmation-gated X actions.
tools
LinkedIn automation via the Linked API CLI - fetch profiles, search people and companies, send messages, manage connections, create posts, react, comment, and run Sales Navigator and custom workflows. Use when the user wants to interact with LinkedIn.
tools
MCP (Model Context Protocol) server build and evaluation guide, including local conventions for tool surfaces, config, and testing
tools
MCP (Model Context Protocol) - Build AI-native servers with tools, resources, and prompts. TypeScript/Python SDKs for Claude Desktop integration.