Elixir/Phoenix部署Skill deploy

Elixir/Phoenix 部署技能是关于将 Elixir/Phoenix 应用程序高效、可靠地部署到生产环境的技术指南,涵盖发布版管理、Docker 容器化、Kubernetes 编排、Fly.io 托管等关键环节,专注于 DevOps 最佳实践,如运行时配置管理、健康检查、资源优化和部署自动化,以提高应用的可伸缩性、安全性和可维护性,适用于后端开发和云原生架构场景。

DevOps 0 次安装 0 次浏览 更新于 3/11/2026

name: 部署 description: Elixir/Phoenix 部署模式 - 发布版、Docker、Kubernetes、Fly.io。在生产环境部署时加载。

Elixir/Phoenix 部署参考

快速参考,用于部署 Elixir/Phoenix 应用程序。

铁律 — 永不违反

  1. 运行时配置,而非编译时配置 — 所有密钥在 runtime.exs 中从环境变量获取
  2. 优雅关闭 ≥ 60 秒 — 让连接排空
  3. 健康检查必需 — 启动、存活、就绪端点
  4. 数据库 SSL 验证ssl_opts: [verify: :verify_peer]
  5. 不要设置 CPU 限制 — BEAM 调度器与 cgroups CPU 限制的问题

快速配置

runtime.exs(必需)

if config_env() == :prod do
  database_url = System.get_env("DATABASE_URL") || raise "DATABASE_URL is required"
  secret_key_base = System.get_env("SECRET_KEY_BASE") || raise "SECRET_KEY_BASE is required"
  host = System.get_env("PHX_HOST") || raise "PHX_HOST is required"

  config :my_app, MyApp.Repo,
    url: database_url,
    pool_size: String.to_integer(System.get_env("POOL_SIZE") || "10"),
    ssl: true,
    ssl_opts: [verify: :verify_peer]

  config :my_app, MyAppWeb.Endpoint,
    url: [host: host, port: 443, scheme: "https"],
    http: [ip: {0, 0, 0, 0}, port: String.to_integer(System.get_env("PORT") || "4000")],
    secret_key_base: secret_key_base,
    server: true
end

健康检查插件

def call(%{path_info: ["health", "readiness"]} = conn, _opts) do
  case Ecto.Adapters.SQL.query(MyApp.Repo, "SELECT 1", []) do
    {:ok, _} -> send_resp(conn, 200, ~s({"status":"ok"})) |> halt()
    {:error, _} -> send_resp(conn, 503, ~s({"status":"error"})) |> halt()
  end
end

快速决策

平台选择

需求 使用
简单、托管 Fly.io
企业、现有 K8s Kubernetes
自定义基础设施 Docker + 您的编排器

资源限制

资源 推荐
CPU 无限制(BEAM 调度器问题)
内存 设置限制(通常 256Mi-512Mi)
优雅关闭 ≥ 60 秒

部署检查清单

  • [ ] 所有密钥从环境变量在 runtime.exs 中
  • [ ] server: true 在端点配置中
  • [ ] 数据库连接的 SSL 验证
  • [ ] 健康端点:/health/startup, /health/liveness, /health/readiness
  • [ ] 优雅关闭周期 ≥ 60 秒
  • [ ] 无 CPU 限制(仅内存限制)
  • [ ] 部署过程中的迁移

资产管道说明

Phoenix 1.8 使用 esbuild + tailwind(无需 Node.js):

  • 配置在 config/config.exs:esbuild:tailwind
  • mix assets.deploy 为生产构建
  • mix assets.setup 在首次运行时安装二进制文件
  • 自定义 JS 打包器:在 config/config.exs 中配置

参考文献

关于详细模式,请参阅:

  • references/docker-config.md - 多阶段 Dockerfile,最佳实践
  • references/kubernetes-config.md - 部署、探针、BEAM 特定
  • references/flyio-config.md - fly.toml,集群,命令
  • references/observability.md - 遥测、日志、Sentry、span
  • references/ci-templates.md - GitHub Actions 工作流,Claude Code 集成