您的位置:首页 > 编程语言 > PHP开发

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

2018-03-01 10:29 225 查看
官网:http://capistranorb.com一:安装准备:     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:在以下的状态前/后都可以进行一些操作:[align=left]deploy:starting(部署中)[/align][align=left]deploy:started(部署已开始)[/align][align=left]deploy:updating(正在更新服务器端文件)[/align][align=left]deploy:updated(服务器端文件更新完毕)[/align][align=left]deploy:publishing(服务器端正在切换当前版本)[/align][align=left]deploy:published(服务器端当前版本已切换至最新版本)[/align][align=left]deploy:finishing(正在处理一些收尾工作)[/align][align=left]deploy:finished(一切就绪)[/align]

# Capistrano 使用的是语法(Rake语法)# 命名空间是 deploynamespace :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    endend

现在,每次部署到生产环境时都会安装应用的依赖。
本文参考:《Modern PHP》以及
Laravel学院也有相关文章,搜索“服务器部署篇”,共四篇,内容也大都是参考《Modern PHP》。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  php 自动化部署