介绍
Sinatra是一个简洁的框架,不喜欢展示。它完成了工作,而不强迫开发人员做任何事情。当涉及到使用这个奇妙的小工具开发的应用程序时,相同的逻辑适用,您欢迎多种选择。
在这篇DigitalOcean文章中,根据我们的第一篇教程(https://www.digitalocean.com/community/articles/how-to-install-ruby-2-1-0-and-sinatra-on-ubuntu-13-with-rvm),我们将学习几种不同的方法来将你的Sinatra应用程序从其隐藏的盒子里拿出来,并使用不同的(和有趣的)技术和方法与世界分享。
词汇
1 应用程序部署
2 应用服务器
- Rack Middleware 2. Phusion 乘客应用服务器 3. Unicorn 应用服务器
3. HTTP / WWW 服务器
- Apache HTTP 服务器 2. Nginx HTTP 服务器运行为前端反向代理
4 安装
- Apache 和乘客组合 2. Nginx 和独角兽组合
注意: 本文的例子是建立在我们的第一个 Sinatra 和 Ruby 2.1.0 在Ubuntu 13 条例文章. 如果你想了解更多关于开始与框架或如何准备操作系统与 Ruby 2.1.0 和 Sinatra,考虑检查它之前继续这个部分。
应用部署
部署一个应用程序(不论它是网站,API或服务器)通常意味着从头开始设置系统(或从时间拍摄的瞬间),通过更新一切,下载依赖,设置文件结构和权限来准备它,然后最终上传您的代码库或下载它使用源控制管理器(SCM),如 _Git。
按照西纳特拉的设计激励措施,我们将尽可能地保持事情简单,并为我们的部署示例提供经过测试、易于使用的方法,我们将使用可靠和可信的工具来处理工作并了解它们的差异。
应用服务器
),其中(通常)包含另一个应用程序(例如您的Web应用程序),并根据某些规格和界面(即共同的语言),允许包含的应用程序与外部世界进行通信。
这些工具通常只针对处理业务逻辑(执行程序),而不是其他HTTP / WWW操作,如发送或接收静态文件资产,处理多个客户端,或与长期的连接竞争 - 尽管,由于许多可用的库,也有这样的应用程序服务器可用。
在大多数设置中,一个或多个应用服务器(如乘客,独角兽,美洲豹,细辛等)被放置在合适的HTTP/WWW服务器后方(如Nginx,Apache等),任务是首先处理并处理所有接入的连接,然后传递到下一级. 这使得资产(如javascript文件,图像等)的服务非常高效,同时能充分利用两个应用程序的能力,使客户端保持在线(即不丢弃连接),并在应用程序层内处理请求.
注意: 要了解不同的 Ruby Web 应用程序服务器,并了解 Rack 是什么,请参阅我们的文章 对比 Ruby Web 应用程序的 (Rack) Web 服务器。
标签:Rack Middleware
Rack middleware,实施了 __Rack 规格,通过将接收的 HTTP 请求分成不同的管道阶段,并将其分成部分处理,直到它从您的 Web 应用程序(控制器)发送回复。
至于基于Ruby的框架,Web应用程序服务器通过实施Rack规格 /接口,通过config.ru文件连接到您的应用程序,调用(并导入)您的应用程序作为对象来完成他们的工作。
Phusion 乘客应用服务器
Passenger 是一款成熟、功能丰富的产品,旨在满足必要的需求和应用部署领域,同时极大地简化设置和启动程序,通过直接与 Nginx (和 Apache) 反向代理集成来消除传统的 middleman 架构。
这个非常受欢迎的工具可以在许多生产场景中广泛使用。Passenger的开源版本(这就是我们将使用的版本)具有多过程单线程操作模式。它的企业版本可根据您的需求配置为单线程或多线程操作。
要了解更多关于旅客的信息,您可以访问其官方网站位于 https://www.phusionpassenger.com/。
Unicorn 应用服务器
Unicorn是一个非常成熟的Web应用服务器,用于基于Ruby/Rack的Web应用程序,它具有完整的功能;然而,它通过设计拒绝尝试做一切:Unicorn的主要任务是做一个Web应用程序服务器需要做的事情,并授权其余的职责(例如操作系统)。
Unicorn 的主流程会根据您的要求为工人提供服务,并监控工人,以防止记忆和处理相关的惊人问题,这对于系统管理员来说意味着如果(例如)完成任务或发生记忆问题,它会杀死一个过程。
如上所述,独角兽代表任务的一个领域是使用操作系统进行负载平衡,这允许请求 not 对忙碌的工人产生堆积。
HTTP / WWW服务器
Apache HTTP 服务器
Apache 是一个 HTTP 服务器,目前不需要任何介绍,它一直是世界上最受欢迎的 HTTP 服务器,它是一个非常成熟,功能丰富和高度可配置的产品,运行和工作非常好。
Nginx HTTP 服务器运行为前端反向代理
Nginx 是从头开始设计的,以作为一个多用途的 HTTP 服务器。它能够非常好地服务静态文件(如图像,文本文件等),平衡连接并处理某些利用尝试。
它是一个非常高性能的 web server / (反向)-proxy 它相对容易工作和易于扩展(与插件和插件)。 由于其架构, Nginx 能够处理 a lot 请求(几乎无限),这 - 取决于您的应用程序或网站的负载 - 可能很难使用一些其他,较旧的替代方案来解决。
记住: )和数据库正常工作,以便 Nginx 服务客户的响应,而不是错误消息。
要了解更多关于 Nginx 的信息,您可以访问其官方网站位于 nginx.com。
设施
决定你想使用哪个服务器组合后,下一步就是实际上安装它们并准备在你想要运行应用程序的滴子上。
Apache 和乘客组合
注意: 在安装 Apache 和 Passenger 之前,请确保在安装时禁用(或删除) Nginx;或者配置以免阻止 Apache 的路径(即端口/插槽碰撞)。
注意: 如果您的插槽 RAM 少于 1 GB,您需要执行以下简单的程序,以准备一个 SWAP 磁盘空间作为临时数据存储器(即 RAM 替代品)** 为乘客** .由于 DigitalOcean 虚拟服务器配备了快速的 SSD 驱动器,这在执行服务器应用程序安装任务时并不构成问题。
1# Create a 1024 MB SWAP space
2# The process should complete within less than a minute
3
4sudo dd if=/dev/zero of=/swap bs=1M count=1024
5sudo mkswap /swap
6sudo swapon /swap
我们将开始获得Apache和乘客的组合,首先准备系统,使用乘客所需的工具。
这些工具包括如下:
- 支持 SSL 的 Curl 开发标题 2. Apache 2 3. Apache 2 开发标题 4. Apache Portable Runtime (APR) 开发标题 5. Apache Portable Runtime Utility (APU) 开发标题
让我们一个接一个,按照官方乘客文档的建议:
1# Install cURL development headers with SSL support:
2apt-get install libcurl4-openssl-dev
3
4# Apache 2:
5apt-get install apache2-mpm-worker
6
7# Apache 2 development headers:
8apt-get install apache2-threaded-dev
9
10# And finally, Apache PRU (APU) development headers:
11apt-get install libapr1-dev
接下來,讓我們下載並安裝使用 RubyGems 的「珍珠」的 Passenger:
1gem install passenger
2
3# This method of installing Passenger will use
4# the available and activated Ruby interpreter.
5# However, the installation will be available for
6# all Ruby versions' use.
一旦我们有所有必要的元素准备好了,我们可以得到粘合层(即模块),这将允许Apache和乘客并行并一起工作。
通过运行以下命令开始安装过程:
1passenger-install-apache2-module
2
3# Here's what you can expect from the installation process:
4
5# 1. The Apache 2 module will be installed for you.
6# 2. You'll learn how to configure Apache.
7# 3. You'll learn how to deploy a Ruby on Rails application.
8
9# ..
点击进入继续。
现在安装程序将要求您选择您将使用的编程语言。 使用箭头键向下滚动,然后使用空间栏来选择适合您的应用程序。
1Which languages are you interested in?
2
3Use <space> to select.
4If the menu doesn't display correctly, ensure that your terminal supports UTF-8.
5
6 ‣ ⬢ Ruby
7 ⬡ Python
8 ⬡ Node.js
9 ⬡ Meteor
一旦你做出了你的选择,按 Enter 来继续到下一步。
现在安装程序将开始编译Apache模块。
注意: 此小部分可能需要很短的时间 - 通常是几分钟。
Nginx 和独角兽组合
注意: 在与 Unicorn 安装 Nginx 之前,请确保禁用 (或删除) Apache,或配置以免阻止 Nginx (即端口 / 接口碰撞)。
注意: 如果您对系统资源的限制(例如可用 RAM 的数量),您可能希望选择此组合来部署您的应用程序。
Nginx 和 Unicorn 一起为 Web 应用程序部署创造了一个很好的组合. 正如我们之前所讨论的那样, Unicorn 是一个令人惊叹的服务器,以智能的方式工作,让用户使用所有可用的系统工具来处理这个工作 - 而且它做得很好!
默认系统包管理器)将能够为我们下载和安装 Nginx。
运行以下操作来下载和安装 Nginx 使用aptitude
:
1aptitude install nginx
一旦我们已经准备好 Nginx,下一步就是获得 Unicorn Web 应用程序服务器,这是由 RubyGems 包管理器轻松完成的。
运行以下操作来下载和安装 Unicorn 使用``:
1gem install unicorn
配置
在本节中,我们将看到如何配置 两个 服务器组合以获得我们的应用程序在线. 您应该记住,尽管有营销努力,您将能够部署任何数量的Web应用程序,只要您正确配置它们,并有足够的系统资源来支持它们。
注意: 请记住,在继续使用(并应用)下面的设置之前,您应该从上述 Web 应用程序 / HTTP 服务器组合中选择一个或另一个。
Apache 和乘客组合
完成安装Apache、乘客和乘客的Apache模块后,您将看到一个名为近在那里
的消息!
翻译: 请编辑您的 Apache 配置文件并添加这些行 : 翻译: 翻译: 装入Module客机_单元/usr/local/rvm/gems/ruby-2.1.0/gems/客机-4.0.37/buildingout/apache2/mod_客机.so. 翻译: < 如果Module mod_passenger.c> (中文(简体) ). 乘客乘降所/乘降所/乘降所/乘降所/乘降所/乘降所/乘降所/乘降所/乘降所-4.0.37 翻译: 乘客 Default Ruby/usr/local/rvm/gems/ruby-2.1.0/ 包装人/ruby </如果模块 > 翻译: 翻译: 重新启动 Apache 后, 您可以部署任意的网络数 Apache 上的应用程序,最小配置量!
所以,正如建议和建议的那样,让我们将配置块添加到我们的Apache配置文件中。
运行以下操作以使用 nano 文本编辑器编辑 Apache 配置文件:
1nano /etc/apache2/apache2.conf
将下面的文本块添加到您认为合适的地方,而不会影响其他配置:
1LoadModule passenger_module /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37/buildout/apache2/mod_passenger.so
2<IfModule mod_passenger.c>
3 PassengerRoot /usr/local/rvm/gems/ruby-2.1.0/gems/passenger-4.0.37
4 PassengerDefaultRuby /usr/local/rvm/gems/ruby-2.1.0/wrappers/ruby
5</IfModule>
保存和退出,按 CTRL + X 并用 Y 确认。
其参数被定义为在相应的位置(/usr/local/rvm/gems/ruby-2.1.0/..
)使用相应的 Ruby 版本(2.1.0
在第一个 Sinatra 教程中安装)。
接下来,我们需要根据安装程序的建议定义 an application:
翻译: 部署网络应用程序:一个例子 翻译: 翻译: 假设你有一个网络应用程序 在/某处。 向您的虚拟主机添加 翻译: Apache 配置文件并将其文档 Root 设置到/ 某处/ 公用 : 翻译: 翻译: < 虚拟屋 * :80> 翻译: 服务器Name www.yourhost.com
! ! ! # ! ! ! # ! ! ! ! 确定将文档Root指向"公开"!
翻译: 文档旋转/ 某处/ 公开 翻译: < 董事/ 某处/ 公开 >
时间轴: 这可以放松Apache的安全设置.
翻译: 允许全部覆盖 必须关闭多视图。 翻译: 选项 - 多视图 </主任 > 翻译: 翻译: </虚拟Host >
你可以部署你的任何你喜欢的地方;然而,什么可以被认为是一个很好的例子是使用:
- 一个用户的子目录,设置为部署,或; * 使用一般的
/var/www
位置,就像我们过去所做的那样。
注意: 对于下一步的配置步骤,我们将使用我们之前的 Sinatra/Ruby 2.1.0 教程中的样本应用程序。
为了让Apache知道我们的应用程序,并让乘客运行它,我们需要定义一个虚拟主机。
让我们使用 nano 创建一个名为my_app
的空格配置文件:
注意: 您可以按您认为合适的名称命名此文件,以匹配您的应用设置。
1nano /etc/apache2/sites-available/my_app.conf
放置下面的内容,修改它们以适应您的应用部署目录:
1<VirtualHost *:80>
2 # ServerName [!! Your domain OR droplet's IP]
3 ServerName 162.243.74.190
4
5 # !!! Be sure to point DocumentRoot to 'public'!
6 # DocumentRoot [root to your app./public]
7 DocumentRoot /var/www/my_app/public
8
9 # Directory [root to your app./public]
10 <Directory /var/www/my_app/public>
11 # This relaxes Apache security settings.
12 AllowOverride all
13 # MultiViews must be turned off.
14 Options -MultiViews
15 </Directory>
16
17</VirtualHost>
保存和退出,按 CTRL + X 并用 Y 确认。
现在我们可以将我们的新网站配置添加到Apache:
1# Usage sudo a2ensite [configuration name without .conf extension]
2sudo a2ensite my_app
再度加载:
1service apache2 reload
2service apache2 restart
您的 Web 應用程式現在應該是活生生的,並在線上。訪問您的 IP 地址或您在「ServerName」設定下重定向和定義的網域:
1http://162.243.74.190/
2
3# Hello world!
注意: 如果您选择使用域名工作,您应该使用以下命令将其添加到您的 `/etc/hosts' 文件中:
1nano /etc/hosts
将您的域名添加到列表中:
1# 127.0.0.1 [domain.tld]
2# 127.0.0.1 [www.domain.tld]
3
4127.0.0.1 example.com
5127.0.0.1 www.example.com
Nginx 和独角兽组合
在本教程中,专注于关键元素,我们将从头开始创建一个文件,该文件将由Unicorn在启动应用程序服务器戴蒙时使用。
打开一个空白的 unicorn.rb
文档,将保存在应用程序目录 (/var/www/my_app
) 目录中:
1nano unicorn.rb
放下下面的代码块,根据需要修改它:
1# Set the working application directory
2# working_directory "/path/to/your/app"
3working_directory "/var/www/my_app"
4
5# Unicorn PID file location
6# pid "/path/to/pids/unicorn.pid"
7pid "/var/www/my_app/pids/unicorn.pid"
8
9# Path to logs
10# stderr_path "/path/to/logs/unicorn.log"
11# stdout_path "/path/to/logs/unicorn.log"
12stderr_path "/var/www/my_app/logs/unicorn.log"
13stdout_path "/var/www/my_app/logs/unicorn.log"
14
15# Unicorn socket
16# listen "/tmp/unicorn.[app name].sock"
17listen "/tmp/unicorn.myapp.sock"
18
19# Number of processes
20# worker_processes 4
21worker_processes 2
22
23# Time-out
24timeout 30
保存和退出,按 CTRL + X 并用 Y 确认。
注意: 为了简单地测试您的应用程序与独角兽,你可以运行独角兽
在应用程序目录中。
接下来,我们需要告诉 Nginx 如何与 Unicorn 交谈. 为此,在这个层面上,足以编辑默认配置文件: default.conf
并将 `nginx.conf' 留下 - 已经设置为包含默认配置。
1# Remove the default configuration file
2rm -v /etc/nginx/sites-available/default
3
4# Create a new, blank configuration
5nano /etc/nginx/conf.d/default.conf
用下面的文件替换文件内容,再次修改必要的位数以满足您的需求:
1upstream app {
2 # Path to Unicorn SOCK file, as defined previously
3 server unix:/tmp/unicorn.myapp.sock fail_timeout=0;
4}
5
6server {
7
8 listen 80;
9
10 # Set the server name, similar to Apache's settings
11 server_name localhost;
12
13 # Application root, as defined previously
14 root /var/www/my_app/public;
15
16 try_files $uri/index.html $uri @app;
17
18 location @app {
19 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
20 proxy_set_header Host $http_host;
21 proxy_redirect off;
22 proxy_pass http://app;
23 }
24
25 error_page 500 502 503 504 /500.html;
26 client_max_body_size 4G;
27 keepalive_timeout 10;
28
29}
保存和退出,按 CTRL + X 并用 Y 确认。
注意: 要了解有关 Nginx 的更多信息,请参阅 如何在 VPS 上配置 Nginx Web 服务器。
让我们开始 Unicorn 并使用配置文件作为一个 DAEMON 运行它:
1# Make sure that you are inside the application directory
2# i.e. /my_app
3unicorn -c unicorn.rb -D
接下来,我们准备重新加载并重新启动 Nginx:
1service nginx restart
现在你可以检查你的部署,通过访问你的 droplet 的 IP 地址(或与之相关的域名)。
1http://162.243.74.190/
2
3# Hello world!
继续阅读
防火墙:
安全的SSH:
如何在Ubuntu上使用 fail2ban 保护 SSH 如何在CentOS 上使用 fail2ban 保护 SSH
创建警报:
每天监控和观看服务器访问日志:
优化独角兽工人: