Kamal部署Rails生产环境后无法访问的问题排查求助
Kamal部署Rails应用成功但无法访问的排查方案
1. 基础网络连通性排查
- 本地执行
ping 139.144.161.121,确认服务器IP是否可达。若不通,检查服务器防火墙、NodeBalancer的入站规则,确保80/443端口对外开放。 - 用
nc -zv 139.144.161.121 80和nc -zv 139.144.161.121 443测试端口是否开放,排查端口被阻断问题。 - 执行
nslookup www.theaddress.com或dig www.theaddress.com,验证域名解析是否指向正确的NodeBalancer IP 139.144.161.121。
2. NodeBalancer配置验证
- 登录NodeBalancer管理后台:
- 确认监听端口(80/443)已配置,且转发到后端服务器的80/443端口(Kamal默认通过Traefik监听主机80/443)。
- 检查后端服务器的健康状态,若显示“不健康”,调整健康检查规则(比如检查路径设为
/或应用的健康端点,端口匹配Traefik监听端口)。 - 确认负载均衡策略配置正确,流量能正常分发到后端服务器。
3. 服务器端Traefik与容器检查
- 登录部署服务器,执行
docker ps | grep traefik,确认Traefik容器处于Up状态。 - 查看Traefik日志:
docker logs traefik,排查是否有证书生成失败、路由配置错误等日志。 - 检查Traefik动态路由配置:
docker exec traefik cat /etc/traefik/dynamic/<你的应用配置文件>,确认域名www.theaddress.com已正确注册到路由规则中。 - 执行
docker ps | grep <你的应用名称>,确认应用容器正常运行,无频繁重启(重启次数过多说明应用启动失败)。
4. 应用容器与内部状态排查
- 查看应用容器日志:
docker logs <应用容器ID>,重点排查启动错误、数据库连接失败、环境变量缺失等问题。 - 在服务器本地直接访问应用端口:
curl http://localhost:3000(默认Rails端口),确认应用本身能正常响应请求。 - 检查容器端口映射:
docker inspect <应用容器ID> | grep Ports,确认容器端口(如3000)已正确暴露,且Traefik能通过Docker标签发现该服务。
5. Deploy.yml配置校验
- 确认
service区块:domain字段是否为www.theaddress.comport是否匹配Rails应用监听端口(默认3000)- Traefik相关配置是否启用HTTPS,若使用Let's Encrypt,确保服务器能访问ACME验证端点
- 检查
servers区块的服务器IP是否为NodeBalancer后端的真实服务器地址 - 核对
env区块的环境变量,确保RAILS_ENV=production、数据库连接字符串等关键配置正确无误
内容的提问来源于stack exchange,提问作者user502052
相关产品推荐
相关产品推荐

