金钱(警告)
状态: 被贬低
本文涵盖了不再受支持的 CentOS 版本. 如果您目前正在运行运行 CentOS 6 的服务器,我们强烈建议升级或迁移到受支持的 CentOS 版本。
** 原因** : CentOS 6 已于 2020 年 11 月 30 日到期(EOL)并且不再收到安全补丁或更新。
** 参见相反** :本指南可能仍然有用作为参考,但可能不适用于其他 CentOS 版本. 如果可用,我们强烈建议使用为您使用的 CentOS 版本撰写的指南。
美元
介绍
简单设计的应用程序服务器可以在几分钟内启动并启动您的基于 Rails 的 Web 应用程序,但是,如果您希望对服务器设置有更多的控制权,或者想要尝试一些更灵活的新东西,使用一组层化的组件可以帮助您实现您的目标 - 无论是未来的部署还是需要引入第三方元素,如缓存服务器。
在这份数码海洋的文章中,我们将研究一个多层次的部署安装, 以托管基于铁路的Ruby网络应用。 为此安排,我们将使用运行在Nginx后方的全能、灵活和极其成功的Unicorn应用程序服务器。 虽然我们将在单一的服务器上构建这个结构,以进行演示,但您可以轻松地使用多个液滴来分散事物,并方便地放大 — — 无论是横向还是纵向的!
词汇
1. Web 应用部署、服务器及其角色
- Unicorn 应用服务器 2. Nginx HTTP 服务器作为前端反向代理服务器运行
2 准备部署服务器
- 更新和准备操作系统 2. 设置 Ruby 环境和铁路 3. 安装 Nginx 4. 安装 Unicorn
3.准备部署的铁路应用程序
- 创建样本应用程序 2. 上传您的源代码
4 配置服务器
- 独角兽 2. Nginx 3. 管理服务器
第5章 继续阅读
Web 应用部署、服务器及其角色
当涉及到部署 Web 应用程序时,通常会涉及到大量的应用程序,分层设置并相互协作,这种类型的现实世界部署设置与使用单一开发服务器非常不同,该服务器是专为测试目的而设计的,因为由于缺乏功能和功能,它们无法在实际网站流量下工作。
谈到功能,应该注意的是,有几台流行的服务器可供选择,每个服务器提供不同的功能:一些专注于简单性,一些速度,一些稍微的一切,可以配置选项以满足复杂的生产需求。
在本文中,我们选择的应用程序服务器是Unicorn。Unicorn是一个出色的应用程序服务器,包含您的Rails应用程序来处理接收请求,最好是经过过滤并通过前端HTTP服务器发送后。
Nginx HTTP 服务器,另一方面,是从头到尾设计的,作为一个多用途的,面向前面的 Web 服务器。它能够服务静态文件(如图像,文本文件等)非常好,平衡连接,并处理某些剥削尝试。它作为所有请求的第一个入口点,并将其传递给Unicorn,以便Web 应用程序处理并返回响应。
** 注意:** 要了解不同的 Ruby Web 应用程序服务器,并了解什么是Rack
,请参阅我们的文章 对比 Ruby Web 应用程序的 (Rack) Web 服务器。
Unicorn 应用服务器
Unicorn 是一个非常成熟的 Web 应用程序服务器,用于基于 Ruby/Rack 的 Web 应用程序. 它具有完整的功能,但它通过设计拒绝尝试做一切。
Unicorn 的 master 流程根据您的要求生成 workers,以满足请求. 该流程还监控员工,以防止与记忆和流程相关的惊人问题。
如上所述,独角兽代表任务的一个领域是使用操作系统进行负载平衡,这允许请求 not 对忙碌的工人产生堆积。
Nginx HTTP 服务器运行为前端反向代理
Nginx 是一个非常高性能的 Web 服务器 / (反向) - 代理服务器. 它因其轻量,相对易于使用和易于扩展(通过插件 / 插件)而获得了其受欢迎性。 由于其架构,它能够处理 a lot 请求(几乎无限),这 - 取决于您的应用程序或网站的负载 - 可能很难使用其他一些较旧的替代方案来解决。
** 请记住:** 处理
连接在技术上意味着不放弃它们,并能够为它们提供服务 something. 你仍然需要你的应用程序和数据库正常运作,以便让 Nginx 服务客户 responses 不是错误消息。
要了解更多关于 Nginx 的信息,您可以访问其官方网站,位于 nginx.com。
准备部署服务器
在本节中,我们将执行以下步骤:
- 更新操作系统 * 获取部署所需的基本工具 * 安装 Ruby、 Rails 和库 * 安装应用程序(即 Unicorn)和 HTTP 服务器 (Nginx)
更新和准备操作系统
為了安裝 Ruby 和其他必要的應用程式(例如我們的伺服器),我們需要先準備最少發送的 CentOS 滴,並將其配備一些途中需要的開發工具。
运行以下命令来更新 CentOS VPS 的默认工具:
1yum -y update
2
3# This command will update all the base applications
4# that come with CentOS by default. Which are mostly
5# reserved for use by the operating system.
通过执行以下命令安装包含开发工具的包:
1yum groupinstall -y 'development tools'
2
3# With more recent versions of CentOS, such as 6.5 in our case,
4# you can simply run:
5# yum groupinstall -y development
6# instead.
7
8# This bundle of applications contains various tools
9# Such as: gcc, make, automake, binutils, git etc.
对于本教程,我们需要的一些包(如 libyaml-devel、nginx 等)在官方 CentOS 存储库中找不到。为了简化事情,而不是手动安装它们,我们将添加用于 YUM 包管理器的 EPEL 软件存储库。
1# Enable EPEL Repository
2sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
3
4# Update everything, once more.
5yum -y update
最后,我们需要为本教程获取curl-devel
和其他几个工具和库(例如,Rails需要 sqlite-devel)。
为了安装它们,运行以下操作:
1yum install -y curl-devel nano sqlite-devel libyaml-devel
设置 Ruby 环境和铁路
注: 本节是我们专门文章的摘要 如何在CentOS 6.5上安装Ruby 2.1.0。
我们将使用 Ruby Version Manager (RVM) 来下载和安装 Ruby 解释器。
运行以下两个命令来安装 RVM 并为 Ruby 创建系统环境:
1gpg --keyserver hkp://keys.gnupg.net --recv-keys D39DC0E3
2\curl -sSL https://get.rvm.io | bash -s stable
3source /etc/profile.d/rvm.sh
最后,为了在我们的系统上完成安装Ruby,让我们让RVM下载并安装Ruby版本 2.1.0:
1rvm reload
2rvm install 2.1.0
由于Rails首先需要一个JavaScript解释器来工作,我们还需要设置Node.js
。
运行以下操作来下载和安装nodejs
使用yum
:
1yum install -y nodejs
執行以下命令下載並安裝「rails」使用「gem」:
1gem install bundler rails
安装 Nginx
由于我们已启用了 EPEL 存储,所以可以使用 yum 获取 Nginx。
运行以下操作来下载和安装 Nginx 使用 yum
:
1yum install -y nginx
** 注意:** 我们将在以下部分配置此工具。
安装独角兽
有几种方法可以轻松下载Unicorn,因为它是一种与应用程序相关的依赖,最合乎逻辑的方式是使用RubyGems。
运行以下操作来下载和安装 Unicorn 使用``:
1gem install unicorn
** 注意:** 我们将在下一节中看到如何使用此工具。
为部署准备铁路应用程序
** 注意: ** 在本节中,我们将以一个非常简单的Ruby On Rails应用程序为例工作。 对于您的应用程序的实际部署,您应该上传您的代码库,并确保安装所有依赖(即 bundle
)。
创建样本应用程序
让我们开始在我们的家庭目录中创建一个非常基本的 Rails 应用程序,以便与 Unicorn 服务。
运行以下命令,让 Rails 创建一个名为my_app
的新应用程序:
1# Create a sample Rails application
2cd /var
3mkdir www
4cd www
5rails new my_app
6
7# Enter the application directory
8cd my_app
9
10# Create a sample resource
11rails generate scaffold Task title:string note:text
12
13# Create a sample database
14RAILS_ENV=development rake db:migrate
15RAILS_ENV=production rake db:migrate
16
17# Create a directory to hold the PID files
18mkdir pids
要测试您的应用程序是否正确设置,并且一切正常运行,请输入应用程序目录并运行一个简单的服务器:
1# Enter the application directory
2cd /var/www/my_app
3
4# Run a simple server
5rails s
6
7# You should now be able to access it by
8# visiting: http://[your droplet's IP]:3000/tasks
9
10# In order to terminate the server process,
11# Press CTRL+C
上传您的源代码
对于实际的部署,你当然会想将你的代码库上传到服务器上。 为此,你可以使用SFTP或图形工具,如FileZilla,安全地传输和管理远程文件。
- 要了解如何使用 SFTP,请参阅文章: 如何使用 SFTP。 * 要了解有关FileZilla的信息,请参阅该主题的文章: 如何使用FileZilla。
配置服务器
独角兽
在本教程中,专注于关键元素,我们将从头开始创建一个文件,该文件将由Unicorn在启动应用程序服务器戴蒙过程时使用。
打开一个空白的 unicorn.rb
文档,将保存在 config/
目录中:
1nano config/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/log/unicorn.log"
11# stdout_path "/path/to/log/unicorn.log"
12stderr_path "/var/www/my_app/log/unicorn.log"
13stdout_path "/var/www/my_app/log/unicorn.log"
14
15# Unicorn socket
16listen "/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
确认。
** 注意:** 要简单地测试你的应用程序与 Unicorn,你可以运行unicorn_rails
在应用程序目录中。
名称: Nginx
接下来,我们需要告诉 Nginx 如何与 Unicorn 交谈. 为此,在这个层面上,足以编辑默认配置文件: default.conf
并将 `nginx.conf' 留下 - 已经设置为包含默认配置。
1nano /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 server_name localhost;
10
11 # Application root, as defined previously
12 root /root/my_app/public;
13
14 try_files $uri/index.html $uri @app;
15
16 location @app {
17 proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
18 proxy_set_header Host $http_host;
19 proxy_redirect off;
20 proxy_pass http://app;
21 }
22
23 error_page 500 502 503 504 /500.html;
24 client_max_body_size 4G;
25 keepalive_timeout 10;
26}
保存和退出,按 CTRL + X 并用 Y 确认。
** 注意:** 有关 Nginx 的更多信息,请参阅 如何在 VPS 上配置 Nginx Web Server。
管理服务器
一旦我们完成了两个服务器的配置,是时候上网了!
让我们开始 Unicorn 并使用配置文件作为一个 DAEMON 运行它:
1# Make sure that you are inside the application directory
2# i.e. /my_app
3unicorn_rails -c config/unicorn.rb -D
4
5# You can set the environment by chaining -E flag
6# i.e. unicorn_rails .. .. .. -E [env. name]
接下来,我们准备重新加载并重新启动 Nginx:
1service nginx restart
现在你可以检查你的部署,通过访问你的 droplet 的 IP 地址(或与之相关的域名)。
1http://[Your droplet's IP addr]/tasks
2
3# Listing tasks
4
5# Title Note
6
7# New Task
继续阅读
防火墙:
安全的SSH:
How To Protect SSH with fail2ban on Ubuntu How To Protect SSH with fail2ban on CentOS 6
创建警报:
如何在 CentOS VPS 上发送电子邮件警报用于系统监控
每天监控和观看服务器访问日志:
优化独角兽工人: