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

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

介绍

在本教程中,我们将演示如何安装 Phusion Passenger 作为 Rails 友好的 Web 服务器,它易于安装、配置和维护。 我们将把它集成到 Ubuntu 14.04 上的 Apache 中。 在本教程结束时,我们将在 Droplet 上部署一个测试 Rails 应用程序。

如果您更喜欢 Nginx 而不是 Apache,请通过以下链接查看 如何在 Ubuntu 14.04 上使用Passenger 和 Nginx 部署 Rails 应用程序。

先决条件

第一步是创建一个新的 Droplet。 对于较小的站点,使用 512 MB 计划就足够了。

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

请务必使用 Ubuntu 14.04。 在撰写本文时,Ubuntu 14.10 还没有 Passanger APT 存储库。 此外,Ubuntu 14.04 还有一个额外的好处:它是 LTS 版本,代表“长期支持”。 LTS 版本旨在成为我们可以长期坚持的稳定平台。 Ubuntu 保证 LTS 版本将在五年内收到安全更新和其他错误修复。

  • Ubuntu 14.04 32 位液滴

第 1 步 — 添加 Sudo 用户

创建 Droplet 后,您应该创建系统用户并保护服务器。 您可以按照 初始服务器设置 文章进行操作。

如果您想学习本教程,您需要一个具有 sudo 权限的基本用户。 在此示例中,我们将使用 rails 用户。 如果您的用户有其他名称,请确保在接下来的步骤中使用正确的路径。

第 2 步(可选)- 设置您的域

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

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

第 3 步 — 安装 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 libsqlite3-dev sqlite3

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

mkdir ~/ruby

移动到新文件夹:

cd ~/ruby

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

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

解压下载的文件:

tar -xzf ruby-2.1.4.tar.gz

选择解压的目录:

cd ruby-2.1.4

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

./configure

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

make

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

sudo make install

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

ruby -v

如果您的 Ruby 安装成功,您应该会看到如下输出:

ruby 2.1.4p265 (2014-10-27 revision 48166) [x86_64-linux]

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

rm -rf ~/ruby

第 4 步 — 安装 Apache

要安装 Apache,请输入以下命令:

sudo apt-get install apache2

是的,仅此而已!

第 5 步 — 安装乘客

首先,为存储库服务器安装 PGP 密钥:

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

创建一个 APT 源文件:

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

插入以下行以将乘客存储库添加到文件中:

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

CTRL+X 退出,键入 Y 保存文件,然后按 ENTER 确认文件位置。

更改此文件的所有者和权限以限制对 root 的访问:

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

最后,安装Passenger:

sudo apt-get install libapache2-mod-passenger

确保Passenger Apache模块; 它可能已经启用:

sudo a2enmod passenger

重启阿帕奇:

sudo service apache2 restart

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

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

第 6 步 — 部署

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

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

移动到用户的主目录:

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

现在,我们需要为我们的项目创建一个虚拟主机文件。 我们将通过复制默认的 Apache 虚拟主机来做到这一点:

sudo cp /etc/apache2/sites-available/000-default.conf /etc/apache2/sites-available/testapp.conf

打开配置文件:

sudo nano /etc/apache2/sites-available/testapp.conf

编辑它或替换现有内容,使您的最终结果与下面显示的文件匹配。 您需要进行的更改以 red 突出显示。 请记住使用您自己的域名和 Rails 应用程序的正确路径:

<VirtualHost *:80>
    ServerName example.com
    ServerAlias www.example.com
    ServerAdmin webmaster@localhost
    DocumentRoot /home/rails/testapp/public
    RailsEnv development
    ErrorLog ${APACHE_LOG_DIR}/error.log
    CustomLog ${APACHE_LOG_DIR}/access.log combined
    <Directory "/home/rails/testapp/public">
        Options FollowSymLinks
        Require all granted
    </Directory>
</VirtualHost>

基本上,这个文件可以在端口 80 上监听我们的域名,为 www 子域设置别名,设置我们服务器管理员的邮件地址,为我们的新项目的公共目录设置根目录,并允许访问我们的网站。 您可以通过以下链接了解有关 Apache 虚拟主机 的更多信息。

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

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

保存文件(CTRL+X、Y、ENTER)。

禁用默认站点,启用新站点,然后重新启动 Apache:

sudo a2dissite 000-default
sudo a2ensite testapp
sudo service apache2 restart

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

http://droplet_ip_address

验证您的应用是否已部署。 您应该看到您的自定义应用程序,或 Welcome aboard 默认 Rails 页面:

Rails 应用程序现在在您的服务器上运行。

第 7 步 — 定期更新

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

要更新Passenger 和Apache,您需要运行一个基本的系统更新:

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

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

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

sudo service apache2 restart