Capistrano自动部署工具的安装及使用

一:安装准备:
     Capistrano应该装在本地设备中,别在远程服务器中安装。安装时需要ruby和gem。 OS X系统已经有了,Linux可以使用相应的包管理器安装ruby和gem,安装完ruby后,gem会含在里面。
     CentOS系统可使用yum安装:(参考:  http://www.runoob.com/ruby/ruby-installation-unix.html

sudo yum install ruby    # CentOS, Fedora, 或 RHEL 系统
sudo apt - get  install ruby - full  # Debian 或 Ubuntu 系统
brew install ruby   #苹果系统

二:安装完ruby和gem之后,安装Capistrano

gem install capistrano



至此安装完成!

三:使用配置
     1.初始化项目,在项目最顶层目录执行命令
        
  cap install

结果如下:

生成的目录结构应该如下图:
下面是将应用部署在服务器端的设置。
服务器说明:
     阿里云服务器,公网IP:60.205.178.92

配置文件说明:   
config/deploy.rb 
这个配置文件包含所有环境(例如过渡环境和生产环境)的通用设置。
主要设置以下几个属性:
     :application 这是PHP应用的名称。只能包含字母、数字、下划线。   
     :repo_url 这是Git仓库的URL。这个URL必须指向一个Git仓库,而且远程服务器必须能够访问这个仓库。  (我的git仓库放在码云上 ,地址是:git@gitee.com:cpfe/test-cap.git)
     :deploy_to 这是远程服务器中一个目录的绝对路径,我们部署的PHP应用就存放在这个目录中。         (我的设置为 /var/www/my_app)
               :keep_releases 保留多少个旧版,以防想把应用回滚到之前的版本。             (我的设置是5)

          config/deploy/production.rb文件
                    这个文件只包含生产环境的设置,这个文件用于定义生产环境的角色。对于小型项目,我们的生产环境所使用的应用服务器和数据库服务器使用的是同一台服务器就是我们购买的阿里云服务器。所以此处只设置web角色,而且只有一个服务器属于这个角色。将 production.rb 这个文件的内容替换为下面的代码:

     role :web, %w{deploy@60.205.178.92}

注意:此时需要在远程服务器创建 deploy 用户并设置密码,并且创建一个存放部署的PHP应用的目录,并且使该用户拥有该目录的读写权限。
我设置是在 /var/www/my_app 目录存放应用的。
由于使用 Capistrano 自动部署的应用会创建符号链接,把 current/目录指向存放当前应用版本的目录。所以,需要更新web服务器的虚拟主机的文档根目录,指向 Capistrano 的 current 目录。

值得注意的是,部署之前必须在本地电脑和远程服务器之间,以及远程服务器和Git仓库之间建立认证。
     认证:
          本地服务器<--------------->远程服务器
          正常的访问远程服务器的方法是:ssh deploy@60.205.178.92,这个命令会要求输入deploy用户的密码,然后登陆服务器,我们可以禁用密码认证,加强安全。密码认证有漏洞,会受到暴力攻击,不怀好意的人会不断尝试猜测你的密码。使用ssh登录服务器时应该使用ssh密钥对认证。原理如下图:
如果要在多台电脑中登录远程服务器,或许不应使用ssh密钥对认证,如果想这么做,要在每台本地电脑中生成ssh密钥对,然后再把每个密钥对中的公钥复制到远程服务器中。遇到这种情况,最好使用安全的密码进行密码认证。然而,如果只通过一台本地电脑访问远程服务器,ssh密钥对认证是最好的方式。
创建 SSH  密钥对的方法是,在本地设备中执行下述命令,一路回车即可:

 ssh-keygen

密钥对生成之后,可使用scp(安全复制)命令复制公钥:
    
 scp ~/.ssh/id_rsa.pub deploy@60.205.178.92:

注意一定要在末尾加上:符号!这个命令会把公钥复制到远程服务器中deploy用户的家目录里。
接下来,一 deploy 用户的身份登录远程服务器。确认 ~/.ssh是否存在,如果不存在则创建:
     
mkdir ~/.ssh

然后执行下述命令:

touch ~/.ssh/authorized_keys

这个文件的内容是一系列允许登录这台远程服务器的公钥。执行下述命令复制公钥至该文件:

cat ~/id_rsa.pub >> ~/.ssh/authorized_keys

最后执行以下命令修改权限:

[deploy@iZ2ze6ey5vaxb4nhgemgfrZ ~]$ chown -R deploy:deploy ~/.ssh
[deploy@iZ2ze6ey5vaxb4nhgemgfrZ ~]$ chmod 700 ~/.ssh/
[deploy@iZ2ze6ey5vaxb4nhgemgfrZ ~]$ chmod 600 ~/.ssh/authorized_keys

再次在本地设备使用 ssh deploy@xxx.xxx.xxx.xxx访问远程服务器则无需输入密码!
注意:只有在存放私钥的本地设备中通过ssh登录远程服务器时才不用输入密码。


远程服务器 <--------------->Git仓库
     远程服务器和Git仓库的密钥认证同本地设置,将远程服务器的公钥添加至Git版本控制器中。具体操作见 Git 手册。参考 http://git.mydoc.io/?t=154712

在运行自动化部署命令之前:
     远程服务器不需要 Capistrano,但是需要 Git,而且还 需要运行PHP应用所需的全部软件
          Git 安装:
               Ubuntu:
                  
  sudo apt-get install git

               CentOS:

sudo yum install git


四:部署应用
     在终端中进入应用的最顶层目录,执行下述命令:
           
cap production deploy

会看到如下所示的进度:

五:回滚应用
     
cap production deploy:rollback


至此简单的应用自动化部署完成。但是对于我们很多的应用来说,都使用composer管理应用的依赖,所以我们可以使用Capistrano的钩子安装composer依赖,在config/deploy.rb 文件中添加下述Ruby代码:

Before / After Hooks:
在以下的状态前/后都可以进行一些操作:
deploy:starting (部署中)
deploy:started (部署已开始)
deploy:updating (正在更新服务器端文件)
deploy:updated (服务器端文件更新完毕)
deploy:publishing (服务器端正在切换当前版本)
deploy:published (服务器端当前版本已切换至最新版本)
deploy:finishing (正在处理一些收尾工作)
deploy:finished (一切就绪)


# Capistrano 使用的是语法(Rake语法)
# 命名空间是 deploy
namespace :deploy do
#  描述
    desc "Build"
# 服务器端文件更新完毕之后进行的操作
    after :updated, :build do
# 定义了这个任务需要哪些角色来执行,这里是web角色
        on roles(:web) do
# 在远端的指定文件夹里执行do-end里的内容。通常会用来跑服务器端的rake任务,因为rake任务通常需要在项目的根目录来跑。
            within release_path do
# 要执行的shell命令
                execute :composer, "install --no-dev --quiet"
            end
        end
    end
end


现在,每次部署到生产环境时都会安装应用的依赖。

本文参考:《Modern PHP》以及
Laravel学院也有相关文章,搜索“服务器部署篇”,共四篇,内容也大都是参考《Modern PHP》。




















  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值