使用 Capistrano 进行自动化部署

栏目: Ruby · 发布时间: 7年前

内容简介:最近在折腾这个,弄了好多次都不成功,看了我的博客链接:首先是安装,其实 Ubuntu 上面安装 Capistrano 非常简单:

最近在折腾这个,弄了好多次都不成功,看了 官方文档 和很多博客,都没有说清楚,因此,我觉得有必要把它记录下来,以帮助更多像我这样被弄得烦躁的人。

我的博客链接: 使用_Capistrano_进行自动化部署

首先是安装,其实 Ubuntu 上面安装 Capistrano 非常简单:

gem install capistrano

然后,进入项目目录,运行下面命令生成 Capistrano 的配置文件:

cap install

这个命令会创建下面这些文件:

Capfile
config/
    deploy/
        production.rb
        staging.rb
    deploy.rb
lib/
    capistrano/
        tasks/

config 中存放的的各个环境的配置文件,而我,就是在配置这个的时候产生的问题。

deploy 文件配置如下:

# config valid for current version and patch releases of Capistrano
lock "~> 3.11.0"

set :application, "KFB"
set :repo_url, "git@<my-server-1>:<my-account>/<my-project>.git"

# Default branch is :master
# ask :branch, `git rev-parse --abbrev-ref HEAD`.chomp
set :branch, "dev"

# Default deploy_to directory is /var/www/my_app_name
set :deploy_to, "/home/KFB-API"

staging.rb 文件如下:

# server-based syntax
# ======================
# Defines a single server with a list of roles and multiple properties.
# You can define all roles on a single server, or split them:

# server "example.com", user: "deploy", roles: %w{app db web}, my_property: :my_value
# server "example.com", user: "deploy", roles: %w{app web}, other_property: :other_value
# server "db.example.com", user: "deploy", roles: %w{db}

# role-based syntax
# ==================

# Defines a role with one or multiple servers. The primary server in each
# group is considered to be the first unless any hosts have the primary
# property set. Specify the username and a domain or IP for the server.
# Don't use `:all`, it's a meta role.

# role :app, %w{deploy@example.com}, my_property: :my_value
# role :web, %w{user1@primary.com user2@additional.com}, other_property: :other_value
# role :db,  %w{deploy@example.com}
role :web, %w{<my-user>@<my-server>}

就配置这一行就可以了。按照注释所说,它有两种方式配置,但其实都只干了一件事,就是配置部署服务器。

我之前错误就是在这里配了两个设置,然后执行

cap staging deploy

时始终会报这几个错:

#错误一:fatal: unable to access 'http://<my-server>/<my-account>/<my-project>.git/': The requested URL returned error: 500
#错误二:fatal: repository 'http://<my-server>/<my-account>/<my-project>.git/' not found
#错误三:Net::SSH::AuthenticationFailed: Authentication failed for user <my-user>@<my-project>
#错误四:Permission denied (publickey,password)

发生错误根本原因有两个,一个是本地连接远程服务器不通,第二个是远程服务器连接 Git 服务器不通,因为 Capistrano 的运行原理就是从本地连接远程服务器,然后在远程服务器上执行 Git 命令,克隆最新代码到远程服务器的发布目录上面。这里都是使用的 ssh key 的方式进行连接。

本地连接远程服务器不通,可以参考 设置_SSH_Key_登录服务器和_Git_服务器 在本地生成两个 Key,把公钥放服务器上,私钥放本地。这里还有一个坑,如果你在生成密钥文件时指定了文件名的话,那是不能直接使用的,具体如何使用我暂时没弄清楚,所以直接使用默认的文件名 id_rsa 就行啦。

对于连接 Git 服务器的问题,此时的 Git 服务器是用 Gitlab 搭建的一个项目,可以通过 Web 访问;用上面同样的方法生成两个 Key,公钥在 Gitlab 中的个人设置中(下图)设置,私钥放在远程服务器访问 Git 服务器的用户目录的 .ssh/ 目录下面。

使用 Capistrano 进行自动化部署

配置完之后,可以先用 git clone git@<my-server>:<my-account>/<my-project>.git 测试一下,正常的话应该能直接克隆项目而不需要再输入密码了。

最后全部配置好了之后,再运行

cap staging deploy

输出一大堆命令,最后显示成功。根据先前的设置,自动部署之后的远程服务器上的代码目录结构是这样的:

KFB-API/
    revisions.log
    releases/
        0180703070947/
            # 这里是项目的具体内容,相当于原来的 KFB-API/ 下面的内容
    current/ -> ./releases/20180703070947
    repo
    shared

以上所述就是小编给大家介绍的《使用 Capistrano 进行自动化部署》,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对 码农网 的支持!

查看所有标签

猜你喜欢:

本站部分资源来源于网络,本站转载出于传递更多信息之目的,版权归原作者或者来源机构所有,如转载稿涉及版权问题,请联系我们

Think Python

Think Python

Allen B. Downey / O'Reilly Media / 2012-8-23 / GBP 29.99

Think Python is an introduction to Python programming for students with no programming experience. It starts with the most basic concepts of programming, and is carefully designed to define all terms ......一起来看看 《Think Python》 这本书的介绍吧!

XML、JSON 在线转换
XML、JSON 在线转换

在线XML、JSON转换工具

HEX HSV 转换工具
HEX HSV 转换工具

HEX HSV 互换工具

HSV CMYK 转换工具
HSV CMYK 转换工具

HSV CMYK互换工具