前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何使用Passenger和Nginx部署Rails

如何使用Passenger和Nginx部署Rails

原创
作者头像
乌鸦
修改2018-08-06 14:39:55
5K0
修改2018-08-06 14:39:55
举报
文章被收录于专栏:云计算教程系列

介绍

如果您是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。我们应该运行更新以确保我们要安装的所有软件包都是最新的:

代码语言:javascript
复制
sudo apt-get update

接下来,安装一些编译依赖项。使用下面的命令快速安装:

代码语言:javascript
复制
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源文件创建一个临时文件夹:

代码语言:javascript
复制
mkdir ~/ruby

移至新文件夹:

代码语言:javascript
复制
cd ~/ruby

下载最新的稳定Ruby源代码。在撰写本文时,这是版本2.1.3。如果有更新的版本,则需要替换以下命令中的链接:

代码语言:javascript
复制
wget http://cache.ruby-lang.org/pub/ruby/2.1/ruby-2.1.3.tar.gz

解压缩下载的文件:

代码语言:javascript
复制
tar -xzf ruby-2.1.3.tar.gz

选择解压缩的目录:

代码语言:javascript
复制
cd ruby-2.1.3

运行配置脚本。这需要一些时间来检查依赖项并创建一个新的Makefile

代码语言:javascript
复制
./configure

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

代码语言:javascript
复制
make

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

代码语言:javascript
复制
sudo make install

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

代码语言:javascript
复制
ruby -v

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

代码语言:javascript
复制
rm -rf ~/ruby

第四步 - 安装Passenger和Nginx

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

但是,您现在可以使用高级打包工具(APT)在Ubuntu上安装Passenger。这样,安装起来变的更简单了。首先,安装PGP密钥:

代码语言:javascript
复制
sudo apt-key adv --keyserver keyserver.ubuntu.com --recv-keys 561F9B9CAC40B2F7

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

代码语言:javascript
复制
sudo nano /etc/apt/sources.list.d/passenger.list

并在文件中插入以下行:

代码语言:javascript
复制
deb https://oss-binaries.phusionpassenger.com/apt/passenger trusty main

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

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

代码语言:javascript
复制
sudo chown root: /etc/apt/sources.list.d/passenger.list
sudo chmod 600 /etc/apt/sources.list.d/passenger.list

更新APT缓存:

代码语言:javascript
复制
sudo apt-get update

最后,使用Nginx安装Passenger:

代码语言:javascript
复制
sudo apt-get install nginx-extras passenger

此步骤将覆盖我们的Ruby版本旧版本。要解决此问题,只需删除不正确的Ruby位置并为正确的Ruby二进制文件链接到相应的运行位置即可。

代码语言:javascript
复制
sudo rm /usr/bin/ruby
sudo ln -s /usr/local/bin/ruby /usr/bin/ruby

第五步 - 设置Web服务器

打开Nginx配置文件:

代码语言:javascript
复制
sudo nano /etc/nginx/nginx.conf

在http中找到以下行:

代码语言:javascript
复制
# passenger_root /usr/lib/ruby/vendor_ruby/phusion_passenger/locations.ini;
# passenger_ruby /usr/bin/ruby;

取消注释。更新passenger_ruby行中的路径。他们应该是这样的:

代码语言:javascript
复制
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) `)

代码语言:javascript
复制
cd ~

安装rails gem这需要几分钟:

代码语言:javascript
复制
sudo gem install --no-rdoc --no-ri rails

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

代码语言:javascript
复制
rails new testapp --skip-bundle

进入目录:

代码语言:javascript
复制
cd testapp

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

代码语言:javascript
复制
nano Gemfile

找到以下行:

代码语言:javascript
复制
# gem 'therubyracer',  platforms: :ruby

并取消注释:

代码语言:javascript
复制
gem 'therubyracer',  platforms: :ruby

保存文件,然后运行Bundler:

代码语言:javascript
复制
bundle install

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

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/default

找到行:

代码语言:javascript
复制
listen 80 default_server;
listen [::]:80 default_server ipv6only=on;

改成这样:

代码语言:javascript
复制
# listen 80 default_server;
# listen [::]:80 default_server ipv6only=on;

保存文件。

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

代码语言:javascript
复制
sudo nano /etc/nginx/sites-available/testapp

添加以下server块。设置说明如下。

代码语言:javascript
复制
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)。

为它创建一个符号链接:

代码语言:javascript
复制
sudo ln -s /etc/nginx/sites-available/testapp /etc/nginx/sites-enabled/testapp

重启Nginx:

代码语言:javascript
复制
sudo nginx -s reload

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

代码语言:javascript
复制
http://CVM_ip_address

验证结果:

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

第七步 - 定期更新

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

代码语言:javascript
复制
sudo apt-get update && sudo apt-get upgrade

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

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

代码语言:javascript
复制
sudo service nginx restart

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

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


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

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • 第一步 - 创建你的CVM
  • 第二步 - 设置域名(可选)
  • 第三步 - 安装Ruby
  • 第四步 - 安装Passenger和Nginx
  • 第五步 - 设置Web服务器
  • 第六步 - 部署
  • 第七步 - 定期更新
相关产品与服务
SSL 证书
腾讯云 SSL 证书(SSL Certificates)为您提供 SSL 证书的申请、管理、部署等服务,为您提供一站式 HTTPS 解决方案。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档