在部署基于Rails的Web应用程序时,简单设计的应用程序服务器可以在几分钟内启动并运行。但是,如果您希望更好地控制服务器设置或想要尝试更灵活的新功能,那么使用分层的组件可以帮助您实现目标- 无论是面向未来的部署还是需要引入第三方元素,例如缓存服务器。
在这篇教程中,我们将介绍如何组装多层部署安装来托管基于Rails的Ruby Web应用程序。对于这种安排,我们将使用在Nginx后台运行的功能强大,灵活且非常成功的Unicorn应用服务器。虽然我们将在单个服务器上构建此结构以用于演示目的,但您可以轻松地使用水平和垂直的方式传播内容并扩展!
在部署Web应用程序时,通常涉及多个应用程序,分层设置并相互协作。这种真实的部署设置与使用单一开发服务器有很大不同,后者设计用于测试目的,因为由于缺乏功能和特性,它们无法在实际网站流量的负载下工作。
谈到功能,应该注意的是,有一些流行的服务器可供选择,每个服务器提供不同的功能:一些专注于简单性,一些专注于速度,以及一些可能配置全覆盖选项以满足复杂生产需求的一切。
在本文中,我们选择的应用服务器是Unicorn。Unicorn是一个卓越的应用服务器,它包含你的Rails应用程序来处理传入的请求,最好是在它们被前端HTTP服务器(如Nginx)过滤和发送之后。
另一方面,Nginx HTTP服务器从头开始设计,充当多功能,面向前方的Web服务器。它能够非常好地提供静态文件(例如图像,文本文件等),平衡连接,并处理某些漏洞尝试。它充当所有请求的第一个入口点,并将它们传递给Unicorn,以便Web应用程序处理并返回响应。
Unicorn是一个非常成熟的基于Ruby/Rack的Web应用程序的Web应用程序服务器。它功能齐全,但它在设计上试图做任何事情而否认它。Unicorn的负责人正在做Web应用服务器需要完成的工作并委派其他职责。
Unicorn的主进程根据您的要求生成workers以满足请求。此过程还监视workers,以防止记忆和处理相关的错误问题。这对系统管理员来说意味着,如果例如完成任务需要太多时间或发生内存问题,它将终止进程。
如上所述,Unicorn委派任务的一个领域是使用操作系统进行负载平衡。这允许请求不会堆积繁忙的workers。
Nginx是一个性能非常高的Web服务器反向代理。它因其重量轻,易于使用和易于扩展(附加/插件)而受到欢迎。因为其架构,它能够处理大量请求(几乎无限制),这取决于您的应用程序或网站负载。
在本节中,我们将执行以下步骤:
运行以下命令以更新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 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
由于我们启用了EPEL存储库,因此可以使用yum获取Nginx。
运行以下命令以使用yum命令下载并安装Nginx :
yum install -y nginx
注意:我们将在以下部分中配置此工具。
有几种方法可以轻松下载Unicorn。由于它是与应用程序相关的依赖项,因此最合乎逻辑的方法是使用RubyGems。
运行以下命令以使用gem命令下载和安装Unicorn :
gem install unicorn
注意:我们将在下一节中介绍如何使用此工具。
注意:在本节中,我们将使用一个非常简单的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.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如何与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 删除。
扫码关注腾讯云开发者
领取腾讯云代金券
Copyright © 2013 - 2025 Tencent Cloud. All Rights Reserved. 腾讯云 版权所有
深圳市腾讯计算机系统有限公司 ICP备案/许可证号:粤B2-20090059 深公网安备号 44030502008569
腾讯云计算(北京)有限责任公司 京ICP证150476号 | 京ICP备11018762号 | 京公网安备号11010802020287
Copyright © 2013 - 2025 Tencent Cloud.
All Rights Reserved. 腾讯云 版权所有