介绍
Sinatra是一个简洁的框架,不喜欢炫耀。 它完成了工作,没有强制开发人员的任何东西。 当谈到采取你的应用程序,开发使用这个美好的小工具,同样的逻辑适用,你欢迎与多个选择。 每个工作几乎相同的方式:得到这份工作没有不必要的复杂性做了。
在这种DigitalOcean文章,下面我们第一次的Ruby 2.1和Sinatra在Ubuntu 13教程中,我们将学习几种不同的方法把你的Sinatra应用了其隐藏的盒子,并与世界[Ubuntu的]分享使用不同的(和有趣)技术和方法。
词汇表
应用程序部署
2.应用服务器
- 机架中间件
- Phusion Passenger应用服务器
- Unicorn应用服务器
HTTP / WWW服务器
- Apache HTTP服务器
- Nginx HTTP服务器作为前端反向代理运行
4.安装
- Apache和Passenger组合
- Nginx和Unicorn组合
注:本文所举的例子建立在我们的第一个辛纳屈和Ruby2.1.0在Ubuntu 13文章约定。 如果你想了解更多关于如何开始使用框架或如何使用Ruby 2.1.0和Sinatra准备操作系统,可以考虑先检查一下,然后再继续阅读这篇文章。
应用程序部署
部署应用程序(不管它是网站,API还是服务器)通常意味着从头开始(或从时间拍摄的快照)设置系统,通过更新一切,准备下载依赖关系,设置文件结构其次为最后上传你的代码或使用源代码控制管理器(SCM)如Git的下载它的权限。
遵循Sinatra的设计激励,我们将努力保持简单和可能,并尝试,测试和易于使用的方法为我们的部署示例在这里。 我们将与声誉良好,值得信赖的工具合作,处理工作,了解他们的差异。
应用程序服务器
术语“应用服务器”适用于(通常)包含另一应用(例如,您的web应用)并遵循某些规范和接口(即,公共语言)的应用(即服务器),允许所包含的应用与外部世界。
这些工具,再次,通常着眼于孤独,不处理业务逻辑 (执行过程)其他HTTP / WWW操作,如发送或接收静态文件的资产,处理多个客户端,或长期连接百家争鸣-尽管,由于许多现成的库,还有这样的应用服务器可用。
在大多数设置中,一个或多个应用程序服务器(例如Passenger,Unicorn,Puma,Thin等)放置在适当的HTTP / WWW服务器(例如Nginx,Apache等)后面,负责处理和处理所有传入连接首先,在将其传递到下一级。 这允许对资产(例如,javascript文件,图像等)的服务非常有效,同时充分利用这两个应用程序的能力,并保持客户端在线(即不丢失连接)和在应用程序层内处理请求。
注意:要了解不同Ruby Web的应用程序服务器和了解什么是机架 ,看看我们的文章(机架式)网络服务器的Ruby Web应用程序的比较 。
机架中间件
Rack 中间件 ,实现机架规格 ,工作原理是将传入的HTTP请求到不同的流水线阶段,处理它们的碎片,直到它发回来自Web应用程序(控制器)来响应。 它有两个不同的组件, 处理程序和适配器 ,用于分别Web服务器和应用程序(框架)进行通信。
在问候基于Ruby框架,Web应用服务器做他们通过实施机架规格/接口,通过连接到您的应用程序的工作config.ru
文件,调用(和进口),你作为一个对象的应用程序。
Phusion Passenger应用服务器
Passenger是一个成熟,功能丰富的产品,旨在满足必要的需求和应用程序部署的领域,同时大大简化了设置和开始的程序。 它通过与Nginx的(和Apache)直接集成消除了传统的中间商架构反向代理。
这种非常流行的工具可以在许多生产场景中广泛使用。 Passenger的开源版本(这是我们将要使用的)具有多进程单线程操作模式。 它的企业版本可以配置为单线程或多线程工作,具体取决于您的需要。
要了解更多关于客运,您可以参观位于官方网站https://www.phusionpassenger.com/ 。
Unicorn应用服务器
Unicorn是一个非常成熟的基于Ruby / Rack的Web应用程序的Web应用程序服务器。 它是全功能; 然而,它拒绝通过设计尝试做一切:Unicorn的主体正在做什么需要由一个Web应用程序服务器完成,并委派其余的职责(例如操作系统)。
Unicorn的主进程根据您的需求生成工作者,以满足请求。 这个过程还监视工作者,以防止记忆和进程相关的错误问题。 这对系统管理员意味着,如果(例如)它需要太多的时间来完成任务或内存问题发生,它会杀死进程。
如上所述,Unicorn委派任务的一个区域是使用操作系统进行负载平衡。 这使得请求不要堆放对忙碌的工人产生了。
HTTP / WWW服务器
Apache HTTP服务器
Apache是一个HTTP服务器,在这一点上不需要任何介绍。 它是世界上最受欢迎的HTTP服务器,它是一个非常成熟,功能丰富和高度可配置的产品,运行和工作非常好。 在本文中,我们将使用和使用的前端服务器之一是Apache,我们将看到它如何与Phusion Passenger应用程序服务器集成。
Nginx HTTP服务器作为前端反向代理运行
Nginx从根本上设计,充当多用途HTTP服务器。 它能够非常好地提供静态文件(例如图像,文本文件等),平衡连接和处理某些漏洞尝试。 它充当所有请求的第一个入口点,并将它们传递给Web应用程序的Passenger以处理和返回响应。
这是一个非常高的高性能Web服务器 /(反向)-proxy是相对易于使用和易于扩展(与插件和插件)。 由于它的结构,Nginx的是能够处理大量的哪些请求(几乎不受限制)的-这取决于你的应用程序或网站负载-可能是真的很难用一些其他的,旧的替代品来解决。
请记住:“处理”连接技术上意味着不会放弃他们,并能与一些为他们服务。 你仍然需要你的应用程序[server]和数据库运行良好,以使Nginx服务客户端的响应,而不是错误消息。
要了解更多关于Nginx的,你可以参观位于官方网站nginx.com 。
安装
在决定要使用哪个服务器组合后,下一步包括实际安装并准备好您希望应用程序运行的Droplet。
Apache和Passenger组合
注意:在安装Apache和客运,确保禁用(或删除)Nginx的,如果你安装了它; 或将其配置为不阻止Apache的方式(即端口/套接字冲突)。
注意:如果你的Droplet小于1 GB的RAM,你需要为旅客进行以下简单的程序准备SWAP磁盘空间作为临时数据持有人(即RAM的替代品)。 由于DigitalOcean虚拟服务器配有快速SSD磁盘,因此在执行服务器应用程序安装任务时并不会构成问题。
# Create a 1024 MB SWAP space
# The process should complete within less than a minute
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap
我们将开始获得Apache和Passenger组合,首先使用Passenger需要的工具准备系统。
这些工具包括以下内容:
具有SSL支持的curl开发标头
Apache 2
Apache 2开发标头
Apache便携式运行时(APR)开发标头
Apache便携式运行时实用程序(APU)开发标头
让我们一个接一个,按照官方Passenger文件的建议方式:
# Install cURL development headers with SSL support:
apt-get install libcurl4-openssl-dev
# Apache 2:
apt-get install apache2-mpm-worker
# Apache 2 development headers:
apt-get install apache2-threaded-dev
# And finally, Apache PRU (APU) development headers:
apt-get install libapr1-dev
接下来,让我们下载并使用RubyGems的'安装Passengergem
:
gem install passenger
# This method of installing Passenger will use
# the available and activated Ruby interpreter.
# However, the installation will be available for
# all Ruby versions' use.
一旦我们准备好所有必要的元素,我们就可以获得允许Apache和Passenger联合和协同工作的粘合层(即模块)。
通过运行以下命令开始安装过程:
passenger-install-apache2-module
# Here's what you can expect from the installation process:
# 1. The Apache 2 module will be installed for you.
# 2. You'll learn how to configure Apache.
# 3. You'll learn how to deploy a Ruby on Rails application.
# ..
按Enter键继续。
现在安装程序会要求您选择使用哪种编程语言。 使用箭头键向下滚动并使用空格键选择适合您使用的选项。 由于我们的目标是部署Sinatra,我们的选择将仅覆盖Ruby。
Which languages are you interested in?
Use <space> to select.
If the menu doesn't display correctly, ensure that your terminal supports UTF-8.
‣ ⬢ Ruby
⬡ Python
⬡ Node.js
⬡ Meteor
一旦你做出选择,按enter键前进到下一步。
现在安装程序将开始编译Apache模块。
注:该位可能需要一段时间-通常是两三分钟。
Nginx和Unicorn组合
注:UnicornNginx的安装之前,请务必关闭(或删除)的Apache,或者将其配置为不阻止Nginx的(即端口/插座碰撞)。
注:如果您使用的系统资源约束(RAM的数量如您有可用),你可能想选择这样的组合来部署应用程序。
Nginx和Unicorn一起为Web应用程序部署提供了一个很好的组合。 Unicorn,正如我们前面所讨论的是,在智能方面的工作,使所有可用的系统工具用户处理工作一个惊人的服务器-它的确很好!
我们将首先获取Nginx来启动安装过程。 默认系统包管理aptitude
(或apt-get
)就能下载和安装我们的Nginx的。
运行以下命令以下载和安装使用Nginx的aptitude
:
aptitude install nginx
一旦我们准备好Nginx,下一步就是获得Unicorn的Web应用程序服务器,这是RubyGems软件包管理器简化的。
运行以下命令以下载和安装使用Unicorngem
:
gem install unicorn
组态
在本节中,我们将看到如何既服务器的组合配置来上网我们的应用程序。 您应该记住,尽管做了市场努力,您将能够部署任何数量的Web应用程序,只要您正确配置它们并有足够的系统资源来支持它们。
注意:请记住,你应该从上面的Web应用程序中选择一个或最其它/有继续(和应用)以下设置之前HTTP服务器的组合。
Apache和Passenger组合
在完成安装Apache,Passenger和Passenger的Apache模块后,您将看到一条标题为“Almost there”的消息!
请编辑您的Apache配置文件并添加以下行:
Passenger的LoadModule 模块/usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37/buildout/apache2/mod passenger.so
PassengerRoot /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby
重新启动Apache后,您就可以部署任意数量的Web
应用程序在Apache上,用最少的配置!
所以,建议和建议,让我们添加配置块到我们的Apache配置文件。
运行以下命令以使用nano文本编辑器编辑Apache配置文件:
nano /etc/apache2/apache2.conf
将下面的文本块添加到您认为合适的位置,而不会影响其他配置:
LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
<IfModule mod_passenger.c>
PassengerRoot /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37
PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby
</IfModule>
按CTRL + X并用Y确认保存并退出。
注:以上配置必须保持原样。 其参数的方式使用相关的Ruby版本(定义2.1.0
在相关位置(第一屈教程中安装) /usr/local/rvm/gems/ruby-2.1.0/..
)。
接下来,我们需要定义一个应用程序 ,安装程序提示:
部署Web应用程序:一个示例
假设您在/某处有一个Web应用程序。 向您的虚拟主机添加虚拟主机
Apache配置文件并将其DocumentRoot设置为/ somewhere / public:
服务器名www.yourhost.com
#!!! 确保将DocumentRoot指向“public”!
DocumentRoot / somewhere / public
#这放宽了Apache安全设置。
AllowOverride全部
#MultiViews必须关闭。
选项-MultiViews
你可以在任何你喜欢的地方部署你的; 然而,什么可以被认为是一个好的例子是使用:
用户的子目录,设置为部署,或;
使用通用
/var/www
的位置,正如我们在过去所做的那样。
注意:对于配置的这一步,我们将使用从以前的Sinatra /Ruby2.1.0的教程示例应用程序。
要让Apache知道我们的应用程序并让Passenger运行它,我们需要定义一个虚拟主机。 为此,我们将创建一个内部文件/etc/apache2/sites-available
目录。
让我们创建一个名为空的配置文件my_app
采用纳米:
注意:您认为合适,以符合您的应用程序设置,您可以命名该文件。
nano /etc/apache2/sites-available/my_app.conf
将下面的内容放在下面,修改它们以适合您的应用程序部署目录:
<VirtualHost *:80>
# ServerName [!! Your domain OR droplet's IP]
ServerName 162.243.74.190
# !!! Be sure to point DocumentRoot to 'public'!
# DocumentRoot [root to your app./public]
DocumentRoot /var/www/my_app/public
# Directory [root to your app./public]
<Directory /var/www/my_app/public>
# This relaxes Apache security settings.
AllowOverride all
# MultiViews must be turned off.
Options -MultiViews
</Directory>
</VirtualHost>
按CTRL + X并用Y确认保存并退出。
现在我们可以将新的网站配置添加到Apache:
# Usage sudo a2ensite [configuration name without .conf extension]
sudo a2ensite my_app
并重新加载:
service apache2 reload
service apache2 restart
您的网络应用程序现在应该是活的和在线的。 访问您的Droplet的IP地址或者您重定向和下定义的域ServerName
的配置:
http://162.243.74.190/
# Hello world!
注意:如果您已经选择了与域名的工作,你应该把它添加到你的/etc/hosts
文件,并使用以下命令:
nano /etc/hosts
并将您的域附加到列表:
# 127.0.0.1 [domain.tld]
# 127.0.0.1 [www.domain.tld]
127.0.0.1 example.com
127.0.0.1 www.example.com
Nginx和Unicorn组合
Unicorn可以配置多种方式。 对于本教程,重点介绍关键元素,我们将从头创建一个文件,该文件将在启动应用程序服务器守护程序时由Unicorn使用。
打开一个空白unicorn.rb
文件,该文件将保存在应用程序目录(内部/var/www/my_app
)目录:
nano 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/logs/unicorn.log"
# stdout_path "/path/to/logs/unicorn.log"
stderr_path "/var/www/my_app/logs/unicorn.log"
stdout_path "/var/www/my_app/logs/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
应用程序目录中。
接下来,我们需要告诉Nginx如何与Unicorn交谈。 为了这个目的,它是在这一级编辑缺省配置文件足够: default.conf
和离开nginx.conf
作为提供-它已经设置为包括默认配置。
# Remove the default configuration file
rm -v /etc/nginx/sites-available/default
# Create a new, blank configuration
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;
# Set the server name, similar to Apache's settings
server_name localhost;
# Application root, as defined previously
root /var/www/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 -c unicorn.rb -D
接下来,我们准备重新加载和重新启动Nginx:
service nginx restart
就这样! 现在,您可以通过转到您的Droplet的IP地址(或与其关联的域名)来检查您的部署。
http://162.243.74.190/
# Hello world!
深入阅读
防火墙:
保护SSH:
如何在Ubuntu上使用fail2ban保护SSH
如何在CentOS 6上使用fail2ban保护SSH
创建警报:
监视和监视服务器访问日志每日:
如何安装和使用Logwatch Log Analyzer和Reporter
优化Unicorn工人:
如何优化Unicorn工人在Ruby on Rails应用程序