想法(不看也罢)

近期准备使用宝塔部署博客,部署如果还要手动拉取太浪费时间,还是自动同步才是最好的选择,这里分享一个用webhook实现自动部署的插件,实现自动部署,感谢 @xinpro 的支援,现在在准备迁移工作,由于现用的域名被拿去备案了,现在用的是备用域名(话说我域名有点多啊),在GitHub上使用是可以,不过因为是静态部署的,没办法搞cdn加速,虽然优化了几次,虽然速度提升上去了,但还是到达不了心里面的要求,心里最低要求加载速度要在3s以内才合格,等迁到宝塔后,进行各种各样的优化,提示访问速度。

准备工作

  1. 安装宝塔(废话)
  2. git
  3. 本地安装hexo

本地安装Hexo

这里就不叙述了,布置过程网上有很多,也可以看我的教程。

  1. 搭建个人博客(一)
  2. 搭建个人博客(二)
  3. 搭建个人博客(三)

安装宝塔面板

  1. 今日到你自己的控制台找到自己的服务器,选择登录

  2. 创建宝塔面板

    • 官网地址:宝塔官网
    • 点击Linux,点击安装,找到Centos(推荐)安装。
    • 在终端输入安装指令:
      1
      yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh
    • 等待安装完毕,记住登陆网址、用户名和密码。
  3. 登录宝塔面板

    • 在浏览器里输入 外网面板地址 ,然后输入用户名密码
    • 登录后选择推荐即可
  4. 在等待安装的过程中,在左侧→面板设置栏目里面,修改登陆地址、用户名和密码,方便自己记录。

  5. 添加自己的域名。

宝塔安装git

本地的就不说了,如果需要的可以看本地部署教程,这里介绍宝塔安装git。

  1. 打开你的终端。

  2. 进入到管理员账号(好像是默认的)。

    1
    sudo su root
  3. 安装git

    1
    yum install git
  4. 查看git版本。

    1
    git version
  5. 将项目拉取到你的服务器上。

    1
    git clone <url> //在你的项目路径下执行,使用ssh链接比较好

配置SSH公共密钥

  1. 配置SSH公共密钥,让宝塔有访问GitHub权限

    1
    ssh-keygen -t rsa // 一直回车
  2. 查看并获取SSH公钥

    1
    cat ~/.ssh/id_rsa.pub
  3. 配置到GitHub仓库,部署公钥settings>keys

  4. 宝塔安装webhook

  5. 执行脚本(注意更改)
    执行脚本如下,有两处须要批改 gitPath=”/www/wwwroot/$1”(留神你的阿里云文件门路,如果不一样须要批改) gitHttp=”https://gitee.com/yourname/$1.git(留神你的近程仓库地址,肯定要改) .env.test这个根据环境改成对应的,比如正式环境改成.env.www,具体请看下面的文章解说在webhook里面添加一个钩子执行脚本如下:

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    #!/bin/bash
    echo ""
    #输出当前时间
    date --date='0 days ago' "+%Y-%m-%d %H:%M:%S"
    echo "Start"
    #判断宝塔WebHook参数是否存在
    if [ ! -n "$1" ];
    then javascript:;
    echo "param参数错误"
    echo "End"
    exit
    fi
    #git项目路径($1是param后面的参数,指向你的服务器的目录)
    gitPath="/www/wwwroot/$1"
    #git 网址 (替换成你的git地址,可选择https方式或者ssh方式)
    gitHttp="https://gitee.com/yourname/$1.git"

    echo "Web站点路径:$gitPath"

    #判断项目路径是否存在
    if [ -d "$gitPath" ]; then
    cd $gitPath
    #判断是否存在git目录
    if [ ! -d ".git" ]; then
    echo "在该目录下克隆 git"
    sudo git clone $gitHttp gittemp
    echo "切换develop分支"
    sudo git checkout develop
    echo "移动+删除文件夹"
    sudo mv gittemp/* .
    sudo mv gittemp/.[^.]* .
    sudo rm -rf gittemp
    else
    echo "切换develop分支"
    sudo git checkout develop
    echo "更新文件"
    sudo git checkout .
    sudo git pull origin develop
    sudo git fetch -p
    fi
    echo "配置文件"
    sudo cp .env.test .env
    echo "设置目录权限"
    sudo chown -R www:www $gitPath
    echo "End"
    exit
    else
    echo "创建目录"
    sudo mkdir $gitPath
    cd $gitPath
    echo "在该目录下克隆 git"
    sudo git clone $gitHttp gittemp
    echo "切换develop分支"
    sudo git checkout develop
    echo "移动+删除文件夹"
    sudo mv gittemp/* .
    sudo mv gittemp/.[^.]* .
    sudo rm -rf gittemp
    echo "配置文件"
    sudo cp .env.test .env
    echo "设置目录权限"
    sudo chown -R www:www $gitPath
    echo "End"
    exit
    fi

代码中的.env解说

传统正式环境和测试环境比如数据库配置不一样,可能我们需要两套配置 像以上代码有测试配置文件.env.test,推送后会自动复制为.env,正式环境钩子代码自行修改下改成 .env.www 这样的好处不管是否正式或者测试环境,只需要配置多个.env,这样代码不需要任何修改即可运行正式或测试环境