如何部署基于Sinatra的Ruby Web的应用程序在Ubuntu 13

在这种DigitalOcean文章中,我们将学习几种不同的方法把你的应用程序的Sinatra其隐框,并使用不同的和有趣的技术和方法在Ubuntu世界分享。

介绍


Sinatra是一个简洁的框架,不喜欢炫耀。 它完成了工作,没有强制开发人员的任何东西。 当谈到采取你的应用程序,开发使用这个美好的小工具,同样的逻辑适用,你欢迎与多个选择。 每个工作几乎相同的方式:得到这份工作没有不必要的复杂性做了。

在这种DigitalOcean文章,下面我们第一次的Ruby 2.1和Sinatra在Ubuntu 13教程中,我们将学习几种不同的方法把你的Sinatra应用了其隐藏的盒子,并与世界[Ubuntu的]分享使用不同的(和有趣)技术和方法。

词汇表


应用程序部署


2.应用服务器


  1. 机架中间件
  2. Phusion Passenger应用服务器
  3. Unicorn应用服务器

HTTP / WWW服务器


  1. Apache HTTP服务器
  2. Nginx HTTP服务器作为前端反向代理运行

4.安装


  1. Apache和Passenger组合
  2. 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需要的工具准备系统。

这些工具包括以下内容:

  1. 具有SSL支持的curl开发标头

  2. Apache 2

  3. Apache 2开发标头

  4. Apache便携式运行时(APR)开发标头

  5. 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!

深入阅读


防火墙:


使用IP表设置防火墙

保护SSH:


如何在Ubuntu上使用fail2ban保护SSH
如何在CentOS 6上使用fail2ban保护SSH

创建警报:


如何在CentOS VPS上发送电子邮件警报以进行系统监控

监视和监视服务器访问日志每日:


如何安装和使用Logwatch Log Analyzer和Reporter

优化Unicorn工人:


如何优化Unicorn工人在Ruby on Rails应用程序

:提交OS Tezer