如何在CentOS6.5上使用Nginx乘客部署Rails应用程序

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

状态:已弃用

本文介绍了不再受支持的 CentOS 版本。 如果您目前正在运行运行 CentOS 6 的服务器,我们强烈建议您升级或迁移到受支持的 CentOS 版本。

原因CentOS 6 已于 2020 年 11 月 30 日结束生命周期 (EOL) ,不再接收安全补丁或更新。 因此,不再维护本指南。

请参阅:本指南可能仍可用作参考,但可能不适用于其他 CentOS 版本。 如果可用,我们强烈建议使用为您正在使用的 CentOS 版本编写的指南。


介绍


挑战永远不会真正结束,特别是如果您是某个计算机编程领域的新手。 在这种情况下,我们的主题是 Rails 以及如何让您的基于 Ruby On Rails 的 Web 应用程序在线 - 可能是最简单和最快的方法。

在解决了使用 Ruby 编程语言和 Rails Web 应用程序开发框架开始开发应用程序的难题之后,当需要与世界其他地方共享您的应用程序时,您可能会对所有可用的选择和存在的无数种可能的组合。

在这篇 DigitalOcean 文章中,我们将从头到尾向您展示如何部署坚如磐石的 Rails 应用程序(即 在线发布)使用以稳定性着称的最新可用 CentOS 操作系统。 这将与以简单和出色功能着称的 Phusion Passenger 应用服务器一起,再加上运行在前面的 Nginx HTTP 服务器来处理和管理连接。

注意: 在本演练过程中,建议您查看并阅读所提供链接的内容。 它们将帮助您提高性能、安全性等。

词汇表


1. Web 应用程序部署、服务器及其角色


  1. Phusion 乘客应用服务器
  2. Nginx HTTP 服务器作为反向代理运行

2. 准备部署服务器


  1. 更新和准备操作系统
  2. 设置 Ruby 环境和 Rails
  3. 下载和安装服务器应用程序

3. 准备部署应用程序


  1. 创建示例应用程序/上传您的源代码
  2. 创建 Nginx 管理脚本
  3. 配置 Nginx

4. 延伸阅读


Web 应用程序部署、服务器及其角色


在部署 Web 应用程序或将它们上线时,通常有多层应用程序用于此目的。 当然,一个人可以完成这项工作,但可能不是很好,因为它们不是万能的。

在本教程中,我们将使用 Phusion Passenger 作为应用服务器。 应用程序服务器的工作包括包含现代 Web 应用程序(例如 Ruby Rack、Python WSGI 等)并充当传入 Web 请求的辅助入口点。

另一方面,Nginx 被设计成一个多用途的 HTTP 服务器。 它能够提供静态文件(例如 图片,文本文件等)非常好,平衡连接,并处理某些漏洞尝试。 它充当所有请求的第一个入口点,并将它们传递给Passenger,以便Web 应用程序处理并返回响应。

Phusion 乘客应用服务器


如今,Passenger 已成为 the 为 Ruby on Rails 应用程序推荐的服务器。 它是一款成熟、功能丰富的产品,旨在满足应用程序部署的必要需求和领域,同时大大简化设置和启动程序。 它通过与 Nginx(以及 Apache)的直接集成消除了传统的中间人服务器设置架构。 它也被称为 mod_rails。

乘客非常受欢迎,并在许多生产场景中广泛使用。 很容易联系并找到专家,以及在线解决您的问题。

我们将使用的开源版本具有 多进程 单线程 操作模式。 它的企业版可以配置为单线程或多线程工作。

如需了解Passenger的更多信息,您可以访问其官网https://www.phusionpassenger.com/。

Nginx HTTP 服务器作为反向代理运行


Nginx 是一个非常高性能的 web 服务器 / (reverse)-proxy。 由于重量轻、相对容易使用和易于扩展(使用附加组件/插件),它已经流行起来。 由于其架构,它能够处理 很多 的请求(几乎无限制),这取决于您的应用程序或网站负载 - 使用其他一些较旧的替代方案可能真的很难解决。

记住:“处理”连接在技术上意味着不丢弃它们并且能够使用某物为它们服务。 您仍然需要您的应用程序和数据库运行良好才能让 Nginx 为客户端 响应 而不是错误消息。

由于它的流行和成功,我们将部署在 Nginx 后面运行的应用程序,以从其强大的功能中受益。

要了解更多关于 Nginx 的信息,您可以访问位于 nginx.com 的官方网站。

准备部署服务器


在本节中,我们将执行以下步骤来获得一个坚如磐石的服务器,准备好为您的应用程序提供服务。

  • 更新操作系统
  • 获取部署所需的基本工具
  • 安装 Ruby、Rails 和库
  • 安装应用程序(即 乘客)和 HTTP 服务器(Nginx)

更新和准备操作系统


为了安装 Ruby 和其他必要的应用程序(例如 我们的服务器),我们需要首先准备最小化的 CentOS droplet,并为它配备一些我们在此过程中需要的开发工具。

运行以下命令来更新基于 CentOS 的 droplet 的默认工具:

yum -y update

# This command will update all the base applications
# that come with CentOS by default. Which are mostly
# reserved for use by the operating system. 

通过执行以下命令安装包含开发工具的包:

yum groupinstall -y 'development tools'

# With more recent versions of CentOS, such as 6.5 in our case,
# you can simply run:
# yum groupinstall -y development
# instead.

# This bundle of applications contains various tools
# Such as: gcc, make, automake, binutils, git etc.

本教程需要的一些包(例如 libyaml-devel、nginx 等)在 CentOS 官方存储库中是 not。 为了简化事情而不是手动安装它们,我们将添加 EPEL 软件存储库供 YUM 和其他包管理器使用。

# Enable EPEL Repository
sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'

# Update everything, once more.
yum -y update

最后,为了让Passenger 使用我们将在下一节中安装的Nginx,我们需要curl-devel 库和nano 文本编辑器。 同样对于 Rails,我们将需要 sqlite-devel

要安装 curl-devel 和 nano,请运行以下命令:

yum install -y curl-devel nano sqlite-devel libyaml-devel

设置 Ruby 环境和 Rails


注意:本节是我们专门文章如何在CentOS 6.5上安装Ruby 2.1.0的摘要。

我们将使用 Ruby 版本管理器 (RVM) 下载和安装 Ruby 解释器(或 RVM 所指的“rubies”)。

运行以下两条命令安装 RVM 并为 Ruby 创建系统环境:

curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh

最后,为了在我们的系统上完成 Ruby 的安装,让我们让 RVM 下载并安装 Ruby 版本 2.1.0:

rvm reload
rvm install 2.1.0

在 Ruby 之后,我们可以使用 RubyGems 包管理器来帮助我们获得其他基于 Ruby 的工具,例如 Rails 框架。

因为 Rails 首先需要一个 JavaScript 解释器才能工作,所以我们还需要设置 Node.js。 为此,我们将使用默认的系统包管理器 YUM。

运行以下命令以使用 yum 下载并安装 nodejs:

yum install -y nodejs

使用 RubyGems 的 gem 执行以下命令下载并安装 rails

gem install bundler rails

下载和安装服务器应用程序


注意: 如果您的 VPS 的 RAM 少于 1 GB,您将需要执行以下简单的过程来准备一个 SWAP 磁盘空间用作临时数据持有者(RAM 替代品)。 由于 DigitalOcean 服务器带有快速 SSD 磁盘,因此在执行服务器应用程序安装任务时这并不真正构成问题。

# Create a 1024 MB SWAP space
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap

Phusion乘客


Red Hat Linux 的默认包管理器 RPM(RPM 包管理器)提供包含在 .rpm 文件中的应用程序。 不幸的是,就乘客而言,它们已经过时了。 因此,我们将再次使用 RubyGem 下载并安装最新可用版本的 Passenger – version 4

使用以下命令简单地下载和安装乘客:

gem install passenger

# This command will fetch Passenger v4.0(.35+) for you.

要测试乘客是否已正确下载和设置,请尝试运行 passenger

您应该会看到类似于以下的输出:

Phusion Passenger Standalone, the easiest way to deploy Ruby web apps.

Available commands:

  passenger start            Start Phusion Passenger Standalone.

..

Nginx


通常,要下载和安装 Nginx,您可以添加 EPEL 存储库并通过 yum 获取 Nginx。 然而,为了让 Nginx 与Passenger 一起工作,它的源代码必须使用必要的模块进行编译。 不过,别担心! 乘客附带了一个方便的工具,使该过程像执行单个命令一样简单。

运行以下命令开始使用本机Passenger模块编译Nginx:

passenger-install-nginx-module

运行命令后,按 Enter 并确认您选择的语言(即 Ruby,在我们的例子中)。 如果您愿意,可以使用箭头键和空格键单独选择 Ruby。

Use <space> to select.
If the menu doesn't display correctly, ensure that your terminal supports UTF-8.

 ‣ ⬢  Ruby
   ⬢  Python
   ⬢  Node.js
   ⬡  Meteor

在下一步中,选择第 1 项:

1. Yes: download, compile and install Nginx for me. (recommended)
    The easiest way to get started. A stock Nginx 1.4.4 with Passenger
    support, but with no other additional third party modules, will be
    installed for you to a directory of your choice.

然后按 Enter 继续。

现在,将下载、编译和安装 Nginx 源代码,并支持乘客。

注意:这个动作可能需要一点时间——可能比人们想要或预期的要长!

准备部署应用程序


注意: 在本节中,我们将使用一个非常简单的 Ruby On Rails 应用程序作为示例。 对于您的应用程序的实际部署,您应该上传您的代码库并确保安装了它的所有依赖项。

创建示例应用程序/上传您的源代码


让我们从在我们的主目录中创建一个非常基本的 Rails 应用程序开始,以服务于 Passenger 和 Nginx。

执行以下命令让 Rails 在 /var/www 目录中创建一个名为 my_app 的新应用程序:

# Create a sample Rails application
cd /var
mkdir www
cd www
rails new my_app

# Enter the application directory
cd my_app

# Create a sample resource
rails generate scaffold Task title:string note:text

# Create a sample database
RAILS_ENV=development rake db:migrate

要测试您的应用程序是否设置正确并且一切正常,请进入应用程序目录并使用 rails s 运行一个简单的服务器:

# Enter the application directory
cd /var/www/my_app

# Run a simple server
rails s

# You should now be able to access it by
# visiting: http://[your droplet's IP]:3000/tasks

# In order to terminate the server process,
# Press CTRL+C

注意:对于实际部署,当你想将你的代码库上传到服务器时,你可以使用SFTP或图形工具[]例如FileZilla]来安全地传输和管理远程文件。

创建 Nginx 管理脚本


编译好 Nginx 后,为了方便控制,我们需要创建一个简单的管理脚本。

运行以下命令来创建脚本:

nano /etc/rc.d/init.d/nginx

复制并粘贴以下内容:

#!/bin/sh
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
[ "$NETWORKING" = "no" ] && exit 0

nginx="/opt/nginx/sbin/nginx"
prog=$(basename $nginx)

NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"

lockfile=/var/lock/subsys/nginx

start() {
    [ -x $nginx ] || exit 5
    [ -f $NGINX_CONF_FILE ] || exit 6
    echo -n $"Starting $prog: "
    daemon $nginx -c $NGINX_CONF_FILE
    retval=$?
    echo
    [ $retval -eq 0 ] && touch $lockfile
    return $retval
}

stop() {
    echo -n $"Stopping $prog: "
    killproc $prog -QUIT
    retval=$?
    echo
    [ $retval -eq 0 ] && rm -f $lockfile
    return $retval
}

restart() {
    configtest || return $?
    stop
    start
}

reload() {
    configtest || return $?
    echo -n $”Reloading $prog: ”
    killproc $nginx -HUP
    RETVAL=$?
    echo
}

force_reload() {
    restart
}

configtest() {
    $nginx -t -c $NGINX_CONF_FILE
}

rh_status() {
    status $prog
}

rh_status_q() {
    rh_status >/dev/null 2>&1
}

case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac

按 CTRL+X 并用 Y 确认保存并退出。

将此管理脚本的模式设置为可执行:

chmod +x /etc/rc.d/init.d/nginx

配置 Nginx


在配置服务器的最后一步中,我们需要创建一个 Nginx 服务器块,它大致转换为 Apache 的虚拟主机。

正如您可能记得在Passenger 的Nginx 安装过程中看到的那样,此过程包括将一段代码添加到Nginx 的配置文件nginx.conf。 默认情况下,除非您另有说明,否则可以在 /opt/nginx/conf/nginx.conf 下找到此文件。

键入以下命令以打开此配置文件以使用文本编辑器 nano 对其进行编辑:

nano /opt/nginx/conf/nginx.conf

第一步,找到 http { 节点,并在 passenger_rootpassenger_ruby 指令之后附加以下内容:

# Only for development purposes.
# For production environment, set it accordingly (i.e. production)
# Remove this line when you upload an actual application.
# For * TESTING * purposes only.
passenger_app_env development;

向下滚动文件并找到 server { ..。 注释掉默认位置,即:

..

#    location / {
#            root   html;
#            index  index.html index.htm;
#        }

..

并定义您的默认应用程序根:

root /var/www/my_app/public;
passenger_enabled on;

按 CTRL+X 并用 Y 确认保存并退出。

运行以下命令以使用新的应用程序配置重新加载 Nginx:

/etc/init.d/nginx restart

要检查 Nginx 的状态,您可以使用:

/etc/init.d/nginx status

为了测试您的应用程序(和我们的示例应用程序),您可以访问:

http://[Your droplet's IP addr]/tasks

# Listing tasks

# Title    Note 

# New Task

注意:想了解更多关于Nginx的知识,请参考如何在VPS上配置Nginx Web服务器

延伸阅读


防火墙


使用 IP 表设置防火墙

保护 SSH


如何在 Ubuntu 上使用 fail2ban 保护 SSH 如何在 CentOS 6 上使用 fail2ban 保护 SSH

创建警报


如何在 CentOS VPS 上发送电子邮件警报以进行系统监控

每天监控和观察服务器访问日志


如何安装和使用 Logwatch 日志分析器和报告器

提交人: [[“%3Ca|https]] ://twitter.com/ostezer [[“%3C/a|”>操作系统]] 泰泽