如何在 CentOS 6.5 上使用 Passenger 和 Nginx 部署 Rails 应用程序

金钱(警告)

状态: 被贬低

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

** 原因** : CentOS 6 已于 2020 年 11 月 30 日到期(EOL)并且不再收到安全补丁或更新。

** 参见相反** :本指南可能仍然有用作为参考,但可能不适用于其他 CentOS 版本. 如果可用,我们强烈建议使用为您使用的 CentOS 版本撰写的指南。

美元

介绍


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

通过 Ruby 编程语言和 Rails Web 应用程序开发框架来解决应用程序的难题后,当是时候与世界其他人分享您的应用程序时,您可能会对所有可用的选择和无限数量的可能的组合感到困惑。

在这篇DigitalOcean文章中,我们将向您展示 - 从开始到结束 - 如何使用最新的可用的CentOS操作系统(即在线发布)使用岩石坚实的Rails应用部署,以其稳定性而闻名。

** 注意: ** 在此步骤中,建议您查看并阅读提供的链接的内容,它们将帮助您提高性能,安全等。

词汇


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服务器。它能够非常好地服务静态文件(如图像,文本文件等),平衡连接,并处理某些剥削尝试。

Phusion 乘客应用服务器


Passenger今天已成为Ruby on Rails应用程序的推荐服务器,它是一个成熟的,功能丰富的产品,旨在满足必要的需求和应用部署领域,同时极大地简化设置和启动程序。

Passenger 非常受欢迎,在许多生产场景中被广泛使用,很容易接触并找到专家,并在网上解决您的问题。

我们将使用的开源版本具有 multi-process single-threaded 操作模式,其企业版本可以配置为单线或多线。

要了解更多关于旅客的信息,您可以访问其官方网站位于 https://www.phusionpassenger.com/

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


Nginx是一个非常高性能的网页服务器,它因其轻量、相对易于使用和易于扩展(通过插件/插件)而变得非常受欢迎。由于其架构,它能够处理大量的请求(几乎无限),这取决于您的应用程序或网站的负载,可能很难使用其他一些较旧的替代方案来解决。

** 请记住:** 处理连接在技术上意味着不放弃它们,并能够为它们提供服务 something. 你仍然需要你的应用程序和数据库正常运作,以便让 Nginx 服务客户 responses 不是错误消息。

由于其受欢迎性和成功,我们将部署我们的应用程序运行在 Nginx 后面,以获益于其强大的功能。

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

准备部署服务器


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

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

更新和准备操作系统


為了安裝 Ruby 和其他必要的應用程式(例如我們的伺服器),我們需要先準備最少發送的 CentOS 滴,並將其配備一些途中需要的開發工具。

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

1yum -y update
2
3# This command will update all the base applications
4# that come with CentOS by default. Which are mostly
5# reserved for use by the operating system.

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

1yum groupinstall -y 'development tools'
2
3# With more recent versions of CentOS, such as 6.5 in our case,
4# you can simply run:
5# yum groupinstall -y development
6# instead.
7
8# This bundle of applications contains various tools
9# Such as: gcc, make, automake, binutils, git etc.

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

1# Enable EPEL Repository
2sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
3
4# Update everything, once more.
5yum -y update

最后,要让 Passenger 与 Nginx 合作,我们将在接下来的部分安装,我们需要一个curl-devel库和纳米文本编辑器,对于 Rails,我们也需要一个sqlite-devel

要安装curl-devel和nano,请执行以下操作:

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

设置 Ruby 环境和铁路


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

我们将使用 Ruby Version Manager (RVM) 来下载和安装 Ruby 解释器(或 RVM 所称的rubies)。

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

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

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

1rvm reload
2rvm install 2.1.0

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

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

运行以下操作以使用 yum 下载和安装 nodejs:

1yum install -y nodejs

使用 RubyGems 的「」,執行以下命令來下載和安裝「rails」:

1gem install bundler rails

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


** 注意:** 如果您的 VPS 具有不到 1 GB 的 RAM,您需要执行以下简单的程序来准备一个 SWAP 磁盘空间以作为临时数据持有器(RAM 替代品)使用。

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

Phusion 乘客


Red Hat Linux 的默认包管理器 RPM (RPM Package Manager) 将包含在 .rpm 文件中的应用程序导航。不幸的是,在 Passenger 的情况下,它们相当过时,因此,我们将再次使用 RubyGem 来下载和安装 Passenger 的最新版本 - version 4

使用下面的命令,简单地下载和安装 Passenger:

1gem install passenger
2
3# This command will fetch Passenger v4.0(.35+) for you.

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

你应该看到一个类似于下面的输出:

1Phusion Passenger Standalone, the easiest way to deploy Ruby web apps.
2
3Available commands:
4
5  passenger start Start Phusion Passenger Standalone.
6
7..

名称: Nginx


通常情况下,要下载和安装 Nginx,你可以添加 EPEL 存储库并通过 yum 获取 Nginx. 但是,要让 Nginx 与 Passenger 合作,其源必须编译必要的模块。

运行以下操作以开始使用原生乘客模块编译 Nginx:

1passenger-install-nginx-module

运行命令后,按 Enter 并确认您的语言(语言)选择(即 Ruby,在我们的情况下)。

1Use <space> to select.
2If the menu doesn't display correctly, ensure that your terminal supports UTF-8.
3
4 ‣ ⬢  Ruby
5   ⬢  Python
6   ⬢  Node.js
7   ⬡  Meteor

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

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

然后按 Enter 继续。

现在,Nginx源将被下载,编译和安装在乘客支持中。

** 注意: ** 此操作可能需要一段时间 - 可能比你想要或期望的更长时间!

准备部署的应用程序


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

创建样本应用程序 / 上传您的源代码


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

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

 1# Create a sample Rails application
 2cd /var
 3mkdir www
 4cd www
 5rails new my_app
 6
 7# Enter the application directory
 8cd my_app
 9
10# Create a sample resource
11rails generate scaffold Task title:string note:text
12
13# Create a sample database
14RAILS_ENV=development rake db:migrate

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

 1# Enter the application directory
 2cd /var/www/my_app
 3
 4# Run a simple server
 5rails s
 6
 7# You should now be able to access it by
 8# visiting: http://[your droplet's IP]:3000/tasks
 9
10# In order to terminate the server process,
11# Press CTRL+C

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

创建 Nginx 管理脚本


在编译 Nginx 后,为了轻松控制它,我们需要创建一个简单的管理脚本。

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

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

复制并粘贴下面的内容:

 1#!/bin/sh
 2. /etc/rc.d/init.d/functions
 3. /etc/sysconfig/network
 4[ "$NETWORKING" = "no" ] && exit 0
 5
 6nginx="/opt/nginx/sbin/nginx"
 7prog=$(basename $nginx)
 8
 9NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"
10
11lockfile=/var/lock/subsys/nginx
12
13start() {
14    [ -x $nginx ] || exit 5
15    [ -f $NGINX_CONF_FILE ] || exit 6
16    echo -n $"Starting $prog: "
17    daemon $nginx -c $NGINX_CONF_FILE
18    retval=$?
19    echo
20    [ $retval -eq 0 ] && touch $lockfile
21    return $retval
22}
23
24stop() {
25    echo -n $"Stopping $prog: "
26    killproc $prog -QUIT
27    retval=$?
28    echo
29    [ $retval -eq 0 ] && rm -f $lockfile
30    return $retval
31}
32
33restart() {
34    configtest || return $?
35    stop
36    start
37}
38
39reload() {
40    configtest || return $?
41    echo -n $”Reloading $prog: ”
42    killproc $nginx -HUP
43    RETVAL=$?
44    echo
45}
46
47force_reload() {
48    restart
49}
50
51configtest() {
52    $nginx -t -c $NGINX_CONF_FILE
53}
54
55rh_status() {
56    status $prog
57}
58
59rh_status_q() {
60    rh_status >/dev/null 2>&1
61}
62
63case "$1" in
64start)
65rh_status_q && exit 0
66$1
67;;
68stop)
69rh_status_q || exit 0
70$1
71;;
72restart|configtest)
73$1
74;;
75reload)
76rh_status_q || exit 7
77$1
78;;
79force-reload)
80force_reload
81;;
82status)
83rh_status
84;;
85condrestart|try-restart)
86rh_status_q || exit 0
87;;
88*)
89echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
90exit 2
91esac

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

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

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

配置 Nginx


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

正如您在乘客的 Nginx 安装过程中所看到的,此过程包括将一个代码块添加到 Nginx 的配置文件 nginx.conf. 默认情况下,除非您另有说明,此文件可以在 /opt/nginx/conf/nginx.conf 下找到。

输入以下命令,打开此配置文件以使用文本编辑器 nano 编辑:

1nano /opt/nginx/conf/nginx.conf

作为第一步,找到http {节点,并在passenger_rootpassenger_ruby指令后右侧附加下列指令:

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

向下滚动,找到服务器 {..`. 评论默认位置,即:

1..
2
3#    location / {
4#            root html;
5#            index index.html index.htm;
6#        }
7
8..

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

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

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

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

1/etc/init.d/nginx restart

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

1/etc/init.d/nginx status

为了测试您的应用程序(以及我们的样本应用程序),您可以访问:

1http://[Your droplet's IP addr]/tasks
2
3# Listing tasks
4
5# Title Note	
6
7# New Task

** 注意:** 有关 Nginx 的更多信息,请参阅 如何在 VPS 上配置 Nginx Web Server

继续阅读


标签: 防火墙


使用 IP 表格设置防火墙

安全的SSH


How To Protect SSH with fail2ban on Ubuntu How To Protect SSH with fail2ban on CentOS 6

创建警报


如何在 CentOS VPS 上发送电子邮件警报用于系统监控

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


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

Submitted by: O.S. Tezer
Published At
Categories with 技术
comments powered by Disqus