首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序

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

原创
作者头像
水门
发布2018-08-07 16:24:34
4.1K0
发布2018-08-07 16:24:34
举报

介绍

在部署基于Rails的Web应用程序时,简单设计的应用程序服务器可以在几分钟内启动并运行。但是,如果您希望更好地控制服务器设置或想要尝试更灵活的新功能,那么使用分层的组件可以帮助您实现目标- 无论是面向未来的部署还是需要引入第三方元素,例如缓存服务器。

在这篇教程中,我们将介绍如何组装多层部署安装来托管基于Rails的Ruby Web应用程序。对于这种安排,我们将使用在Nginx后台运行的功能强大,灵活且非常成功的Unicorn应用服务器。虽然我们将在单个服务器上构建此结构以用于演示目的,但您可以轻松地使用水平和垂直的方式传播内容并扩展!

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

在部署Web应用程序时,通常涉及多个应用程序,分层设置并相互协作。这种真实的部署设置与使用单一开发服务器有很大不同,后者设计用于测试目的,因为由于缺乏功能和特性,它们无法在实际网站流量的负载下工作。

谈到功能,应该注意的是,有一些流行的服务器可供选择,每个服务器提供不同的功能:一些专注于简单性,一些专注于速度,以及一些可能配置全覆盖选项以满足复杂生产需求的一切。

在本文中,我们选择的应用服务器是Unicorn。Unicorn是一个卓越的应用服务器,它包含你的Rails应用程序来处理传入的请求,最好是在它们被前端HTTP服务器(如Nginx)过滤和发送之后。

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

Unicorn 应用程序服务器(Application Server)

Unicorn是一个非常成熟的基于Ruby/Rack的Web应用程序的Web应用程序服务器。它功能齐全,但它在设计上试图做任何事情而否认它。Unicorn的负责人正在做Web应用服务器需要完成的工作并委派其他职责。

Unicorn的主进程根据您的要求生成workers以满足请求。此过程还监视workers,以防止记忆和处理相关的错误问题。这对系统管理员来说意味着,如果例如完成任务需要太多时间或发生内存问题,它将终止进程。

如上所述,Unicorn委派任务的一个领域是使用操作系统进行负载平衡。这允许请求不会堆积繁忙的workers。

Nginx HTTP Server作为前端反向代理运行

Nginx是一个性能非常高的Web服务器反向代理。它因其重量轻,易于使用和易于扩展(附加/插件)而受到欢迎。因为其架构,它能够处理大量请求(几乎无限制),这取决于您的应用程序或网站负载。

准备部署服务器

在本节中,我们将执行以下步骤:

  • 更新操作系统
  • 获取必要的基本部署工具
  • 安装Ruby,Rails和库
  • 安装应用程序(即Unicorn)和HTTP服务器(Nginx)

更新和准备操作系统

运行以下命令以更新CentOS 的默认工具:

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

最后,我们需要获得curl-devel以及本教程中的其他几个工具和库(例如Rails需要sqlite-devel)。

要安装它们,请运行以下命令:

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

设置Ruby环境和Rails

我们将使用Ruby Version Manager(RVM)下载并安装Ruby解释器。运行以下两个命令来安装RVM并为Ruby创建系统环境:

gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
\curl -sSL https://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

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

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

yum install -y nodejs

执行以下命令以使用gem以下命令下载和安装rails

gem install bundler rails

安装Nginx

由于我们启用了EPEL存储库,因此可以使用yum获取Nginx。

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

yum install -y nginx

注意:我们将在以下部分中配置此工具。

安装Unicorn

有几种方法可以轻松下载Unicorn。由于它是与应用程序相关的依赖项,因此最合乎逻辑的方法是使用RubyGems。

运行以下命令以使用gem命令下载和安装Unicorn :

gem install unicorn

注意:我们将在下一节中介绍如何使用此工具。

准备Rails应用程序以进行部署

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

创建示例应用程序

让我们首先在我们的主目录中创建一个非常基本的Rails应用程序,以便与Unicorn一起服务。

执行以下命令以使Rails创建名为“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_ENV=production  rake db:migrate

# Create a directory to hold the PID files
mkdir pids    

要测试您的应用程序是否设置正确并且一切正常,请输入app目录并运行一个带有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)安全地传输和管理远程文件。同样,您可以使用Git和Github等中央存储库来下载和设置代码。查看如何使用SFTP传输文件详情请访问腾讯云+社区

配置服务器

Unicorn

Unicorn可以通过多种方式配置。在本教程中,我们将重点介绍关键元素,从头开始创建一个文件,Unicorn将在启动应用程序服务器守护进程时使用该文件。

打开一个空白unicorn.rb文档,该文档将保存在config/目录中:

nano config/unicorn.rb

写入下面的代码块,并根据需要进行修改:

# Set the working application directory
# working_directory "/path/to/your/app"
working_directory "/var/www/my_app"

# Unicorn PID file location
# pid "/path/to/pids/unicorn.pid"
pid "/var/www/my_app/pids/unicorn.pid"

# Path to logs
# stderr_path "/path/to/log/unicorn.log"
# stdout_path "/path/to/log/unicorn.log"
stderr_path "/var/www/my_app/log/unicorn.log"
stdout_path "/var/www/my_app/log/unicorn.log"

# Unicorn socket
listen "/tmp/unicorn.[app name].sock"
listen "/tmp/unicorn.myapp.sock"

# Number of processes
# worker_processes 4
worker_processes 2

# Time-out
timeout 30

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

注意:要使用Unicorn简单地测试应用程序,您可以在应用程序目录中运行unicorn_rails

Nginx

接下来,我们需要告诉Nginx如何与Unicorn交流。为此,编辑默认配置文件即可:default.conf并保留所提供的nginx.conf-已设置为包括默认配置。

nano /etc/nginx/conf.d/default.conf

将文件内容替换为下面的文件内容,再次修改必要的地方以满足您的需要:

upstream app {
    # Path to Unicorn SOCK file, as defined previously
    server unix:/tmp/unicorn.myapp.sock fail_timeout=0;
}

server {


    listen 80;
    server_name localhost;

    # Application root, as defined previously
    root /root/my_app/public;

    try_files $uri/index.html $uri @app;

    location @app {
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host $http_host;
        proxy_redirect off;
        proxy_pass http://app;
    }

    error_page 500 502 503 504 /500.html;
    client_max_body_size 4G;
    keepalive_timeout 10;
}  

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

管理服务器

完成两台服务器的配置后,我们就可以尝试上线。

让我们启动Unicorn并使用配置文件将其作为守护进程运行:

# Make sure that you are inside the application directory
# i.e. /my_app
unicorn_rails -c config/unicorn.rb -D

# You can set the environment by chaining -E flag
# i.e. unicorn_rails .. .. .. -E [env. name]

接下来,我们准备重新加载并重新启动Nginx:

service nginx restart

您现在可以通过转到服务器的IP地址(或与之关联的域名)来检查调配。

http://[Your droplet's IP addr]/tasks
# Listing tasks
# Title    Note 
# New Task

结论

本文主要介绍CentOS使用Unicorn和Nginx部署Rails应用程序,更多关于Rails的应用程序,欢迎访问腾讯云+社区学习更多知识。


参考文献:《How To Deploy Rails Apps Using Unicorn And Nginx on CentOS 6.5》

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

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

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 介绍
  • Web应用程序部署,服务器及其角色
    • Unicorn 应用程序服务器(Application Server)
      • Nginx HTTP Server作为前端反向代理运行
      • 准备部署服务器
        • 更新和准备操作系统
          • 设置Ruby环境和Rails
            • 安装Nginx
              • 安装Unicorn
              • 准备Rails应用程序以进行部署
                • 创建示例应用程序
                  • 上传源代码
                  • 配置服务器
                    • Unicorn
                      • Nginx
                        • 管理服务器
                        • 结论
                        领券
                        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档