Famio Liew
Application/Web Beginner
home
首页
bubble_chart
工具
keyboard_arrow_down
links
链接收藏
info
关于
assignment_late
苏ICP备15006533号-1
menu 绯末小筑 famio.CN

网站执行本体更新的方法

绯末 于 2018-09-09 11:44:42 发布

1 需要涉及到知识面

1.1:Git bash

1.2:Linux bash

1.3:后端语言的部分函数

2 大致原理

2.1:网站源码托管在Github

2.2:开发者迭代代码后,提交到Github仓库

2.3:通过web服务器端执行git pull命令,自动进行比对并拉取最新的修改内容

3 部署步骤

3.1 对Github仓库使用ssh方式交互

3.1.1 在终端中输入ls ~/.ssh确认下是否有以下两个文件:id_rsaid_rsa.pub。如果已经存在,就可以直接跳过本步骤。

3.1.2 如果不存在上述两个文件,我们就需要生成SSH Key。终端输入ssh-keygen -t rsa -C "www.famio.cn",一路回车,就会看到生成成功的提示。

    root@FAMIO-T470:/home/famio# ssh-keygen -t rsa -C "www.famio.cn"
    Generating public/private rsa key pair.
    Enter file in which to save the key (/root/.ssh/id_rsa):
    Enter passphrase (empty for no passphrase):
    Enter same passphrase again:
    Your identification has been saved in /root/.ssh/id_rsa.
    Your public key has been saved in /root/.ssh/id_rsa.pub.
    The key fingerprint is:
    SHA256:hNegC718i5EpHpTFrp1dGRGmZC9N/qchopkCpAcpOcI www.famio.cn
    The key's randomart image is:
    +---[RSA 2048]----+
    | .. + =o         |
    |.o +.= X.        |
    |BE. +.+ = =o     |
    |o= . o.B .o.     |
    |. o ooBoS.. o .  |
    | . o.ooB.o . +   |
    | o = . .         |
    | .               |
    |                 |
    +----[SHA256]-----+

其中-C后面跟着的是注释,不影响key本身,只是为了能让你更好的区分。

3.1.3 这时候,在~/.ssh路径下就有id_rsaid_rsa.pub两个文件了。我们现在要提取id_rsa.pub里面的公钥内容。 使用cat ~/.ssh/id_rsa.pub命令获取公钥:

    [root@famio-ecs ~]# cat ~/.ssh/id_rsa.pub
    ssh-rsa
    AAAAB3NzaC1yc2EAHGHFHETRYGRFCzDi8Fri876lURXrs9fnsQ3l8JDuad8JexD2sbyf82tS3WdxmEpNStx+P0MqMZliUkVkIvMHf+iX1nV4y3HZJqrxgIAQRfmrPbm8NvUg8gvJ3W7QLmQQkWza1EqhBp3C+fjuaCzNHBTBr0grihaWFUi6qw46OB8cmliiccoJkrEu3KyAlL12tLuNkfA4DnBx9QZ/SHlz14L6SHvDKwLwmOrVjie1PlSJ2Z4tEvzMWqcUBnu3FGSnGkkztd+SdpKVXCX65YSvQzpHMwDIV4/vx5M+/iE+1WbbqV3UQTUTmcKDmLARwH69gvx9v/JuwP8A8Bbeq0PYTsaljFQeU1NhwX
    ECS
    
3.1.4 登录你的Github,进入Settings-SSH and GPG keys,点击New SSH KeyTitle中随意填写,Key中填入刚才cat到的字符串。如下图:

网站执行本体更新的方法

3.1.5 使用SSH的方式clone项目:git clone git@github.com:yourname/project.git

如果已存在的项目,可以修改项目目录下的.git/config文件。url = git@github.com:yourname/project.git

3.1.6 此时再git pull一下,就会发现使用ssh进行交互了。

3.2 配置linux用户使用sudo的权限

3.2.1 一般来说,linux下的web服务器会使用www这个账户操作的,那么我们所谓在线更新实际上也是用的www这个账户。

在线更新的原理就是让后端语言执行一系列的linux bash命令来达到目的。所以这期间不能存在有交互性质的bash命令,比如sudo git pull会让你输入密码后才能继续执行bash

我们现在要做的就是取消www用户执行sudo命令时的密码提示。

3.2.2 在web服务器上执行cd ~进入主目录,再执行visudo打开sudo命令的配置文件。

3.2.3 找到root ALL=(ALL) ALL,再下面添加一行www ALL=(ALL) ALL

也就是下图:

网站执行本体更新的方法

3.2.4 这时候我们在www账户下执行sudo命令就不会有提示输入密码了,做到了免密码执行su权限的功能。

3.3 后端语言执行bash命令

3.3.1 我这里举例php,首先取消禁用exec函数。

3.3.2 exec('cd ' . $path . ' && sudo git pull 2>&1', $out);命令的意思就是先进入当前网站根目录,然后执行sudo git pull命令,并把结果返回给$out变量。

这样,我们就写完了一个网站本体更新的功能。可以利用exec函数,举一反三的执行bash命令,来达到想要的功能。

网站执行本体更新的方法