Kamal 部署 Solid Queue 独立工作节点的实践指南
背景介绍
在现代 Rails 应用开发中,后台任务处理是一个常见需求。Solid Queue 作为 Rails 7.1 引入的默认后台任务解决方案,相比传统的 Active Job 适配器提供了更高效的性能。本文将详细介绍如何通过 Kamal 部署工具来独立部署 Solid Queue 工作节点,而不需要同时运行 Web 应用。
核心挑战
许多开发者在使用 Kamal 部署 Solid Queue 时遇到一个典型问题:Kamal 默认会对部署的容器进行健康检查,这通常需要一个 Web 服务来响应 HTTP 请求。但对于纯后台工作节点来说,运行一个 Web 服务既浪费资源又增加了复杂性。
解决方案
1. 创建专用部署配置
首先,我们需要为工作节点创建独立的部署配置文件 deploy-worker.yml。关键配置如下:
service: app-worker
image: your-registry/app_worker
servers:
web:
hosts:
- your.server.ip
proxy: false # 关键配置,禁用代理和健康检查
builder:
dockerfile: Dockerfile.worker
2. 定制 Dockerfile
为工作节点创建专用的 Dockerfile (Dockerfile.worker):
FROM ruby:3.3.4-slim AS base
WORKDIR /rails
RUN apt-get update -qq && \
apt-get install --no-install-recommends -y build-essential libpq-dev
ENV RAILS_ENV="production" \
BUNDLE_DEPLOYMENT="1"
COPY Gemfile Gemfile.lock ./
RUN bundle install
COPY . .
USER 1000:1000
CMD ["bin/jobs"] # 直接运行工作进程
3. 优化启动命令
在 bin/jobs 脚本中,我们可以直接启动 Solid Queue 的各个组件:
#!/usr/bin/env ruby
require "solid_queue"
SolidQueue::Manager.start(
dispatchers: { default: { polling_interval: 1 } },
workers: { default: { processes: 2, queues: "*" } }
)
技术原理
Kamal 的健康检查机制默认会验证容器是否能够响应 HTTP 请求。通过将 proxy: false 设置在 web 配置下(而非根级别),我们告诉 Kamal 这个角色不需要进行健康检查。这允许纯后台工作节点顺利部署而不需要运行 Web 服务。
常见问题解决
如果遇到 "target failed to become healthy" 错误,请检查:
- 确保
proxy: false正确设置在web配置段下 - 确认没有其他配置意外启用了健康检查
- 检查工作进程是否能在合理时间内启动完成
性能优化建议
- 资源隔离:将工作节点与 Web 节点部署在不同主机上,避免资源竞争
- 垂直扩展:根据任务负载调整工作进程数量
- 日志管理:配置合理的日志轮转策略,避免磁盘空间耗尽
总结
通过合理配置 Kamal,我们可以实现 Solid Queue 工作节点的独立部署,既简化了架构又提高了资源利用率。这种部署方式特别适合任务密集型应用,能够在不影响 Web 服务的情况下灵活扩展后台处理能力。
对于需要同时部署 Web 和 Worker 的场景,建议采用分离的部署配置和镜像,以获得最佳的运维灵活性和资源利用率。
atomcodeClaude Code 的开源替代方案。连接任意大模型,编辑代码,运行命令,自动验证 — 全自动执行。用 Rust 构建,极致性能。 | An open-source alternative to Claude Code. Connect any LLM, edit code, run commands, and verify changes — autonomously. Built in Rust for speed. Get StartedRust0155- DDeepSeek-V4-ProDeepSeek-V4-Pro(总参数 1.6 万亿,激活 49B)面向复杂推理和高级编程任务,在代码竞赛、数学推理、Agent 工作流等场景表现优异,性能接近国际前沿闭源模型。Python00
LongCat-Video-Avatar-1.5最新开源LongCat-Video-Avatar 1.5 版本,这是一款经过升级的开源框架,专注于音频驱动人物视频生成的极致实证优化与生产级就绪能力。该版本在 LongCat-Video 基础模型之上构建,可生成高度稳定的商用级虚拟人视频,支持音频-文本转视频(AT2V)、音频-文本-图像转视频(ATI2V)以及视频续播等原生任务,并能无缝兼容单流与多流音频输入。00
auto-devAutoDev 是一个 AI 驱动的辅助编程插件。AutoDev 支持一键生成测试、代码、提交信息等,还能够与您的需求管理系统(例如Jira、Trello、Github Issue 等)直接对接。 在IDE 中,您只需简单点击,AutoDev 会根据您的需求自动为您生成代码。Kotlin03
Intern-S2-PreviewIntern-S2-Preview,这是一款高效的350亿参数科学多模态基础模型。除了常规的参数与数据规模扩展外,Intern-S2-Preview探索了任务扩展:通过提升科学任务的难度、多样性与覆盖范围,进一步释放模型能力。Python00
skillhubopenJiuwen 生态的 Skill 托管与分发开源方案,支持自建与可选 ClawHub 兼容。Python0112