如何自动Ruby on Rails应用部署使用Capistrano的

介绍

如果你还没有厌倦重复同样的常规任务来更新你的应用服务器,使你的项目在线,你可能会最终你的感觉,而开发你的项目的快乐往往是一个常见的打击,的系统管理(例如上传您的代码库,修改配置,一遍又一遍地执行命令等)

但不要害怕! Capistrano,任务自动化工具,在这里帮助。

在这个DigitalOcean文章中,我们将创建一个坚如磐石的服务器设置,运行最新版本的CentOS,使用Nginx和Passenger托管Ruby-on-Rails应用程序。 我们将继续学习如何使用基于Ruby的自动化工具Capistrano自动化部署过程和更新过程。

注:本文建立在从过去Capistrano的文章知识: 自动化部署随着Capistrano的:入门 为了获得该工具的良好的知识,这是强烈推荐,如果你打算使用它,建议阅读之前继续这篇文章。 同样,如果你想了解更多关于准备与Passenger(Nginx的和)的Rails应用程序部署一个新的Droplet,检查了如何部署Rails应用使用Passenger Nginx的文章。

注:Capistrano的依赖的Git的部署。 要了解更多考虑点击阅读关于这个问题的DigitalOcean社会的文章在这里

词汇表

1.准备部署服务器

  1. 更新和准备操作系统
  2. 设置Ruby环境和Rails
  3. 下载并安装应用程序。 &HTTP服务器
  4. 创建Nginx管理脚本
  5. 配置Nginx进行应用程序部署
  6. 下载并安装Capistrano
  7. 创建用于部署的系统用户

2.为基于Git的Capistrano部署准备Rails应用程序

  1. 创建基本的Ruby-On-Rails应用程序
  2. 创建Git存储库

3.使用Capistrano自动化部署

  1. 在项目目录中安装Capistrano
  2. 正与config/deploy.rb内部项目目录
  3. 正与config/deploy/production.rb内部项目目录
  4. 部署到生产服务器

准备部署服务器

注意:为了更好地理解下面的部分,它可以被认为是一个漫长的总结,检查出完整的文章的主题: 如何部署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_rootpassenger_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)。

:提交OS Tezer
赞(52) 打赏
未经允许不得转载:优客志 » 系统运维
分享到:

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

微信扫一扫打赏