如何在 Ubuntu 14.04 上使用 Passenger 和 Nginx 部署 Rails 应用

简介: 如何在 Ubuntu 14.04 上使用 Passenger 和 Nginx 部署 Rails 应用

简介

如果你是一名 Ruby on Rails 开发者,你可能需要一个 Web 服务器来托管你的 Web 应用程序。本教程将向你展示如何使用 Phusion Passenger 作为你的 Rails 友好型 Web 服务器。Passenger 安装、配置和维护都很简单,而且可以与 Nginx 或 Apache 一起使用。在本教程中,我们将在 Ubuntu 14.04 上使用 Nginx 安装 Passenger。

另一种部署 Rails 应用程序的方法是使用 Nginx 与 Unicorn 的 1-Click Rails 安装,Unicorn 是一个可以同时处理多个请求的 HTTP 服务器。

在本教程结束时,你将在你的 Passenger/Nginx Web 服务器上部署一个测试的 Rails 应用程序,并可以通过域名或 IP 地址访问。

步骤一 — 创建你的 Droplet

创建一个新的 Ubuntu 14.04 Droplet。对于较小的站点,选择 512 MB 的计划就足够了。

!Droplet 大小

你可能想选择 32 位的 Ubuntu 镜像,因为它消耗的内存较小(64 位程序使用的内存约比 32 位程序多 50%)。但是,如果你需要更大的机器,或者有可能升级到超过 4 GB 的 RAM,你应该选择 64 位版本。

!Droplet 镜像

步骤二 — 添加一个 Sudo 用户

创建 Droplet 后,需要进行额外的系统管理工作。你应该创建一个系统用户并保护服务器。

请参考《初始化服务器设置》文章。

在本教程中,你应该创建一个具有 sudo 权限的基本用户。在本例中,我们将使用 rails 用户。如果你的用户有其他名称,请确保在接下来的步骤中使用正确的路径。

步骤三(可选) — 设置你的域名

为了确保你的站点可以正常访问,你需要设置你的 DNS 记录,将你的域名指向你的新服务器。你可以通过以下链接找到有关设置主机名的更多信息。

但是,这一步骤是可选的,因为你可以通过 IP 地址访问你的站点。

步骤四 — 安装 Ruby

我们将从源代码手动安装 Ruby。

在做其他任何事情之前,我们应该运行更新,确保我们要安装的所有软件包都是最新的:

sudo apt-get update

接下来,安装一些依赖项。这应该使安装尽可能顺利:

sudo apt-get install build-essential libssl-dev libyaml-dev libreadline-dev openssl curl git-core zlib1g-dev bison libxml2-dev libxslt1-dev libcurl4-openssl-dev nodejs libsqlite3-dev sqlite3

为 Ruby 源文件创建一个临时文件夹:

mkdir ~/ruby

切换到新文件夹:

cd ~/ruby

下载最新的稳定 Ruby 源代码。在撰写本文时,这是版本 2.1.3。你可以从 Download Ruby 网站获取当前最新版本。如果有新版本可用,你需要替换以下命令中的链接:

wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.3.tar.gz

解压下载的文件:

tar -xzf ruby-2.1.3.tar.gz

选择提取的目录:

cd ruby-2.1.3

运行配置脚本。这将花费一些时间,因为它会检查依赖关系并创建一个新的 Makefile,其中包含编译代码所需的步骤:

./configure

运行 make 实用程序,它将使用 Makefile 来构建可执行程序。这一步可能需要更长的时间:

make

现在,使用 install 参数再次运行相同的命令。它将尝试将已编译的二进制文件复制到 /usr/local/bin 文件夹。此步骤需要 root 访问权限才能写入此目录。这也需要一些时间:

sudo make install

Ruby 现在应该已安装在系统上。我们可以使用以下命令来检查,它应该打印出 Ruby 版本:

ruby -v

最后,我们可以删除临时文件夹:

rm -rf ~/ruby

步骤五 — 安装 Passenger 和 Nginx

过去安装 Passenger 的首选方法是使用 RubyGems 进行通用安装(passenger-install-nginx-module)。

然而,现在你可以使用高级打包工具(APT)在 Ubuntu 上安装 Passenger,这就是我们将要使用的方法。通过这种方式,Passenger 与 Nginx 的安装,甚至更重要的是更新过程,都非常简单。

首先,安装一个 PGP 密钥:

sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

创建一个 APT 源文件(你将需要 sudo 权限):

sudo nano /etc/apt/sources.list.d/passenger.list

并在文件中插入以下行:

deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

按下 CTRL+x 退出,输入 y 保存文件,然后按 ENTER 确认文件位置。

更改此文件的所有者和权限:

sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

更新 APT 缓存:

sudo apt-get update

最后,安装带有 Nginx 的 Passenger:

sudo apt-get install nginx-extras passenger

这一步将覆盖我们的 Ruby 版本为旧版本。要解决这个问题,只需删除错误的 Ruby 位置,并创建一个新的符号链接指向正确的 Ruby 二进制文件:

sudo rm /usr/bin/ruby
sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

第六步 — 设置 Web 服务器

打开 Nginx 配置文件:

sudo nano /etc/nginx/nginx.conf

在 http 块中找到以下行:

# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

取消注释这两行。更新 passenger_ruby 行中的路径。它们应该如下所示:

passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
passenger_ruby /usr/local/bin/ruby;

保存并退出文件。

第七步 — 部署

此时,如果您已经准备好自己的 Rails 应用程序,可以部署您自己的应用程序。如果要部署现有应用程序,可以将项目上传到服务器并跳过 /etc/nginx/sites-available/default 步骤。

在本教程中,我们将直接在 Droplet 上创建一个新的 Rails 应用程序。我们将需要 rails gem 来创建新的应用程序。

移动到您的用户主目录(否则,您将收到错误 No such file or directory - getcwd)–

cd ~

安装 rails gem(不安装额外文档以加快安装速度)。这仍然需要几分钟:

sudo gem install --no-rdoc --no-ri rails

现在我们可以创建一个新的应用程序。在我们的示例中,我们将使用名称 testapp。如果您想使用其他名称,请确保使用正确的路径。我们将跳过 Bundler 安装,因为我们希望稍后手动运行它。

rails new testapp --skip-bundle

进入目录:

cd testapp

现在我们需要安装一个 JavaScript 执行环境。它可以安装为 therubyracer gem。要安装它,请打开 Gemfile

nano Gemfile

找到以下行:

# gem 'therubyracer',  platforms: :ruby

取消注释它:

gem 'therubyracer',  platforms: :ruby

保存文件,并运行 Bundler:

bundle install

我们需要禁用默认的 Nginx 配置。打开 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/default

找到以下行:

listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

将其注释掉,如下所示:

# listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;

保存文件。

现在,为我们的应用程序创建一个 Nginx 配置文件:

sudo nano /etc/nginx/sites-available/testapp

添加以下 server 块。下面解释了这些设置。

server {
  listen 80 default_server;
  server_name www.mydomain.com;
  passenger_enabled on;
  passenger_app_env development;
  root /home/rails/testapp/public;
}

在此文件中,我们启用在端口 80 上监听,设置您的域名,启用 Passenger,并将根目录设置为我们新项目的 public 目录。根行是您要编辑以匹配您的 Rails 应用程序上传位置的行。

如果您不想将您的域名分配给此应用程序,可以跳过 server_name 行,或使用您的 IP 地址。

为了测试我们的设置,我们希望看到 Rails Welcome aboard 页面。但是,这仅在应用程序以开发环境启动时才有效。Passenger 默认情况下以生产环境启动应用程序,因此我们需要使用 passenger_app_env 选项更改此设置。如果您的应用程序已准备好投入生产,您将希望省略此设置。

保存文件(CTRL+x, y, ENTER)。

为其创建一个符号链接:

sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/testapp

重新启动 Nginx:

sudo nginx -s reload

现在您的应用程序的网站应该是可访问的。转到您的 Droplet 的域名或 IP 地址:

http://droplet_ip_address

并验证结果:

!Test page

您应该在服务器上看到 Rails 测试应用程序已上线。

第八步 — 定期更新

要更新 Ruby,您需要按照本教程中第四步中所示的方式编译最新版本。

要更新带有 Nginx 的 Passenger,您需要运行基本系统更新:

sudo apt-get update && sudo apt-get upgrade

但是,如果有新的系统 Ruby 版本可用,它可能会覆盖我们从源代码安装的 Ruby。因此,您可能需要重新运行删除现有版本的 Ruby 和创建新的符号链接到 Ruby 二进制文件的命令。它们列在本教程的第五步的末尾。

更新过程完成后,您需要重新启动 Web 服务器:

sudo service nginx restart


目录
相关文章
|
5月前
|
应用服务中间件 网络安全 nginx
手把手教你使用 Docker 部署 Nginx 教程
本文详解Nginx核心功能与Docker部署优势,涵盖镜像拉取、容器化部署(快速、挂载、Compose)、HTTPS配置及常见问题处理,助力高效搭建稳定Web服务。
2205 4
|
6月前
|
人工智能 Ubuntu 前端开发
Dify部署全栈指南:AI从Ubuntu配置到HTTPS自动化的10倍秘籍
本文档介绍如何部署Dify后端服务及前端界面,涵盖系统环境要求、依赖安装、代码拉取、环境变量配置、服务启动、数据库管理及常见问题解决方案,适用于开发与生产环境部署。
1332 1
|
5月前
|
应用服务中间件 Linux nginx
在虚拟机Docker环境下部署Nginx的步骤。
以上就是在Docker环境下部署Nginx的步骤。需要注意,Docker和Nginix都有很多高级用法和细节需要掌握,以上只是一个基础入门级别的教程。如果你想要更深入地学习和使用它们,请参考官方文档或者其他专业书籍。
258 5
|
5月前
|
Ubuntu API C++
C++标准库、Windows API及Ubuntu API的综合应用
总之,C++标准库、Windows API和Ubuntu API的综合应用是一项挑战性较大的任务,需要开发者具备跨平台编程的深入知识和丰富经验。通过合理的架构设计和有效的工具选择,可以在不同的操作系统平台上高效地开发和部署应用程序。
231 11
|
应用服务中间件 PHP nginx
今日小结通过aliyun的本地容器镜像部署我的nginx和php环境
简介: 本教程介绍如何基于 Dragonwell 的 Ubuntu 镜像创建一个运行 Nginx 的 Docker 容器。首先从阿里云容器镜像服务拉取基础镜像,然后编写 Dockerfile 确保 Nginx 作为主进程运行,并暴露 80 端口。最后,在包含 Dockerfile 的目录下构建自定义镜像并启动容器,确保 Nginx 在前台运行,避免容器启动后立即退出。通过 `docker build` 和 `docker run` 命令完成整个流程。
487 25
今日小结通过aliyun的本地容器镜像部署我的nginx和php环境
|
10月前
|
Ubuntu 网络协议 应用服务中间件
在 Ubuntu 上安装 Nginx
在 Ubuntu 上安装和配置 Nginx 非常简单。首先更新系统包,然后通过 `apt` 安装 Nginx,检查服务状态并配置防火墙规则。访问服务器 IP 测试是否成功显示默认页面。还可管理服务、创建虚拟主机及排查常见问题,适合新手快速上手部署高性能 Web 服务。
1229 0
|
9月前
|
Ubuntu 安全 数据安全/隐私保护
在Docker容器中部署GitLab服务器的步骤(面向Ubuntu 16.04)
现在,你已经成功地在Docker上部署了GitLab。这就是我们在星际中的壮举,轻松如同土豆一样简单!星际旅行结束,靠岸,打开舱门,迎接全新的代码时代。Prepare to code, astronaut!
595 12
|
7月前
|
存储 数据采集 监控
ubuntu(linux)系统主要应用于哪些工业场景中?研维三防ubuntu系统的手持工业三防平板电脑在哪些行业中有实际应用
Ubuntu 系统凭借其独特的优势,在众多工业场景中得到了广泛应用,为工业数字化、智能化发展提供了有力支持。而研维三防基于 Ubuntu 定制系统的手持工业三防平板电脑,更是将 Ubuntu 系统的优势与工业级的性能、坚固耐用性完美结合,在电力、物流、制造等多个行业中展现出强大的应用价值,助力企业提高生产效率、优化管理流程、提升产品质量,成为推动工业现代化发展的重要力量。随着技术的不断进步与创新,相信 Ubuntu 系统以及研维三防这类工业级设备将在更多的工业领域中发挥更大的作用,为工业发展带来更多的机遇与变革。
|
9月前
|
Ubuntu 定位技术
Ubuntu 20.04应用部署:Beyond Compare 4.4.7安装教程
这样,你就成功在Ubuntu 20.04上安装了Beyond Compare 4.4.7。就像一个探险者,你有了罗盘,有了地图,熟能生巧,你就可以在未知的世界中探索,发现,享受这个过程。这是一次成功的探险,你做得很好!
1283 7
|
10月前
|
应用服务中间件 Linux 网络安全
技术指南:如何把docsify项目部署到基于CentOS系统的Nginx中。
总结 与其他部署方法相比,将docsify项目部署到基于CentOS系统的Nginx中比较简单。以上步骤应当帮助你在不花费太多时间的情况下,将你的项目顺利部署到Nginx中。迈出第一步,开始部署你的docsify项目吧!
408 14