介绍
挑战从来没有真正结束,特别是如果你是新来的某一领域的计算机编程。在这种情况下,我们的主题是Rails,以及如何在线获取基于Ruby On Rails的Web应用程序 - 这是最简单和最快捷的方式。 在解决了谜题,开始使用Ruby编程语言和Rails Web应用程序开发框架开始处理应用程序之后,当需要与世界其他地方共享应用程序时,可能会混淆所有可用的选择,存在的可能组合的无限量。 在这篇DigitalOcean文章中,我们将向您展示 - 从头到尾,如何使用最新的CentOS操作系统实现稳定的Rails应用程序部署(即在线发布)。这将伴随Phusion Passenger应用服务器,以其简单性和出色功能而闻名,加上在前面运行的Nginx HTTP服务器来处理和管理连接。 注:在此穿行,建议您检查并阅读中提供的链接的内容。他们将帮助您提高性能,安全性等。词汇表
Web应用程序部署,服务器及其角色
- Phusion Passenger应用服务器
- Nginx HTTP服务器作为反向代理运行
2.准备部署服务器
- 更新和准备操作系统
- 设置Ruby环境和Rails
- 下载并安装服务器应用程序
3.准备应用程序以进行部署
- 创建示例应用程序/上传源代码
- 创建Nginx管理脚本
- 配置Nginx
4.进一步阅读
Web应用程序部署,服务器及其角色
当涉及到部署Web应用程序或将它们联机时,通常有多层应用程序用于此目的。当然一个人可以做这项工作,但可能不是很好,因为他们不适合所有目的。 在本教程中,我们将使用Phusion Passenger作为应用程序服务器。应用程序服务器的工作包括包含现代Web应用程序(例如Ruby Rack,Python WSGI等),并作为传入Web请求的辅助入口点。 另一方面,Nginx是从根本上设计的,作为一个多用途的HTTP服务器。它能够非常好地提供静态文件(例如图像,文本文件等),平衡连接,并处理某些利用尝试。它充当所有请求的第一个入口点,并将它们传递给Web应用程序的Passenger以处理和返回响应。Phusion Passenger应用服务器
今天旅客已成为Ruby on Rails应用 推荐的服务器。它是一个成熟的,功能丰富的产品,旨在涵盖必要的需求和应用程序部署的领域,同时大大简化了设置和开始的程序。它通过与Nginx(以及Apache)的直接集成,消除了传统的中间人服务器设置架构。它也称为mod_rails。 Passenger非常受欢迎,并在许多生产场景中广泛使用。这是很容易可能的联系和找到专家,以及有您的问题在线处理。 开源版本,我们将使用,有一个 多进程 单线程操作模式。它的企业版可以配置为单线程或多线程。 要了解更多关于客运,您可以参观位于官方网站 https://www.phusionpassenger.com/ 。Nginx HTTP服务器作为反向代理运行
Nginx的是一个非常高的高性能 Web服务器 /( 反向)-proxy。 它已经达到其受欢迎程度是由于重量轻,相对容易使用,并且易于扩展(与附加/插件)。 由于它的结构,它能够处理 大量的哪些请求(几乎不受限制)的-这取决于你的应用程序或网站负载-可能是真的很难使用一些其他老的替代品来解决。 请记住:“处理”连接技术上意味着 不会放弃他们,并能与 一些为他们服务。 你仍然需要你的应用程序和数据库运作良好,才能有Nginx的为客户服务 的反应是不错误消息。 由于其流行和成功,我们将部署我们的应用程序运行在Nginx后面,从其强大的功能中受益。 要了解更多关于Nginx的,你可以参观位于官方网站 nginx.com 。准备部署服务器
在本节中,我们将执行以下步骤来获取可用于服务应用程序的摇滚服务器。- 更新操作系统
- 获取部署所需的基本工具
- 安装Ruby,Rails和库
- 安装应用程序(即Passenger)和HTTP服务器(Nginx)
更新和准备操作系统
为了安装Ruby和其他必要的应用程序(例如我们的服务器),我们需要首先准备最小运输的CentOSDroplet,并装备一些我们将需要的开发工具。 运行以下命令以更新基于CentOS的Droplet的默认工具: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存储库中找到。 为了简化事情,而不是对付手动安装它们,我们将增加对
YUM和其他包管理器的EPEL软件仓库使用。
# 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
最后,让Passenger与Nginx的,我们会在接下来的章节中安装工作,我们需要
curl-devel
库和纳米文本编辑器。 此外Rails的,我们将需要
sqlite-devel
。 为了安装
curl-devel
和纳米,运行以下命令:
yum install -y curl-devel nano sqlite-devel libyaml-devel
设置Ruby环境和Rails
注:本部分我们专门文章内容摘要 如何安装Ruby 2.1.0在CentOS 6.5 。 我们将使用Ruby版本管理器(RVM)下载并安装一个Ruby解释器(或者“rubies”,由RVM引用)。 运行以下两个命令来安装RVM并为Ruby创建一个系统环境:curl -L 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
Ruby之后,我们就可以使用
RubyGems包管理,帮助我们获得的基于Ruby工具,比如Rails框架休息。 由于Rails首先需要一个JavaScript解释器来工作,我们还需要设置Node.js.为此,我们将使用默认的系统包管理器YUM。 运行以下命令,使用yum下载并安装nodejs:
yum install -y nodejs
执行使用RubyGems的'下面的命令
gem
下载并安装
rails
:
gem install bundler rails
下载并安装服务器应用程序
注意:如果您 的 VPS小于1 GB的RAM,你需要执行下面的简单程序准备了SWAP磁盘空间作为临时数据持有者(RAM替代品)。由于DigitalOcean服务器配有快速SSD磁盘,因此在执行服务器应用程序安装任务时并不会构成问题。# Create a 1024 MB SWAP space
sudo dd if=/dev/zero of=/swap bs=1M count=1024
sudo mkswap /swap
sudo swapon /swap
Phusion Passenger
Red Hat Linux的默认包管理器RPM(RPM包管理器)的船舶应用包含在.rpm
文件。 不幸的是,在Passenger的情况下,他们很陈旧。 因此,我们将使用RubyGem再次下载和安装客运的最新版本-
第4版 。 使用以下命令只需下载并安装Passenger:
gem install passenger
# This command will fetch Passenger v4.0(.35+) for you.
为了测试Passenger被下载并正确设置,尝试运行
passenger
。 您应该看到类似下面的输出:
Phusion Passenger Standalone, the easiest way to deploy Ruby web apps.
Available commands:
passenger start Start Phusion Passenger Standalone.
..
Nginx
通常,要下载并安装Nginx,您可以添加EPEL存储库,并通过yum获取Nginx。但是,要使Nginx与Passenger一起工作,它的源必须用必要的模块编译。不要担心,虽然!Passenger带有一个方便的工具,使过程像执行单个命令一样简单。 运行以下命令,开始使用本地Passenger模块编译Nginx:passenger-install-nginx-module
运行命令后,按Enter键并确认您选择的语言(例如Ruby)。如果你愿意,你可以使用箭头键和空格键选择Ruby。
Use <space> to select.
If the menu doesn't display correctly, ensure that your terminal supports UTF-8.
‣ ⬢ Ruby
⬢ Python
⬢ Node.js
⬡ Meteor
在下一步中,选择项目1:
1. Yes: download, compile and install Nginx for me. (recommended)
The easiest way to get started. A stock Nginx 1.4.4 with Passenger
support, but with no other additional third party modules, will be
installed for you to a directory of your choice.
然后按Enter键继续。 现在,Nginx源将被下载,编译和安装与Passenger支持。
注意:这个动作可能需要一段时间-很可能超过一想还是想到!
准备应用程序以进行部署
注:在本节中,我们将有一个非常简单的Ruby on Rails应用作为例子来工作。对于应用程序的实际部署,您应该上传您的代码库,并确保已安装其所有依赖项。创建示例应用程序/上传源代码
让我们开始在我们的主目录中创建一个非常基本的Rails应用程序,以便与Passenger和Nginx一起服务。 执行以下命令来获得Rails创建一个名为里面 my_app应用新的应用程序/var/www
目录:
# 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 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中的图形工具[]]传输和安全地管理远程文件。
- 要了解与SFTP工作,请查看文章: 如何使用SFTP 。
- 要了解FileZilla中,请查看文章的主题: 如何使用FileZilla中 。
创建Nginx管理脚本
编译Nginx后,为了轻松控制它,我们需要创建一个简单的管理脚本。 运行以下命令创建脚本:nano /etc/rc.d/init.d/nginx
复制并粘贴以下内容:
#!/bin/sh
. /etc/rc.d/init.d/functions
. /etc/sysconfig/network
[ "$NETWORKING" = "no" ] && exit 0
nginx="/opt/nginx/sbin/nginx"
prog=$(basename $nginx)
NGINX_CONF_FILE="/opt/nginx/conf/nginx.conf"
lockfile=/var/lock/subsys/nginx
start() {
[ -x $nginx ] || exit 5
[ -f $NGINX_CONF_FILE ] || exit 6
echo -n $"Starting $prog: "
daemon $nginx -c $NGINX_CONF_FILE
retval=$?
echo
[ $retval -eq 0 ] && touch $lockfile
return $retval
}
stop() {
echo -n $"Stopping $prog: "
killproc $prog -QUIT
retval=$?
echo
[ $retval -eq 0 ] && rm -f $lockfile
return $retval
}
restart() {
configtest || return $?
stop
start
}
reload() {
configtest || return $?
echo -n $”Reloading $prog: ”
killproc $nginx -HUP
RETVAL=$?
echo
}
force_reload() {
restart
}
configtest() {
$nginx -t -c $NGINX_CONF_FILE
}
rh_status() {
status $prog
}
rh_status_q() {
rh_status >/dev/null 2>&1
}
case "$1" in
start)
rh_status_q && exit 0
$1
;;
stop)
rh_status_q || exit 0
$1
;;
restart|configtest)
$1
;;
reload)
rh_status_q || exit 7
$1
;;
force-reload)
force_reload
;;
status)
rh_status
;;
condrestart|try-restart)
rh_status_q || exit 0
;;
*)
echo $"Usage: $0 {start|stop|status|restart|condrestart|try-restart|reload|force-reload|configtest}"
exit 2
esac
按CTRL + X,并用Y确认保存并退出。 将此管理脚本的模式设置为可执行文件:
chmod +x /etc/rc.d/init.d/nginx
配置Nginx
在配置我们的服务器的最后一步,我们需要创建一个Nginx服务器块,它大致转换为Apache的虚拟主机。 正如你可能还记得Passenger Nginx的安装过程中看到,此过程包括添加代码块的Nginx的配置文件nginx.conf
。 默认情况下,除非另有规定,可以将这个文件下找到
/opt/nginx/conf/nginx.conf
。 键入以下命令以打开此配置文件,以使用文本编辑器nano对其进行编辑:
nano /opt/nginx/conf/nginx.conf
作为第一步,找到
http {
节点和后追加以下正确的
passenger_root
和
passenger_ruby
指令:
# Only for development purposes.
# For production environment, set it accordingly (i.e. production)
# Remove this line when you upload an actual application.
# For * TESTING * purposes only.
passenger_app_env development;
向下滚动文件,找到
server { ..
注释掉的默认位置,即:
..
# location / {
# root html;
# index index.html index.htm;
# }
..
并定义您的默认应用程序根目录:
root /var/www/my_app/public;
passenger_enabled on;
按CTRL + X,并用Y确认保存并退出。 运行以下命令以使用新的应用程序配置重新加载Nginx:
/etc/init.d/nginx restart
要检查Nginx的状态,您可以使用:
/etc/init.d/nginx status
为了测试您的应用程序(和我们的示例应用程序),您可以访问:
http://[Your droplet's IP addr]/tasks
# Listing tasks
# Title Note
# New Task
注意:要了解更多关于Nginx的,请参阅
如何在VPS配置的Nginx Web服务器 。
深入阅读
防火墙
使用IP表设置防火墙保护SSH
如何在Ubuntu上使用fail2ban保护SSH 如何在CentOS 6上使用fail2ban保护SSH创建警报
如何在CentOS VPS上发送电子邮件警报以进行系统监控每天监视和监视服务器访问日志
如何安装和使用Logwatch Log Analyzer和Reporter
:提交
OS Tezer