如何在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 选项进行更改。 如果您的应用程序已准备好投入生产,您将希望保留此设置。
如果您不想将您的域分配给此应用程序,您可以跳过 ServerName
和 ServerAlias
行,或使用您的 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