如何部署Rails应用在CentOS 6.5使用Passenger Nginx

介绍

挑战从来没有真正结束,特别是如果你是新来的某一领域的计算机编程。在这种情况下,我们的主题是Rails,以及如何在线获取基于Ruby On Rails的Web应用程序 - 这是最简单和最快捷的方式。 在解决了谜题,开始使用Ruby编程语言和Rails Web应用程序开发框架开始处理应用程序之后,当需要与世界其他地方共享应用程序时,可能会混淆所有可用的选择,存在的可能组合的无限量。 在这篇DigitalOcean文章中,我们将向您展示 - 从头到尾,如何使用最新的CentOS操作系统实现稳定的Rails应用程序部署(即在线发布)。这将伴随Phusion Passenger应用服务器,以其简单性和出色功能而闻名,加上在前面运行的Nginx HTTP服务器来处理和管理连接。 注:在此穿行,建议您检查并阅读中提供的链接的内容。他们将帮助您提高性能,安全性等。

词汇表

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

  1. Phusion Passenger应用服务器
  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服务器。它能够非常好地提供静态文件(例如图像,文本文件等),平衡连接,并处理某些利用尝试。它充当所有请求的第一个入口点,并将它们传递给Web应用程序的Passenger以处理和返回响应。

Phusion Passenger应用服务器

今天旅客已成为Ruby on Rails应用 推荐的服务器。它是一个成熟的,功能丰富的产品,旨在涵盖必要的需求和应用程序部署的领域,同时大大简化了设置和开始的程序。它通过与Nginx(以及Apache)的直接集成,消除了传统的中间人服务器设置架构。它也称为mod_rails。 Passenger非常受欢迎,并在许多生产场景中广泛使用。这是很容易可能的联系和找到专家,以及有您的问题在线处理。 开源版本,我们将使用,有一个 多进程 单线程操作模式。它的企业版可以配置为单线程或多线程。 要了解更多关于客运,您可以参观位于官方网站 https://www.phusionpassenger.com/

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

Nginx的是一个非常高的高性能 Web服务器 /( 反向)-proxy。 它已经达到其受欢迎程度是由于重量轻,相对容易使用,并且易于扩展(与附加/插件)。 由于它的结构,它能够处理 大量的哪些请求(几乎不受限制)的-这取决于你的应用程序或网站负载-可能是真的很难使用一些其他老的替代品来解决。 请记住:“处理”连接技术上意味着 不会放弃他们,并能与 一些为他们服务。 你仍然需要你的应用程序和数据库运作良好,才能有Nginx的为客户服务 的反应是不错误消息。 由于其流行和成功,我们将部署我们的应用程序运行在Nginx后面,从其强大的功能中受益。 要了解更多关于Nginx的,你可以参观位于官方网站 nginx.com

准备部署服务器

在本节中,我们将执行以下步骤来获取可用于服务应用程序的摇滚服务器。
  • 更新操作系统
  • 获取部署所需的基本工具
  • 安装Ruby,Rails和库
  • 安装应用程序(即Passenger)和HTTP服务器(Nginx)

更新和准备操作系统

为了安装Ruby和其他必要的应用程序(例如我们的服务器),我们需要首先准备最小运输的CentOSDroplet,并装备一些我们将需要的开发工具。 运行以下命令以更新基于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存储库中找到。 为了简化事情,而不是对付手动安装它们,我们将增加对 YUM和其他包管理器的EPEL软件仓库使用。
# 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库和纳米文本编辑器。 此外Rails的,我们将需要 sqlite-devel 。 为了安装 curl-devel和纳米,运行以下命令:
yum install -y curl-devel nano sqlite-devel libyaml-devel

设置Ruby环境和Rails

注:本部分我们专门文章内容摘要 如何安装Ruby 2.1.0在CentOS 6.5 。 我们将使用Ruby版本管理器(RVM)下载并安装一个Ruby解释器(或者“rubies”,由RVM引用)。 运行以下两个命令来安装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小于1 GB的RAM,你需要执行下面的简单程序准备了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 Passenger

Red Hat Linux的默认包管理器RPM(RPM包管理器)的船舶应用包含在 .rpm文件。 不幸的是,在Passenger的情况下,他们很陈旧。 因此,我们将使用RubyGem再次下载和安装客运的最新版本- 第4版 。 使用以下命令只需下载并安装Passenger:
gem install passenger

# This command will fetch Passenger v4.0(.35+) for you.
为了测试Passenger被下载并正确设置,尝试运行 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带有一个方便的工具,使过程像执行单个命令一样简单。 运行以下命令,开始使用本地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源将被下载,编译和安装与Passenger支持。 注意:这个动作可能需要一段时间-很可能超过一想还是想到!

准备应用程序以进行部署

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

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

让我们开始在我们的主目录中创建一个非常基本的Rails应用程序,以便与Passenger和Nginx一起服务。 执行以下命令来获得Rails创建一个名为里面 my_app应用新的应用程序 /var/www目录:
# 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 Log Analyzer和Reporter
:提交 OS Tezer
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏