如何在Ubuntu14.04上使用Passenger和Nginx部署Rails应用程序

来自菜鸟教程
跳转至:导航、​搜索

介绍

如果您是 Ruby on Rails 开发人员,您可能需要一个 Web 服务器来托管您的 Web 应用程序。 本教程向您展示如何使用 Phusion Passenger 作为 Rails 友好的 Web 服务器。 Passenger 易于安装、配置和维护,可与 Nginx 或 Apache 一起使用。 在本教程中,我们将在 Ubuntu 14.04 上使用 Nginx 安装Passenger。

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

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

第一步——创建你的 Droplet

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

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

第二步——添加一个 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 版。 您可以从 下载 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 with 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 目录。 root 行是您要编辑以匹配 Rails 应用程序的上传位置的行。

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

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

保存文件(CTRL+xyENTER)。

为它创建一个符号链接:

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

重启 Nginx:

sudo nginx -s reload

现在您的应用程序的网站应该可以访问了。 导航到您的 Droplet 的域或 IP 地址:

http://droplet_ip_address

并验证结果:

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

第八步——定期更新

要更新 Ruby,您需要编译最新版本,如本教程的第四步所示。

要使用 Nginx 更新乘客,您需要运行基本的系统更新:

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

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

在更新过程之后,您将需要重新启动 Web 服务器:

sudo service nginx restart