前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >如何在CentOS 6.5上使用Unicorn和Nginx部署Rails应用程序

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

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

介绍

在部署基于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 的默认工具:

代码语言:txt
AI代码解释
复制
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.

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

代码语言:txt
AI代码解释
复制
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软件存储库以供使用。

代码语言:txt
AI代码解释
复制
# 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)。

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

代码语言:txt
AI代码解释
复制
yum install -y curl-devel nano sqlite-devel libyaml-devel

设置Ruby环境和Rails

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

代码语言:txt
AI代码解释
复制
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:

代码语言:txt
AI代码解释
复制
rvm reload
rvm install 2.1.0

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

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

代码语言:txt
AI代码解释
复制
yum install -y nodejs

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

代码语言:txt
AI代码解释
复制
gem install bundler rails

安装Nginx

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

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

代码语言:txt
AI代码解释
复制
yum install -y nginx

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

安装Unicorn

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

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

代码语言:txt
AI代码解释
复制
gem install unicorn

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

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

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

创建示例应用程序

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

执行以下命令以使Rails创建名为“my_app”的新应用程序:

代码语言:txt
AI代码解释
复制
# 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命令的简单的服务器:

代码语言:txt
AI代码解释
复制
# 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/目录中:

代码语言:txt
AI代码解释
复制
nano config/unicorn.rb

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

代码语言:txt
AI代码解释
复制
# 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-已设置为包括默认配置。

代码语言:txt
AI代码解释
复制
nano /etc/nginx/conf.d/default.conf

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

代码语言:txt
AI代码解释
复制
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并使用配置文件将其作为守护进程运行:

代码语言:txt
AI代码解释
复制
# 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:

代码语言:txt
AI代码解释
复制
service nginx restart

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

代码语言:txt
AI代码解释
复制
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 删除。

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
如何在Debian 8上使用RVM安装Ruby on Rails
Ruby on Rails是创建网站和Web应用程序的开发人员最受欢迎的应用程序框架之一。Ruby编程语言与Rails开发框架相结合,使应用程序开发变得简单。
好烟
2018/07/26
5.4K0
如何在CentOS 6.5上使用 Nginx+Passenger 部署Railes应用程序
对于某个计算机编程领域的新手来说,挑战永远不会结束。本文的主题是Rails,以及如何在线获取基于Ruby On Rail的 Web应用程序 - 这是最简单,最快捷的方式。
八十岁的背影
2018/08/13
5.2K0
如何部署Mina:入门教程
如果您正在寻找一种方法来帮助某些您每天执行的操作,正如简单的搜索显示的那样,可用的工具很多。如果您检查它们,会发现这些都声称可以使您的应用程序在线(即部署)更容易。但是,它们之间几乎没有区别 - 而且使用起来也很复杂。
心语花束
2018/08/10
4.7K0
如何在Ubuntu 14.04上使用Unicorn和Nginx部署Rails应用程序
当您准备部署Ruby on Rails应用程序时,需要考虑许多有效的设置。本教程将帮助您部署Ruby 在 Rails应用程序中的生产环境,使用PostgreSQL作为数据库,在Ubuntu 14.04上使用Unicorn和Nginx。
丰一川
2018/09/28
4.6K0
如何在CentOs 6.4 上使用uWSGI+Nginx部署Flask Web服务器
Armin Ronacher的Flask是过去几年中为Python创建的Web应用程序框架领域中发生过的最伟大的事情之一。
藕丝空间
2018/08/06
1.5K0
如何使用Capistrano自动部署:入门教程
制作基于Web的应用程序的关键领域之一是部署。如何部署,这项任务确实被视为一件苦差事,似乎对您的项目几乎没有任何直接或附加价值。然而,一个精心设计的部署过程肯定有助于减少开销,例如不会浪费时间在让产品上线。
何处惹尘埃
2018/08/13
2.4K0
Linux下Unicorn服务器配置
Unicorn 是什么? 1. 为 Rack 应用程序设计的 HTTP server 2. 是一个利用Unix的高级特性开发的 3. 为具备低延迟,高带宽的连接的客户服务
星哥玩云
2022/06/29
10.3K0
使用Unicorn和Nginx在Ubuntu 14.04上配置Ruby on Rails应用程序
Ruby on Rails 是一个流行的 Web 应用程序框架,允许开发人员创建动态 Web 应用程序。本指南介绍如何在 Ubuntu 14.04 上使用Unicorn和 nginx 在服务器上部署Rails应用程序。
LPD6375
2018/08/29
7.2K0
如何在Ubuntu 14.04上使用Puma和Nginx部署Rails应用程序
当您准备部署Ruby on Rails应用程序时,需要考虑许多有效的设置。本教程将帮助您部署Ruby on Rails应用程序的生产环境,使用PostgreSQL作为数据库,在Ubuntu 14.04上使用Puma和Nginx。
宇cccc
2018/09/26
5.7K0
CentOS下配置Ruby on Rails并部署Redmine
yum install flex autoconf zlib curl zlib-devel curl-devel bzip2  bzip2-devel ncurses-devel libjpeg-devel libpng-devel libtiff-devel freetype-devel pam-devel gcc+ gcc-c++ libxml2 libxml2-devel libxslt libxslt-devel
星哥玩云
2022/07/03
1.7K0
开发项目管理工具redmine 原
基于上面的多种特性,在项目管理工作中,如任务分配、任务跟踪、项目权限管理等等带来很大的便捷性,使得工作进度、质量更加可控。春雨在使用Redmine时集成了ldap,并以此对外部员工(toh、合作方)和内部员工做了区分,同时Redmine对用户分配了四种角色(超级管理员、管理人员、开发人员、报告人员),而且还可以配置用户组,如此一来对于项目权限管理更加便捷。更重要的一点是日常工作中所有工作内容的申请和交接都通过Redmine和email来操作,这样所有工作的开展都有据可依,也符合等保3的考核要求。
阿dai学长
2019/04/03
10.4K3
开发项目管理工具redmine
                                                                            原
win10下vagrant+centos7 rails虚拟开发机配置流程
此文写于2017.8.21 在写本文前,笔者已经尝试了多种其他的替代方法,例如wmware虚拟机安装kylin。然而发现总是还有各种问题。经大佬指点安装了virtualbox + vagrant。于是发现配置起来如此简单。接下来笔者将详细阐述。 (注:笔者自己的服务器上的配置是centos7.2 + ruby2.3.4 + mariadb + redis,自己的笔记本为win10,另外,很多网上的类似文章都写于很长时间以前,很多内容现在已经不适用,甚至很多关键的环节还不讲清楚,导致笔者配置初期踩了很多的
HansBug
2018/04/11
1.8K0
如何在Ubuntu上安装Ruby和Sinatra
如果选择几个词来定义Sinatra,那么肯定会是设计简洁,给人启发。这种项目构建的想法引领了很多项目的构建潮流——跨越不同的编程语言和平台的编程方案。
物花无语
2018/08/06
1.7K0
Rails 部署总结
学 Ruby 和 Rails 有一段时间了,后面准备也准备把站点换了。不过开始开发之前,我先把 Rails 部署的坑先踩了。之所以部署先行是因为之前 Django 部署把我坑惨了,导致之前写的 Django 代码还是 Github 静静地躺着。 忽悠妹子给我在腾讯云买了服务器后,马不停蹄的就开始了填坑之旅。这里我选择的系统是 Ubuntu 16.04 ,所以下面的命令以此为准。
BigNerdCoding
2018/03/20
7.1K4
Rails 部署总结
redmine3的安装和升级
http://www.redmine.org/projects/redmine/wiki/RedmineInstall#Requirements
py3study
2020/01/07
8830
Debian 9下安装Ruby on Rails与NGINX
Ruby on Rails是一个Web框架,允许Web设计人员和开发人员实现动态的功能齐全的Web应用程序。在生产中部署Rails应用程序时,开发人员可以从几个流行的应用程序服务器中进行选择,包括Puma,Unicorn和Passenger。本指南将使用Passenger,因为它可以方便地与NGINX集成。
Likenttt
2018/09/14
3.7K0
使用Capistrano,Nginx和Puma在Ubuntu 14.04上部署Rails应用程序
Rails是一个用Ruby编写的开源Web应用程序框架。Nginx是一种高性能HTTP服务器,反向代理和负载均衡器,以其并发性,稳定性,可伸缩性和低内存消耗而著称。与Nginx一样,Puma是另一个极其快速且并发的Web服务器,内存占用非常小,但是为Ruby Web应用程序构建。
尘埃
2018/08/09
5.4K0
如何在Ubuntu上使用Passenger安装Rails和nginx
Ruby on Rails为Web开发人员提供了一个快速创建各种Web应用程序的框架,而nginx是一个轻量级的高性能Web服务器软件。通过Phusion Passenger安装时,可以轻松配置这两个程序,以便在服务器上协同工作。
乌鸦
2018/07/26
3.8K0
在RHEL系统上通过源码安装GITLAB
  Gitlab有著名的一键安装包,点一下脚本自动会帮你装ruby、Redis、Postgresql、Gitlab好方便,而且还会帮你解决Sidekiq无限消耗资源定期重启。有这么多优点为毛还要从源码安装Gitlab。1.CE版本无法使用Mysql库来存储用户数据 2.能了解他的工作机理和细节呗。
海哥@开发
2022/04/04
6710
CentOS 7如何设置uWSGI和Nginx提供Python应用服务
在本指南中,我们将设置一个由uWSGI提供服务的简单WSGI应用程序。我们将使用Nginx Web服务器作为应用程序服务器的反向代理,以提供强大的连接处理。我们将在CentOS 7服务器上安装和配置这些组件,没有服务器的用户可以购买和使用腾讯云服务器或者直接使用腾讯云实验室CentOS服务器。
陈树丶
2018/08/06
1.1K0
相关推荐
如何在Debian 8上使用RVM安装Ruby on Rails
更多 >
领券
💥开发者 MCP广场重磅上线!
精选全网热门MCP server,让你的AI更好用 🚀
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档