Ruby Ruby Girl-web 项目传统部署流程分享,自学 web app 开发并已经上线💐

AixCoder · December 10, 2025 · Last by ethancole53 replied at November 06, 2026 · 588 hits

Ubuntu 25.10 上部署 Rails 应用:从零到生产环境

概述

本文介绍在 Ubuntu 25.10 上使用 sqlite3 + Puma + Nginx 部署 Rails 应用的完整流程。本文以学习为目的,不使用现代化的自动部署工具,而是直接在 Linux 宿主机上从零搭建生产环境。

这种方式稳定可靠,足以应对多年的使用需求。尽管当前 AI 工具辅助开发已成为常态,但亲自动手实践仍是掌握技能的关键。

####本地开发环境

  • 操作系统: macOS
  • Ruby 版本: 3.2.9
  • Rails 版本: 7.2.3

参考文章: Ruby China 上的相关教程

由于原文章发布时间较早,本文结合当前技术环境优化了部署流程


前言

近期自学了 Rails 开发,借助 AI 辅助实现了应用的部署上线。作为服务端开发的新手,初次部署应用时确实遇到了一些挑战,但成功发布第一个 Web 应用是全栈开发道路上的一大步。

希望通过本文的分享,能够帮助更多 Ruby/Rails 初学者。亲手将自己开发的应用部署上线,这种创造带来的成就感远超刷手机的短暂快乐,也是持续学习的重要动力。


部署架构总览

请求流向

用户浏览器 → Nginx (80/443 端口) → Unix Socket/端口 → Puma (应用服务器) → Rails 应用

部署流程图(Google Cloud VM,1GB 内存)
┌─────────────────────────────────────────────────────────────────┐
│                     Rails 应用部署完整流程                          │
│                    (1GB Google Cloud VM)                        │
└─────────────────────────────────────────────────────────────────┘
                              开始
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 1: 本地准备工作                                               │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 1.1 确保代码已提交到 Git                                  │      │
│  │     git add . && git commit -m "Ready to deploy"        │      │
│  │                                                         │      │
│  │ 1.2 推送到 GitHub/GitLab                                │      │
│  │     git push origin main                                │      │
│  │                                                         │      │
│  │ 1.3 准备环境变量清单                                      │      │
│  │     - SECRET_KEY_BASE                                   │      │
│  │     - DATABASE_PASSWORD                                 │      │
│  │     - 其他敏感信息                                        │      │
│  └────────────────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 2: 连接到 Google Cloud VM                                   │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 2.1 获取 VM 外部 IP 地址                                  │      │
│  │     GCP 控制台 → Compute Engine → VM 实例                │      │
│  │     记录: 外部 IP = XXX.XXX.XXX.XXX                      │      │
│  │                                                         │      │
│  │ 2.2 通过 SSH 连接                                         │      │
│  │     ssh [email protected]                        │      │
│  │     或使用 GCP 控制台的 SSH 按钮                           │      │
│  └────────────────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 3: 配置服务器环境 (首次需要)                                   │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 3.1 更新系统                                             │      │
│  │     sudo apt update && sudo apt upgrade -y              │      │
│  │                                                         │      │
│  │ 3.2 安装基础工具                                          │      │
│  │     sudo apt install -y curl git build-essential        │      │
│  │                                                         │      │
│  │ 3.3 创建 Swap (重要!)                                     │      │
│  │     sudo fallocate -l 1G /swapfile                      │      │
│  │     sudo chmod 600 /swapfile                            │      │
│  │     sudo mkswap /swapfile && sudo swapon /swapfile      │      │
│  │                                                         │      │
│  │ 3.4 安装 Ruby (rbenv)                                    │      │
│  │     git clone https://github.com/rbenv/rbenv.git        │      │
│  │     # ... (详细步骤见下方)                                 │      │
│  │                                                         │      │
│  │ 3.5 安装数据库 (PostgreSQL 或 SQLite)                    │      │
│  │     sudo apt install -y postgresql libpq-dev            │      │
│  │                                                         │      │
│  │ 3.6 安装 Nginx                                           │      │
│  │     sudo apt install -y nginx                           │      │
│  └────────────────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 4: 部署应用代码                                              │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 4.1 创建项目目录                                          │      │
│  │     sudo mkdir -p /var/www                              │      │
│  │     sudo chown $USER:$USER /var/www                     │      │
│  │                                                         │      │
│  │ 4.2 克隆项目                                              │      │
│  │     cd /var/www                                         │      │
│  │     git clone https://github.com/你的项目.git            │      │
│  │     cd 你的项目名                                         │      │
│  │                                                         │      │
│  │ 4.3 安装 Gem 依赖                                         │      │
│  │     bundle config set --local deployment 'true'         │      │
│  │     bundle install                                      │      │
│  │                                                         │      │
│  │ 4.4 配置环境变量                                          │      │
│  │     nano .env                                           │      │
│  │     # 填入 SECRET_KEY_BASE 等                            │      │
│  │                                                         │      │
│  │ 4.5 设置数据库                                            │      │
│  │     RAILS_ENV=production rails db:create                │      │
│  │     RAILS_ENV=production rails db:migrate               │      │
│  │                                                         │      │
│  │ 4.6 预编译资源                                            │      │
│  │     RAILS_ENV=production rails assets:precompile        │      │
│  └────────────────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 5: 配置 Puma 服务                                            │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 5.1 创建 Systemd 服务文件                                 │      │
│  │     sudo nano /etc/systemd/system/rails.service         │      │
│  │                                                         │      │
│  │ 5.2 启动服务                                              │      │
│  │     sudo systemctl daemon-reload                        │      │
│  │     sudo systemctl enable rails                         │      │
│  │     sudo systemctl start rails                          │      │
│  │                                                         │      │
│  │ 5.3 检查状态                                              │      │
│  │     sudo systemctl status rails                         │      │
│  └────────────────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 6: 配置 Nginx 反向代理                                       │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 6.1 创建 Nginx 配置                                       │      │
│  │     sudo nano /etc/nginx/sites-available/rails          │      │
│  │                                                         │      │
│  │ 6.2 启用配置                                              │      │
│  │     sudo ln -s /etc/nginx/sites-available/rails \       │      │
│  │                /etc/nginx/sites-enabled/                │      │
│  │     sudo rm /etc/nginx/sites-enabled/default            │      │
│  │                                                         │      │
│  │ 6.3 测试并重启 Nginx                                      │      │
│  │     sudo nginx -t                                       │      │
│  │     sudo systemctl restart nginx                        │      │
│  └────────────────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 7: 配置防火墙                                                │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 7.1 在 GCP 控制台配置防火墙规则                            │      │
│  │     VPC 网络 → 防火墙 → 创建防火墙规则                     │      │
│  │     - 允许 tcp:80 (HTTP)                                │      │
│  │     - 允许 tcp:443 (HTTPS)                              │      │
|  | 其实在创建虚拟机的时候,把https和http流量入口都打开,应该就可以了
│  └────────────────────────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
┌──────────────────────────────────────────────────────────────────┐
│  阶段 8: 测试访问                                                  │
│  ┌────────────────────────────────────────────────────────┐      │
│  │ 8.1 在浏览器中访问                                         │      │
│  │     http://你的云服务器外部IP                                   │      │
│  │                                                         │      │
│  │ 8.2 验证网站正常显示│  └───────────────────
─────────────────────────────────────┘      │
└──────────────────────────────────────────────────────────────────┘
                               │
                               ▼
                          部署完成! 🎉

详细部署步骤

阶段 1: 本地准备工作

1.1 修改生产环境配置 在项目中的 /config/environments/production.rb 文件中,临时允许 HTTP 访问: config.force_ssl = false

1.2 代码提交到 GitHub

  • 将代码提交到 GitHub(如不想公开代码,请选择私有仓库)
  • 确保所有更改已提交并推送

1.3 生成生产环境密钥(非常重要!)

  • 在本地 Rails 项目目录运行以下命令: rails secret

复制输出的密钥(示例:3a5b8c9d7e6f1a2b3c4d5e6f7a8b9c0d...),稍后会用到。

阶段 2: 创建并连接到 Google 云服务器

2.1 创建云服务器

  • 区域选择:选择离您较近的区域(如香港)
  • 操作系统:Ubuntu 25.10
  • 网络配置:确保开启 HTTP 和 HTTPS 流量入口

2.2 通过 SSH 连接到服务器 ssh username@你的服务器 IP 地址 提示:如果不熟悉 SSH 连接,可以使用 Google Cloud Console 的 SSH 按钮或咨询 AI 工具获取帮助。

阶段 3: 配置服务器环境(首次部署必需)

  • 3.1 更新系统 sudo apt-get update
  • 3.2 安装必要工具包 这些软件包是编译和运行 Ruby on Rails 应用的基础依赖:

sudo apt-get install -y git curl zlib1g-dev build-essential libssl-dev libreadline-dev libyaml-dev libsqlite3-dev sqlite3 libxml2-dev libxslt1-dev libcurl4-openssl-dev libffi-dev libvips

  • 比喻:连接上云服务器就像搬进新家,需要先完成通水通电等基础装修,后续的应用程序(家电)才能正常工作。
  • 3.3 创建 Swap 虚拟内存(重要!)
# 创建 1GB Swap 文件(内存不足时可增加至 2GB)
sudo fallocate -l 1G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

# 验证 Swap 是否生效
free -h
  • 3.4 安装 Ruby 方法一:快速安装(推荐新手) sudo apt-get install -y ruby-full 方法二:使用 rbenv(需要特定 Ruby 版本)
# 安装 rbenv
git clone https://github.com/rbenv/rbenv.git ~/.rbenv
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(rbenv init -)"' >> ~/.bashrc
source ~/.bashrc

# 安装 ruby-build 插件
git clone https://github.com/rbenv/ruby-build.git ~/.rbenv/plugins/ruby-build

# 安装指定 Ruby 版本(根据项目需要调整)
rbenv install 3.2.0
rbenv global 3.2.0

#验证安装:
ruby -v
  • 3.5 安装 Bundler 和数据库
# 安装 Bundler(Ruby 依赖管理工具)
gem install bundler

# 安装 SQLite3(如项目使用)
sudo apt install -y sqlite3 libsqlite3-dev

# 或安装 PostgreSQL(如项目使用)
sudo apt install -y postgresql postgresql-contrib libpq-dev
  • 3.6 安装 Nginx sudo apt install -y nginx Nginx 比喻:如同机场航站楼,负责验证请求、路由转发、SSL/压缩处理和负载均衡。

阶段 4: 部署应用代码

#4.1 创建项目目录
  sudo mkdir -p /var/www
  sudo chown $USER:$USER /var/www
#4.2 克隆项目
  cd /var/www
  git clone https://github.com/你的用户名/你的项目.git
  cd 你的项目名
#4.3 安装 Gem 依赖
  bundle config set --local deployment 'true'
  bundle config set --local without 'development test'
  bundle install
# 4.4 配置环境变量
# 创建 .env 文件:
  nano .env

.env 文件内容:

# Rails 环境
RAILS_ENV=production
RAILS_SERVE_STATIC_FILES=true

# 安全密钥(使用之前生成的)
SECRET_KEY_BASE=粘贴你生成的密钥

# 数据库配置(SQLite)
DATABASE_URL=sqlite3:db/production.sqlite3

# PostgreSQL 配置(如使用)
# DATABASE_URL=postgresql://用户名:密码@localhost/myapp_production

# Puma 配置(1GB 内存优化)
RAILS_MAX_THREADS=5
WEB_CONCURRENCY=2

# 日志级别
RAILS_LOG_LEVEL=info

# 允许的主机(重要!)
ALLOWED_HOSTS=你的VM外部IP

操作提示:保存按 Ctrl+O,退出按 Ctrl+X

  • 4.5 数据库设置和资源预编译
# 创建数据库
RAILS_ENV=production bundle exec rails db:create

# 运行数据库迁移
RAILS_ENV=production bundle exec rails db:migrate

# 预编译静态资源
RAILS_ENV=production bundle exec rails assets:precompile

# 测试启动(可选)
RAILS_ENV=production bundle exec rails server -b 0.0.0.0 -p 3000
# 按 Ctrl+C 停止测试

阶段 5: 配置 Puma 服务

  • 5.1 创建 Systemd 服务文件 sudo nano /etc/systemd/system/rails.service

粘贴以下内容(根据实际情况修改):

[Unit]
Description=Rails Application (Puma)
After=network.target

[Service]
Type=simple
User=你的用户名
WorkingDirectory=/var/www/你的项目名
EnvironmentFile=/var/www/你的项目名/.env
ExecStart=/实际的bundle路径 exec puma -C config/puma.rb
Restart=always
RestartSec=10
StandardOutput=append:/var/www/你的项目名/log/puma.log
StandardError=append:/var/www/你的项目名/log/puma_error.log

[Install]
WantedBy=multi-user.target

需要替换的内容: 1.你的用户名:运行 whoami 查看 2.你的项目名:你的项目目录名 3./实际的bundle路径:运行 which bundle 获取

  • 5.2 启动并启用服务
# 重新加载 systemd 配置
sudo systemctl daemon-reload

# 启用开机自启
sudo systemctl enable rails

# 启动服务
sudo systemctl start rails

# 查看服务状态
sudo systemctl status rails

# 如有错误,查看日志
sudo journalctl -u rails -n 50

阶段 6: 配置 Nginx 反向代理

6.1 创建 Nginx 配置 sudo nano /etc/nginx/sites-available/rails 粘贴以下配置:

upstream puma {
  server 127.0.0.1:3000 fail_timeout=0;
}

server {
  listen 80;
  server_name 你的云服务器外部IP;

  root /var/www/你的项目名/public;

  # 静态文件处理
  location ~ ^/(assets|packs)/ {
    gzip_static on;
    expires max;
    add_header Cache-Control public;
  }

  try_files $uri/index.html $uri @puma;

  location @puma {
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header Host $http_host;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_redirect off;
    proxy_pass http://puma;
  }

  error_page 500 502 503 504 /500.html;
  client_max_body_size 10M;
  keepalive_timeout 10;
}
  • 6.2 启用配置并重启 Nginx
# 启用站点配置
sudo ln -s /etc/nginx/sites-available/rails /etc/nginx/sites-enabled/

# 删除默认配置
sudo rm /etc/nginx/sites-enabled/default

# 测试配置语法
sudo nginx -t

# 重启 Nginx
sudo systemctl restart nginx

# 查看 Nginx 状态
sudo systemctl status nginx

阶段 7: 配置云服务器防火墙

注意:在创建虚拟机时已开启 HTTP/HTTPS 流量入口的,此步骤应该可跳过。 在 Google Cloud Console 中操作:

  • 1.导航到 VPC 网络 → 防火墙
  • 2.点击 创建防火墙规则
  • 3.配置 HTTP 规则: 名称:allow-http 目标:网络中的所有实例 来源 IP 范围:0.0.0.0/0 协议和端口:tcp:80

阶段 8: 测试访问 🎉

http://你的云服务器外部IP 如一切正常,您将看到您的 Rails 应用已成功上线!

希望你上线顺利 中途需要注意的几个点:

  • 1.环境变量配置完整准确
  • 2.Systemd 服务文件路径一定要正确
  • 3.Nginx 配置无误
  • 4.防火墙规则正确设置
  • 5.还有上线的时候一定要预编译 Rails 的资源文件,不然你的网页上图片会裂开(加载不了图片)hhh

如果你的项目没跑起来,也不要急。好好跟 AI 对话,把你查到的错误日志、或者查看到的状态码都发给 AI 分析,基本上都能通过。

Music and Entertainment Combined sprunki combines music creation and gaming in a way that feels both accessible and entertaining. Rather than simply listening to a soundtrack, players actively participate in building one. This makes the experience more interactive because every decision can influence the final result. You can change characters, rearrange sounds, and experiment until you find something you enjoy. I appreciate games that allow players to become part of the creative process instead of only following predefined challenges.

You need to Sign in before reply, if you don't have an account, please Sign up first.