前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >以瓦利程序聊一聊DevOps以及自动化部署(一)

以瓦利程序聊一聊DevOps以及自动化部署(一)

作者头像
needrunning
发布2020-04-08 15:49:20
1.3K0
发布2020-04-08 15:49:20
举报
文章被收录于专栏:图南科技图南科技

瓦利[1]是一款开源的 DevOps 代码自动部署工具,目前官方有两个新旧版本,分别是基于 PHP2 和 Python。

本文以旧版 YII2 为主线,结合 SSH 协议聊一聊代码自动化部署,服务器互认和文件传输的相关话题。

Linux 服务器间建立信任关系

“远程部署代码的前提是服务器之间已经建立了信任关系,用已有的账号可以实现服务器节点的登录,授权。

SSH 协议是 Linux 机器间建立信任关系的一种实现方式。

SSH 信任关系,是指一台服务器上的一个用户信任客户端的一个用户,通过安全级别的设置,允许这个用户不输入密码登录。

另一个说法叫做 public_key_auth,整个过程实际上就是证书信任。

主机间相关信任 ,建立免密码登录

“SSH 主机间信任的方式有两种,1 用户名密码登录 2 公钥认证登录

如果设置了无口令 SSH 登录(即通过客户端公钥认证),就可以直接连接到远程主机。这是基于 SSH 协议的自动化任务常用的手段。

无密码登录是通过 authorized_keys 实现的。

authorized_keys 是一个远程服务器文件,可以实现两个 Linux 机器之间使用 SSH 不需要用户名和密码.客户端公钥上传到服务器,然后再把这个客户端公钥添加到 authorized_keys。添加后,服务器就会认为你这个客户端为可信任。

“主机间模型

两台主机 IP

Server01 ,充当宿主服务器角色

Server02,充当目标服务器角色

查看 php-pfm 运行用户

ps aux|grep php

apache

“php 进程用户 apache 有代码存储仓库 /code/www_walle 读写权限

chown -R apache www_walle

实现信任之后,设 主机 01 和 02 账户都是 root, 在远程主机 01 上就以 ssh root@Server02 的方式登录,此时不需要输入 root 用户的密码。

具体的设置步骤 参考

SSH 三步解决免密登录[2]

小结一下 有以下几点

  • SSH 的公私钥设置 authorized_keys id_rsa id_rsa.pub known_hosts
  • 登录用户分配和授权
  • 重点目录授权 .ssh 目录的权限必须是 700 .ssh/authorized_keys 文件权限必须是 600

瓦利部署

图片.png

结合上图,明确几个概念

“宿主机

宿主机:即 walle 程序所在的机器。

“目标机群

目标机群:即应用服务器集群

首先通过 SSH 公钥创建和管理实现宿主机与目标服务器的通讯,可以实现代码拉取。

其次 宿主服务器与目标服务器通过 authorized_keys 实现代码文件的复制和同步。

整个过程源于信任,基于信任做文件传输。

重点解决及相关疑问

“宿主机可以访问应用服务器目标主机

参考Walle 官方问题解答[3]SSH 免密登录配置[4]

“1 两台 Linux 主机相互信任问题

登录账户需要用户名和密码,使用 SSH 并且相互信任后,区别在于登录过程中是否需要输入密码

“2 是否需要开启 StrictHostKeyChecking=no

使用 ssh 连接远程主机时加上“-o StrictHostKeyChecking=no”的选项,去掉对主机的验证检查。

'ssh -T -p 22 -q -o UserKnownHostsFile=/dev/null -o StrictHostKeyChecking=no -o CheckHostIP=false 'root'@'ip.' 'mkdir -p /code/release/4/20200131-014152' 2>&1'

参考网址

The authenticity of host xxx can't be estabilished[5]

“3 宿主主机用的哪个用户登录目标主机?

使用目标机器的用户登录目标机器,只是不需要提示和输入密码。这个登录用户是由登录服务器分配好的。

“4 如何让连接新主机时,不进行公钥确认?

这个问题与第二个问题呼应。在首次连接服务器时,会弹出公钥确认的提示,这会导致某些自动化任务,由于初次连接服务器或者 ~/.ssh/known_hosts 文件内容清空导致自动化任务中断。

SSH 客户端的 StrictHostKeyChecking 配置指令,可以实现当第一次连接服务器时,自动接受新的公钥。只需要修改 /etc/ssh/ssh_config 文件,包含下列语句:

常用命令

基于 CentOS7

“重启 ssh 服务

systemctl restart sshd.service

“修改 user 登录密码

passwd user

“生成公钥

ssh-keygen -t rsa -C "apacheemail@qq.com"

“Git log 输出格式化 git log --graph --pretty=format

Mac 操作

打开终端查看是否已经存在 SSH 密钥:

cd ~/.ssh

显示

authorized_keys

id_rsa

id_rsa.pub

known_hosts

三个文件

https://git-scm.com/

git remote prune origin

secure copy

scp 是 secure copy 的简写,用于在 Linux 下进行远程拷贝文件的命令

文件从本地拷贝到服务器指定目录

$scp -r localfile.txt username@192.168.0.1:/home/username/

账户问题

在拿到 一台虚拟机之后,如果使用 Yum 安装 PHP(7.2),参考我的另一篇文章[使用 Yum 安装 PHP72],安装完成之后 系统会自动建立一个 apache 账户。以 apache 运行 PHP 服务

上文中提到

查看 php-pfm 运行用户

ps aux|grep php
apache

宿主节点与 Git 代码仓库依赖的是 登录宿主节点的 PHP 运行用户。用户权限设置不准确,会造成代码 Git 下载失败。

php运行用户.png

以下是常见的错误

“Host key verification failed

array(5) {
  [0]=>
  string(29) "Host key verification failed."
  [1]=>
  string(45) "fatal: Could not read from remote repository."
  [2]=>
  string(0) ""
  [3]=>
  string(51) "Please make sure you have the correct access rights"
  [4]=>
  string(26) "and the repository exists."
}

本质原因是 执行 PHP 的用户,即运行瓦利程序的用户 与代码仓库的 SSH 协议验证失败。解决方法是 建立 SSH 公钥,并在代码仓库方设置

基于 SSH 信任关系扩展到数字证书

信任源

一个认证中心是以它为信任源,由它维护一定范围的信任体系,在该信任体系中的所有用户、服务器,都被发放一张数字证书来证明其身份已经被鉴定过,并为其发放一张数字证书,每次在进行交易的时候,通过互相检查对方的数字证书即可判别是否是本信任域中的可信体。

CA

CA (Certificate Authority) :全称证书管理机构,即数字证书的申请、签发及管理机关。其主要功能为:产生密钥对、生成数字证书、分发密钥、密钥管理等。

数字证书

以下定义来自知乎

数字证书:是由 CA 机构颁发的证明(CA 证书),它包含了公钥、公钥拥有者名称、CA 的数字签名、有效期、授权中心名称、证书序列号等信息。我们可以通俗的理解为数字证书是个人或企业在网络上的身份证。

结论

在整个 DevOps 中涉及到几个服务器角色,宿主服务器,目标服务器,和代码仓库服务器。

代码部署过程中的服务器间交互要分清楚,每次的客户端和服务器分别是谁。

例如 拉取代码过程中,就是宿主服务器的 PHP 运行用户与目标服务器(Git 服务器)在连接通讯。

针对基于瓦利的代码部署方案抽象下来的关键点就是 用户,权限,代码部署步骤,进而实现自动化。主要涉及到 Git/SVN 仓库,SSH,PHP 进程,SCP 等。

自动化部署以及 DevOps 解决方案 是一个比较重的话题,很难用一篇文章,甚至几篇文章讲明白。

这个话题我会在后边的文章中继续探讨,本文算是一个开篇,文中有不严谨的地方欢迎留言探讨。

参考资料

[1]

瓦利: http://www.walle-web.io/

[2]

SSH 三步解决免密登录: https://blog.csdn.net/jeikerxiao/article/details/84105529

[3]

Walle 官方问题解答: http://walle-web.io/docs/troubleshooting.html

[4]

SSH 免密登录配置: http://walle-web.io/docs/troubleshooting.html

[5]

The authenticity of host xxx can't be estabilished: https://segmentfault.com/q/1010000006670515

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-04-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 图南科技 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • Linux 服务器间建立信任关系
  • 主机间相关信任 ,建立免密码登录
  • 瓦利部署
  • 重点解决及相关疑问
  • 常用命令
  • Mac 操作
  • secure copy
  • 账户问题
  • 以下是常见的错误
  • 基于 SSH 信任关系扩展到数字证书
    • 信任源
      • CA
        • 数字证书
        • 结论
          • 参考资料
          相关产品与服务
          专用宿主机
          专用宿主机(CVM Dedicated Host,CDH)提供用户独享的物理服务器资源,满足您资源独享、资源物理隔离、安全、合规需求。专用宿主机搭载了腾讯云虚拟化系统,购买之后,您可在其上灵活创建、管理多个自定义规格的云服务器实例,自主规划物理资源的使用。
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档