rails 开发速度很快,体验很好,但是如果无法部署到服务器上,最后也就是自己在本机玩玩,开发的网页服务不能给别人使用。 我在 deepseek 的帮助下经过一周的摸索终于实现了部署,特记录供自己后期查阅,也供其他人借鉴。真的感谢好时代,有 deepseek 不然想也不敢去想我一个个人业余开发者,身边没一个同语言开发指导老师怎么敢去想自行摸索完成部署功能。
下面是 Kamal 从初始化到部署完成的完整工作流程,每一步都对应具体的操作:
kamal init,生成 config/deploy.yml 配置文件deploy.yml 中指定服务器的 IP 地址或域名kamal setup)这个命令会完成服务器的首次配置:
apt-get 安装GET /up 请求(必须返回 200 OK)kamal deploy)这是日常更新应用的命令,只执行部署流程,不重复安装 Docker:
GET /up)我理解 kamal 大致功能是先将本机的开发环境和项目通过 docker 打包成镜像,push 到镜像仓库,然后登陆服务器先下载 docker,然后从镜像仓库 pull 这个镜像再还原运行。 之前尝试过在本机和服务机均安装网络代理工具,这一步实现了,但是直接参考 rails guide 部署还是会存在问题,没搞明白。只能尝试将所有可能会用到科学上网的源替换成国内的源。
新建 rails 项目
ruby -v
rails -v
rails new rails106

用编辑器(我用的是 trae)打开项目,做初始化保存
#iterm
git add .
git commit -m "initial commit"
将 gem 源改成 rubychina 的源
# gemfile
-source "https://rubygems.org"
+source "https://gems.ruby-china.com"
添加 hello world 页面
#iterm
rails g controller welcome index
# app/views/welcome/index.html.erb
+<h1>hello world</h1>
-<h1>Welcome#index</h1>
-<p>Find me in app/views/welcome/index.html.erb</p>
# config/routes.rb
root "welcome#index"
get "welcome/index"
启动项目,查看 hello word 页面
# iterm
bin/dev
将代码加入 git 保存
# iterm
git add .
git commit -m "add hello world page"
阿里云主机可以直接添加 docker,免去安装 docker 的麻烦。直接用 root 账号和设定的自定义密码,这个会用于远程服务器。

远程主机验证 docker 安装成功:
# 云主机命令行
docker --version
docker run hello-world

{
"builder": {
"gc": {
"defaultKeepStorage": "20GB",
"enabled": true
}
},
"experimental": false,
"registry-mirrors": [
"https://5ex1e6il.mirror.aliyuncs.com",
"https://docker.1panel.live",
"https://hub.rat.dev",
"https://docker.m.daocloud.io",
"https://docker.nju.edu.cn",
"https://docker.xuanyuan.me",
"https://docker.1ms.run"
]
}
docker --version 和docker run hello-world 进行验证 docker 是否正确安装#rails106/config/deploy.yml
-image: rails106
+image: myrailsapp/rails106 # myrailsapp是阿里云的镜像仓库命名空间
- - 192.168.0.1
+ - 47.x x.xx.236 # 这是阿里云的IP地址
- server: localhost:5555
+ # 这里填阿里云的镜像仓库的公网地址
+ server: crpi-xxxxxxxxxxx.cn-zhangjiakou.personal.cr.aliyuncs.com
- # username: your-user
+ # 这里填阿里云的账号
+ username: chenxxxxxx21
- # password:
+ # 这里填阿里云的镜像的固定秘密
+ password: cxxxxxx9
代码类似

# rails106/Dockerfile
-# syntax=docker/dockerfile:1
+# #syntax=docker/dockerfile:1 # 第一行这里要再加个注释符号注释,不然会报错,不知道为什么
-FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base
+# FROM docker.io/library/ruby:$RUBY_VERSION-slim AS base
+# 要换成ruby的国内的源,不然会卡住
+FROM docker.m.daocloud.io/library/ruby:$RUBY_VERSION-slim AS base
WORKDIR /rails
+# 设定 apt 源为阿里云镜像,不然会卡住
+RUN sed -i 's/deb.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources && \
+ sed -i 's/security.debian.org/mirrors.aliyun.com/g' /etc/apt/sources.list.d/debian.sources
# Install base packages
RUN apt-get update -qq && \
代码类似
加入 git 仓库
# iterm
git add .
git commit -m "add deploy set"
# iterm
bin/kamal setup
部署成功:
浏览器输入 ip 测试
大功告成!!!