如何使用Passenger和Nginx部署Rails

介绍

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

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

第一步 - 创建你的CVM

创建一个新的UbuntuCVM。对于较小的站点,只需采用1GB内存即可。没有服务器的同学可以在这里购买,不过我个人更推荐您使用免费的腾讯云开发者实验室进行试验,学会安装后在购买服务器

1G配置建议您选择32位Ubuntu映像,因为内存消耗较小(64位程序比32位程序使用的内存多50%)。但是,如果您需要更大的机器或者有可能升级到4 GB以上的RAM,则应选择64位版本。

创建CVM后,系统会默认给您分配一个具有Sudo权限的账户

第二步 - 设置域名(可选)

如果你没有域名,建议您先去这里注册一个域名,您需要将域名解析到您的服务器,您可以使用腾讯云云解析进行快速设置。当然,您也可以选择不购买,直接使用CVM所分配的公网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。如果有更新的版本,则需要替换以下命令中的链接:

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。这样,安装起来变的更简单了。首先,安装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;

保存并退出。

第六步 - 部署

在本教程中,我们将直接在CVM上创建一个新的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 请打开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,并将根目录设置为新项目的公共目录。root行是你要修改,以配合您的Rails应用程序的位置之一。如果您不想将域名分配给此应用程序,则可以跳过server_name行,使用您的IP地址。

要测试我们的设置,我们希望看到Rails Welcome aboard页面。但是,仅当应用程序在开发环境中启动时,此方法才有效。默认情况下,Passenger在生产环境中启动应用程序,因此我们需要使用passenger_app_env选项更改此选项。如果您的应用已准备好投放,则需要保留此设置。

保存文件(CTRL + xyENTER)。

为它创建一个符号链接:

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

重启Nginx:

sudo nginx -s reload

现在您的应用程序的网站应该是可访问了。使用您的CVM的IP地址或者您的域名:

http://CVM_ip_address

验证结果:

您应该在服务器上看到Rails测试应用程序已经可以访问了。

第七步 - 定期更新

要更新Ruby,您需要编译最新版本,如本教程的第四步所示。要使用Nginx更新Passenger,您需要运行基本系统更新:

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

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

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

sudo service nginx restart

你学会了吗?如果您在生产环境,我建议您在给Nginx加上一层保护,使用腾讯云SSL证书。如何设置此证书取决于你是否拥有可解析该服务器的域名。

更多Linux教程请前往腾讯云+社区学习更多知识。


参考文献:《How To Deploy a Rails App with Passenger and Nginx on Ubuntu 14.04》

原创声明,本文系作者授权云+社区发表,未经许可,不得转载。

如有侵权,请联系 yunjia_community@tencent.com 删除。

编辑于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏Java后端技术栈

使用Redis存储Nginx+Tomcat负载均衡集群的Session

环境:Cent OS 7.0(虚拟机环境)、Nginx 1.9.8、Redis 3.2.1

1102
来自专栏腾讯云Elasticsearch Service

Elasticsearch跨集群数据迁移之离线迁移

用户在腾讯云上自建的ES集群或者在其它云厂商购买的ES集群,如果要迁移至腾讯云ES,用户可以根据自己的业务需要选择适合自己的迁移方案。如果业务可以停服或者可以暂...

3.3K9
来自专栏云计算教程系列

如何在Ubuntu 16.04上将Redis服务器设置为PHP的会话处理程序

Redis是一个开源键值缓存和存储系统,由于其对多种数据类型(如散列,列表,集合和位图等)的高级支持,也称为数据结构服务器。它还支持群集,使其在高度可用和可扩展...

1483
来自专栏Samego开发资源

集群反向代理实现负载均衡『nginx & apache2』

2043
来自专栏java沉淀

Centos 7下安装mysql

·mysql-5.7.12-linux-glibc2.5-x86_64.tar.gz

92919
来自专栏云计算教程系列

如何在Ubuntu 14.04上安装Munin监视工具

Munin是一个系统,网络和基础设施监控应用程序,通过Web浏览器以图形形式提供信息。它是围绕客户端 - 服务器架构设计的,可以配置为监控它所安装的机器(Mun...

1180
来自专栏小樱的经验随笔

Linux目录结构

Linux 目录结构 装完Linux,首先需要弄清Linux 标准目录结构 ? / root —?启动Linux时使用的一些核心文件。如操作系统内核、引导程序G...

4576
来自专栏Java学习网

http错误码对照表

http错误码对照表 2xx 成功 200 正常;请求已完成。 201 正常;紧接 POST 命令。 202 正常;已接受用于处理,但处理尚未完成。...

2367
来自专栏云计算教程系列

如何在Ubuntu 14.04上使用Git Hooks部署Rails应用程序

在本教程中,我们将向您展示如何使用Git hooks自动将Rails应用程序的生产环境部署到远程Ubuntu 14.04服务器。使用Git hooks将允许您通...

1776
来自专栏云计算教程系列

如何在Ubuntu 13.10上从Binary Tarballs安装MariaDB

目前,MariaDB可以直接替代MySQL而不需要任何额外代码配置。本文将介绍如何在Ubuntu 13.10 VPS上安装MariaDB5.5.34 x86_6...

1243

扫码关注云+社区

领取腾讯云代金券