介绍
设计简单的应用程序服务器可以在您部署基于Rails的Web应用程序时在几分钟内启动并运行。但是,如果您希望对服务器设置有更多的控制,或者尝试更灵活的新功能,使用一组分层组件可以帮助您实现您的目标 - 无论是未来防御部署还是需要引入第三方元素,如缓存服务器。 在这篇DigitalOcean文章中,我们将看一下组装一个多层部署安装来托管基于Rails的Ruby Web应用程序。对于这样的安排,我们将使用以往那么强大,灵活且非常成功的 Unicorn背后Nginx的应用程序服务器上运行。虽然我们将在单个服务器上构建此结构以进行演示,但您可以轻松地使用多个Droplet来轻松扩展和横向扩展 - 无论是水平还是垂直!词汇表
Web应用程序部署,服务器及其角色
- Unicorn应用服务器
- Nginx HTTP服务器作为前端反向代理运行
2.准备部署服务器
- 更新和准备操作系统
- 设置Ruby环境和Rails
- 安装Nginx
- 安装Unicorn
3.准备用于部署的Rails应用程序
- 创建示例应用程序
- 上传您的源代码
4.配置服务器
- Unicorn
- Nginx
- 管理服务器
5.进一步阅读
Web应用程序部署,服务器及其角色
当涉及到部署Web应用程序时,通常有大量的应用程序涉及,设置在层和相互工作。这种现实的部署设置与使用单一的开发服务器非常不同,该服务器被设计为仅用于测试目的,因为它们由于缺乏功能和特征而不能在实际网站流量的负载下工作。 谈到功能,应该注意的是,有几个流行的服务器可供选择,每个提供不同的功能:一些专注于简单,一些速度,一些一些可能性配置选项,以适应复杂的生产需求。 在本文中,我们选择的应用程序服务器是Unicorn。 Unicorn是一个非凡的应用服务器,包含您的Rails应用程序处理传入的请求,最好是由前端HTTP服务器(如Nginx)过滤和发送后。 另一方面,Nginx HTTP服务器是从根本上设计的,作为一个多用途,面向前面的Web服务器。它能够非常好地提供静态文件(例如图像,文本文件等),平衡连接,并处理某些漏洞尝试。它作为所有请求的第一个入口点,并将它们传递给Unicorn以便Web应用程序处理和返回响应。 注意:要了解不同Ruby Web的应用程序服务器和理解“货架”是,看看我们的文章 (机架式)网络服务器的Ruby Web应用程序的比较 。Unicorn应用服务器
Unicorn是一个非常成熟的基于Ruby / Rack的Web应用程序的Web应用程序服务器。它是完全功能,但它否认设计试图做的一切。 Unicorn的负责人正在做一些需要由Web应用程序服务器完成的工作,并委派其他职责。 Unicorn的 主进程生成 的工人 ,按您的要求,服务要求。这个过程还监视工作者,以防止记忆和进程相关的错误问题。这对系统管理员意味着它会杀死一个进程,例如,它需要太多的时间来完成任务或内存问题发生。 如上所述,Unicorn委派任务的一个区域是使用操作系统进行负载平衡。这使得请求 不要堆放对忙碌的工人产生了。Nginx HTTP服务器作为前端反向代理运行
Nginx是一个非常高性能的Web服务器/(反向)-proxy。它已经达到了它的普及,由于重量轻,相对容易工作和易于扩展(与附加/插件)。由于它的结构,它能够处理 大量的哪些请求(几乎不受限制)的-这取决于你的应用程序或网站负载-可能是真的很难用一些其他的,旧的替代品来解决。 请记住:“处理”连接技术上意味着 不会放弃他们,并能与 一些为他们服务。 你仍然需要你的应用程序和数据库运作良好,才能有Nginx的为客户服务 的反应是不错误消息。 要了解更多关于Nginx的,你可以参观位于官方网站 nginx.com 。准备部署服务器
在本节中,我们将执行以下步骤:- 更新操作系统
- 获取部署所需的基本工具
- 安装Ruby,Rails和库
- 安装应用程序(即Unicorn)和HTTP服务器(Nginx)
更新和准备操作系统
为了安装Ruby和其他必要的应用程序(例如我们的服务器),我们需要首先准备最低限度运输的CentOSDroplet,并为其配备一些所需的开发工具。 运行以下命令更新CentOS VPS的默认工具: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存储库中找到。 为了简化事情,而不是对付手动安装它们,我们将添加EPEL软件仓库为
YUM软件包管理器使用。
# 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 2.1.0在CentOS 6.5 。 我们将使用Ruby版本管理器(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
由于滑轨首先需要一个JavaScript解释工作,我们还需要建立
Node.js
。为此,我们将使用默认的系统包管理器YUM。 运行以下命令以下载和安装
nodejs
使用
yum
:
yum install -y nodejs
执行以下命令下载和安装
rails
使用
gem
:
gem install bundler rails
安装Nginx
因为我们已经启用了EPEL存储库,所以可以使用yum获取Nginx。 运行以下使用它来下载并安装Nginx的yum
:
yum install -y nginx
注意:我们将配置在下面的章节此工具。
安装Unicorn
有几种方法可以轻松下载Unicorn。因为它是一个与应用程序相关的依赖,所以最合乎逻辑的方法是使用RubyGems。 运行以下命令以下载和安装使用Unicorngem
:
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
要测试您的应用程序的设置是否正确,一切工作正常,进入应用程序目录,然后运行一个简单的服务器
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工作,请查看文章: 如何使用SFTP 。
- 要了解FileZilla中,请查看文章的主题: 如何使用FileZilla中 。
配置服务器
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确认保存并退出。
注意:要了解更多关于Nginx的,请参阅
如何在VPS配置的Nginx Web服务器 。
管理服务器
完成两台服务器的配置后,就可以上线了! 让我们启动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
就这样!现在,您可以通过转到您的Droplet的IP地址(或与其关联的域名)来检查您的部署。
http://[Your droplet's IP addr]/tasks
# Listing tasks
# Title Note
# New Task
深入阅读
防火墙:
使用IP表设置防火墙保护SSH:
如何在Ubuntu上使用fail2ban保护SSH 如何在CentOS 6上使用fail2ban保护SSH创建警报:
如何在CentOS VPS上发送电子邮件警报以进行系统监控监视和监视服务器访问日志每日:
如何安装和使用Logwatch Log Analyzer和Reporter优化Unicorn工人:
如何优化Unicorn工人在Ruby on Rails应用程序
:提交
OS Tezer