走啊走
奋斗

使用京东云服务器时,如何快速搭建Ruby on Rails环境?

服务器价格表

在京东云服务器(ECS)上快速搭建 Ruby on Rails 环境,推荐使用 RVM + Nginx + Puma/Passenger + PostgreSQL 的组合。以下是高效、可复用的步骤指南:


✅ 前置准备

  1. 登录京东云控制台

    • 创建 ECS 实例(推荐 CentOS 7/8 或 Ubuntu 20.04+;Ubuntu 更友好)
    • 安全组开放端口:22(SSH)、80(HTTP)、443(HTTPS)、3000(开发调试,可选)
    • 安装 SSH 密钥并绑定到实例
  2. 连接服务器

    ssh -i your-key.pem root@<your-ecs-ip>
    # 若使用密码登录,请确保已设置强密码

🚀 快速搭建流程(以 Ubuntu 22.04 为例)

1️⃣ 更新系统 & 安装基础依赖

sudo apt update && sudo apt upgrade -y
sudo apt install -y curl git wget build-essential libssl-dev 
libreadline-dev zlib1g-dev libyaml-dev libpq-dev 
postgresql postgresql-contrib nginx

💡 libpq-dev 是 Rails 连接 PostgreSQL 所必需的 C 头文件。


2️⃣ 安装 RVM(Ruby Version Manager)

curl -sSL https://rvm.io/mpapis.asc | gpg --import -
curl -sSL https://rvm.io/pkuczynski.asc | gpg --import -
curl -L https://get.rvm.io | bash -s stable --ruby=3.2.2

✅ 添加 RVM 到当前 shell:

source ~/.rvm/scripts/rvm

🔔 若提示 command not found: rvm,重启终端或手动 source。

验证 Ruby 版本:

ruby -v  # 应显示 3.2.2
gem -v

3️⃣ 安装 Bundler & 创建 Rails 项目

gem install bundler
bundle config set --local without 'development test'  # 生产环境优化

新建 Rails 应用(替换 <app_name>):

rails new <app_name> --database=postgresql --skip-test --skip-system-test
cd <app_name>

⚠️ 注意:--skip-* 选项可减少非必需组件,加快部署;生产环境建议保留测试框架。


4️⃣ 配置 PostgreSQL

sudo -u postgres psql
CREATE DATABASE <app_name>_production OWNER rails_user;
GRANT ALL PRIVILEGES ON DATABASE <app_name>_production TO rails_user;
q

📝 实际使用时请替换为真实用户名/数据库名。

编辑 config/database.yml,将 production 段改为:

production:
  adapter: postgresql
  encoding: unicode
  database: <app_name>_production
  pool: <%= ENV.fetch("RAILS_MAX_THREADS") { 5 } %>
  username: rails_user
  password: <your_db_password>
  host: localhost

生成迁移并执行:

bin/rails db:create
bin/rails db:migrate

5️⃣ 安装 Puma(推荐生产服务器)& 编译 native extensions

bundle install

✅ 自动编译 pgnokogiri 等 gem 的 C 扩展。


6️⃣ 启动服务(开发模式测试)

bin/rails server -b 0.0.0.0 -p 3000

访问 http://<your-ecs-ip>:3000 确认运行正常。


7️⃣ 配置 Nginx + Puma(生产环境)

▶ 安装 systemd 管理 Puma

sudo apt install -y ruby-puma

创建 /etc/systemd/system/puma.service

[Unit]
Description=Puma HTTP Server for <app_name>
After=network.target

[Service]
Type=simple
User=<your-user>
WorkingDirectory=/path/to/<app_name>
ExecStart=/usr/bin/bundle exec puma -C config/puma.rb
Restart=always
Environment=RAILS_ENV=production

[Install]
WantedBy=multi-user.target

启用并启动:

sudo systemctl daemon-reload
sudo systemctl enable puma
sudo systemctl start puma
sudo systemctl status puma

▶ 配置 Nginx

创建 /etc/nginx/sites-available/<app_name>

server {
    listen 80;
    server_name your-domain.com; # 或 IP

    location / {
        proxy_pass http://127.0.0.1:3000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }
}

启用站点:

sudo ln -s /etc/nginx/sites-available/<app_name> /etc/nginx/sites-enabled/
sudo nginx -t && sudo systemctl reload nginx

🔐 可选增强项

功能 命令/操作
HTTPS(Let’s Encrypt) sudo certbot --nginx -d your-domain.com
日志轮转 logrotate 配置 /var/log/<app_name>/
备份数据库 pg_dump -U rails_user <db_name> > backup.sql
监控 安装 htop, netstat, 或接入京东云监控

🛠️ 故障排查速查

问题 解决方案
bundle install 报错 pg 编译失败 检查是否安装了 libpq-dev
puma 无法启动 journalctl -u puma -f 查看日志
数据库连接拒绝 检查 pg_hba.conflisten_addresses
Nginx 502 Bad Gateway 确认 Puma 正在运行且监听 3000

需要我提供:

  • 自动化脚本(Ansible / Shell 一键部署)?
  • Docker 化部署方案?
  • 针对 CentOS 版本的适配步骤?

欢迎告诉我你的具体需求,我可进一步定制!