网上很多教程都是基于Ubuntu或centos做的,故此写下Win的教程,以备忘。
首先明确,Capistrano安装在本地设备中,部署应用(本文是php,不过它能被用来部署所有语言的程序)时,Capistrano会在本地设备中执行SSH命令,与远程服务器进行通信。Capistrano会在远程服务器中保存之前部署的应用,而且每次部署的版本放在各自的目录中,它能够维护五个或更多之前部署的应用,以防需要回滚到之前的版本。它创建一个名为current的目录,通过符号链接(软连接)到当前部署的应用所在的目录(即当前生产环境所使用的的应用目录)。在生产环境Capistrano管理的目录结构可能如下:
home/
deploy/
apps/
my_app/
current/
releases/
release1/
release2/
release3/
release4/
把新版应用部署到生产环境时,Capistrano 首先从应用的 Git 仓库或其他自定义的仓库获取最新版代码,然后把应用的代码放到 releases/
目录中的一个新子目录中,最后把 current/
目录的符号链接指向这个新目录。当需要 Capistrano 回滚到之前的版本时,Capistrno 会把 current/
目录的符号链接指向 releases/
目录中存档之前版本的目录。Capistrano 是一种优雅且简单的部署方案,能让 PHP 应用的部署过程变得简单、可预知和可逆。
一,安装Capistrano
Capistrano 应该安装在本地设备中,别在远程服务器中安装。安装时还需要 ruby 和 gem。OS X 系统已经有了。
Ubuntu 用户可以直接用下面的命令安装:
sudo apt-get install ruby
sudo apt-get install gem
Centos 可以使用
yum install ruby
yum install gem
本文使用windows安装,
1,先安装 ruby gem 环境:使用rubyinstaller官网推荐的配置即可,本文基于 Ruby+Devkit 2.6.3-1 (x64)
传统的win软件安装步骤,需要注意的是,如果只是为了使用Capistrano,不需要安装 MSYS2 system。
2,然后安装
$ gem install capistrano
capistrano地址:https://capistranorb.com/documentation/getting-started/installation/
3,安装 Capistrano 之后,为了使用 Capistrano,必须初始化项目。打开终端,进入项目的根目录,执行下面的命令:比如在:D:/basic,运行下面命令生成 Capistrano 的配置文件:
cap install
这个命令会创建 Capfile 文件,config/ 目录和 lib/ 目录。现在,项目目录结构应该如下所示:
Capfile
config/
deploy/
production.rb
staging.rb
deploy.rb
lib/
capistrano/
tasks/
注意如果项目下已存在config目录和lib目录会被合并。
Capfile 是 Capistrano 的中央配置文件,会聚合 config/ 目录中的配置文件。 config/ 目录中存放的是各个远程服务器环境(例如,测试环境、过渡环境或生产环境)的配置文件。
默认情况下,Capistrano 假设你为应用搭建了多个环境。例如,可能有单独的过渡环境和生产环境。Capistrano 在 config/deploy/
目录中为每个环境都提供了单独的配置文件。Capistrano 还提供了 config/deploy.rb
配置文件,这个文件用于保存所有环境通用的设置。
在每个环境中,Capistrano 会区分服务器的角色。例如,生产环境可能有前置 Web 服务器(web角色),应用服务器(app角色)和数据库服务器(db角色)。只有最大规模的应用才有必要使用这种架构,小型 PHP 应用一般在同一台设备中运行 Web 服务器(nginx)、应用服务器(PHP-FPM)和数据库服务器(MariaDB)。
这篇文章的例子中,我使用的是 web 角色,和生产环境的配置。
4,对于一般应用来说web服务只有一台服务器,有多台的情况一般也会有主从复制架构,所以本文按照单独服务器设置通用配置。
说明下config/deploy.rb文件
这个配置文件包含所有环境通用的配置。打开这个文件,然后更新下列设置:
- :application 这是 PHP 应用的名称。只能包含字母、数字和下划线。
- :repo_url 这是Git仓库的URL。这个URL必须指向一个Git仓库,而且远程服务器必须能访问这个仓库。
- :reploy_to 这是远程服务器中一个目录的绝对路径,我们不熟的PHP应用就存放在这个目录中,此时,该路径为:
/home/deploy/apps/my_app
。 - :keep_releases 保留多少个旧版,以便于应用的版本回滚。