介绍
如果你还没有厌倦重复同样的常规任务来更新你的应用服务器,使你的项目在线,你可能会最终你的感觉,而开发你的项目的快乐往往是一个常见的打击,的系统管理(例如上传您的代码库,修改配置,一遍又一遍地执行命令等)
但不要害怕! Capistrano,任务自动化工具,在这里帮助。
在这个DigitalOcean文章中,我们将创建一个坚如磐石的服务器设置,运行最新版本的CentOS,使用Nginx和Passenger托管Ruby-on-Rails应用程序。 我们将继续学习如何使用基于Ruby的自动化工具Capistrano自动化部署过程和更新过程。
注:本文建立在从过去Capistrano的文章知识: 自动化部署随着Capistrano的:入门 。 为了获得该工具的良好的知识,这是强烈推荐,如果你打算使用它,建议阅读之前继续这篇文章。 同样,如果你想了解更多关于准备与Passenger(Nginx的和)的Rails应用程序部署一个新的Droplet,检查了如何部署Rails应用使用Passenger Nginx的文章。
注:Capistrano的依赖的Git的部署。 要了解更多考虑点击阅读关于这个问题的DigitalOcean社会的文章在这里 。
词汇表
1.准备部署服务器
- 更新和准备操作系统
- 设置Ruby环境和Rails
- 下载并安装应用程序。 &HTTP服务器
- 创建Nginx管理脚本
- 配置Nginx进行应用程序部署
- 下载并安装Capistrano
- 创建用于部署的系统用户
2.为基于Git的Capistrano部署准备Rails应用程序
- 创建基本的Ruby-On-Rails应用程序
- 创建Git存储库
3.使用Capistrano自动化部署
- 在项目目录中安装Capistrano
- 正与
config/deploy.rb
内部项目目录 - 正与
config/deploy/production.rb
内部项目目录 - 部署到生产服务器
准备部署服务器
注意:为了更好地理解下面的部分,它可以被认为是一个漫长的总结,检查出完整的文章的主题: 如何部署Rails应用使用Passenger Nginx的 。
更新和准备操作系统
运行以下命令以更新基于CentOS的Droplet的默认工具:
yum -y update
通过执行以下命令安装包含开发工具的软件包:
yum groupinstall -y 'development tools'
一些我们需要在本教程(如libyaml-DEVEL,nginx的等)的包不属于官方的CentOS存储库中找到。
运行以下命令添加EPEL存储库:
sudo su -c 'rpm -Uvh http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm'
yum -y update
最后,要安装一些其他库和工具,请运行以下命令:
yum install -y curl-devel nano sqlite-devel libyaml-devel
设置Ruby环境和Rails
注:本部分我们专门文章内容摘要如何安装Ruby 2.1.0在CentOS 6.5 。
运行以下两个命令来安装RVM并为Ruby创建一个系统环境:
curl -L get.rvm.io | bash -s stable
source /etc/profile.d/rvm.sh
rvm reload
rvm install 2.1.0
由于Rails需要一个JavaScript解释器,我们还需要设置Node.js。
运行以下命令以下载和安装使用的NodeJS yum
:
yum install -y nodejs
执行使用RubyGems的'下面的命令gem
下载并安装rails
:
gem install bundler rails
下载并安装应用程序。 &HTTP服务器
注意:如果您的 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
Nginx
注:通常情况下,下载和安装Nginx的,您可以添加EPEL软件库(因为我们已经做了),并通过获得Nginx的yum
。 但是,要使Nginx与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
在接下来的步骤中,选择Item 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支持。
注意:这个动作可能需要一段时间-很可能超过一想还是想到!
创建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.
# 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;
# }
..
并定义您的默认应用程序根目录:
# Set the folder where you will be deploying your application.
# We are using: /home/deployer/apps/my_app
root /home/deployer/apps/my_app/public;
passenger_enabled on;
按CTRL + X,并用Y确认保存并退出。
运行以下命令以使用新的应用程序配置重新加载Nginx:
# !! Remember to create an Nginx management script
# by following the main Rails deployment article for CentOS
# linked at the beginning of this section.
/etc/init.d/nginx restart
要检查Nginx的状态,您可以使用:
/etc/init.d/nginx status
注意:要了解更多关于Nginx的,请参阅如何在VPS配置的Nginx Web服务器 。
下载并安装Capistrano
一旦我们的系统准备好了,获得Capistrano的最新版本,感谢RubyGems是一件轻而易举的事。
您可以简单地使用以下方式获取Capistrano版本3:
gem install capistrano
创建用于部署的系统用户
在这一步中,我们将创建一个CentOS系统用户来执行部署的操作。 这将是Capistrano的用户使用。
注意:为了保持基本的东西,我们要创建一个deployer
必要的权限的用户。 有关更完整的成立,可以考虑使用从Capistrano的入门教程组的例子。
创建一个新的系统用户deployer
:
adduser deployer
设置deployer
的密码:
passwd deployer
# Enter a password
# Confirm the password
编辑/etc/sudoers
使用文本编辑器nano
:
nano /etc/sudoers
向下滚动文件,并找到root
的定义:
..
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
..
追加后立即以下root ALL=(ALL) ALL
deployer ALL=(ALL) ALL
在本节/etc/sudoers
文件现在应该是这样的:
..
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root ALL=(ALL) ALL
deployer ALL=(ALL) ALL
..
按CTRL + X,并用Y确认保存并退出。
准备Rails应用程序用于基于Git的Capistrano部署
一旦我们的系统准备好了,所有必要的应用程序设置和工作正常,我们可以继续创建一个示例Rails应用程序用作示例。
在第二阶段,我们将创建一个Git存储库,并将代码库推送到Github的中央可访问位置,以便Capistrano用于部署。
注:在这里,我们创建了一个示例应用程序。 对于实际的部署,你应该对自己执行这些操作,确保一切都备份后- !万一另外请注意,您将需要从不同的位置比服务器运行Capistrano的,其中应用程序的需求部署。
创建基本的Ruby-On-Rails应用程序
注:以下步骤是在那里建立一个替代Rails应用程序尝试Capistrano的。
已经安装了Ruby和Rails,我们只需要一个命令即可开始。
执行以下命令来获得的Rails创建一个名为my_app应用新的应用程序:
# Create a sample Rails application
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 my_app
# Run a simple server
rails s
# You should now be able to access it by
# visiting: http://[your droplet's IP]:3000
# In order to terminate the server process,
# Press CTRL+C
创建Git存储库
注意:要了解更多关于使用Git的工作,检查了如何使用有效的Git在DigitalOcean社区网页教程。
注意:为了遵循这一节中,您将需要一个Github上的帐户。 或者,你可以设置一个Droplet主持下自己的Git仓库本关于这个问题DigitalOcean文章。 如果选择这样做,请确保在部署文件上使用相关的URL。
我们将使用由提供的示例说明Github上创建一个源代码库。
执行以下,不言自明的命令里面my_app
目录发起一个仓库:
# !! These commands are to be executed on
# your development machine, from where you will
# deploy to your server.
# Instructions might vary slightly depending on
# your choice of operating system.
#
# Make sure to set correct paths for application
# Otherwise Nginx might not be able to locate it.
# Initiate the repository
git init
# Add all the files to the repository
git add .
# Commit the changes
git commit -m "first commit"
# Add your Github repository link
# Example: git remote add origin git@github.com:[user name]/[proj. name].git
git remote add origin git@github.com:user123/my_app.git
# Create an RSA/SSH key
# Follow the on-screen instructions
ssh-keygen -t rsa
# View the contents of the key and add it to your Github
# by copy-and-pasting from the current remote session by
# visiting: https://github.com/settings/ssh
# To learn more about the process,
# visit: https://help.github.com/articles/generating-ssh-keys
cat /root/.ssh/id_rsa.pub
# Set your Github information
# Username:
# Usage: git config --global user.name "[your username]"
git config --global user.name "user123"
# Email:
# Usage: git config --global user.email "[your email]"
git config --global user.email "user123@domain.tld"
# Push the project's source code to your Github account
git push -u origin master
使用Capistrano自动部署
正如你从我们的第一条Capistrano的记忆,顺便开始使用该库由项目目录内安装它。 在本节中,我们将了解如何执行此操作,然后创建设置服务器所需的文件。
在项目目录中安装Capistrano
我们的文章中的另一个简单步骤是安装Capistrano文件。 以下命令将构建要由该工具用于部署的一些目录和文件。
运行以下命令以启动(即安装 )Capistrano的文件:
cap install
# mkdir -p config/deploy
# create config/deploy.rb
# create config/deploy/staging.rb
# create config/deploy/production.rb
# mkdir -p lib/capistrano/tasks
# Capified
在项目目录中使用config / deploy.rb
该文件deploy.rb
包含有关部署服务器(S)的参数和设置。 在这里,我们将告诉Capistrano我们想要连接和部署的服务器,以及如何。
注:当编辑文件(或定义的配置),你可以将它们注释掉或增加新的线路。 确保不要有一些示例设置重写要附加的人。
运行使用编辑文件中的以下nano
文本编辑器:
nano config/deploy.rb
添加以下代码块,修改它以适合您自己的设置:
# Define the name of the application
set :application, 'my_app'
# Define where can Capistrano access the source repository
# set :repo_url, 'https://github.com/[user name]/[application name].git'
set :scm, :git
set :repo_url, 'https://github.com/user123/my_app.git'
# Define where to put your application code
set :deploy_to, "/home/deployer/apps/my_app"
set :pty, true
set :format, :pretty
# Set the post-deployment instructions here.
# Once the deployment is complete, Capistrano
# will begin performing them as described.
# To learn more about creating tasks,
# check out:
# http://capistranorb.com/
# namespace: deploy do
# desc 'Restart application'
# task :restart do
# on roles(:app), in: :sequence, wait: 5 do
# # Your restart mechanism here, for example:
# execute :touch, release_path.join('tmp/restart.txt')
# end
# end
# after :publishing, :restart
# after :restart, :clear_cache do
# on roles(:web), in: :groups, limit: 3, wait: 10 do
# # Here we can do anything such as:
# # within release_path do
# # execute :rake, 'cache:clear'
# # end
# end
# end
# end
按CTRL + X,并用Y确认保存并退出。
使用config / deploy / production.rb在项目目录内
注:类似deploy.rb
,你将需要作出一些修正production.rb
文件。 你最好修改代码,而不是附加下面的块。
运行使用编辑文件中的以下nano
文本编辑器:
nano config/deploy/production.rb
输入您的服务器设置,类似如下:
# Define roles, user and IP address of deployment server
# role :name, %{[user]@[IP adde.]}
role :app, %w{deployer@162.243.74.190}
role :web, %w{deployer@162.243.74.190}
role :db, %w{deployer@162.243.74.190}
# Define server(s)
server '162.243.74.190', user: 'deployer', roles: %w{web}
# SSH Options
# See the example commented out section in the file
# for more options.
set :ssh_options, {
forward_agent: false,
auth_methods: %w(password),
password: 'user_deployers_password',
user: 'deployer',
}
按CTRL + X,并用Y确认保存并退出。
部署到生产服务器
一旦我们完成设置,就是部署的时候了。
在开发计算机上运行以下代码以部署到生产服务器。 如上文所述,Capistrano将:
连接到部署服务器
下载应用程序源
执行部署操作(即获取Passenger重新启动应用程序)
cap production deploy
要了解有关Capistrano及其功能的更多信息,请考虑阅读[Capistrano文档](capistranorb.com/documentation)。