美文网首页
人/狗/码的日常 2021-07-08

人/狗/码的日常 2021-07-08

作者: 启发禅悟 | 来源:发表于2021-07-08 18:52 被阅读0次

好好休息,天天向上,继续调整状态。

自从有了昨天进空调房睡午觉的经验之后,今天中午我打算进房间睡觉的时候,酷奇竟然已经提前在空调风口下等着了,真是机灵鬼啊。

然后就是睡的好好的,突然酷奇大叫起来,原来打雷了,呃,打雷没把我打醒,你这是把我弄醒了,好吧,那就起来吧,安抚了他几句,总算不闹腾了。

今天遇到了八楼的柯基姐姐,然后发现柯基姐姐竟然被剃毛了,然后主人大姐还一个劲的推荐我们也去把毛剃了,说狗狗太热了,剃了毛凉快,也不容易招惹虫子。我只能呵呵一笑了。

这里正好科普下,狗狗的毛有隔热,防虫的效果的,所以除非是皮肤病需要剔除,否则不建议剃毛哦。

早上的时间都花费在hexo如何自动部署到自己的服务器了。

之前用hexo+github搞了一个博客,不过有今年没有更新了。正好,隐私政策/用户协议这些放在简书上不太合适,所以就决定把这些内容放到自己的网站上去。

hexo+github的环境是OK的。所以,现在新发布一篇博客是非常容易的。

博客本地的开发目录在:/Users/xuefengchen/inspirelifedaily/

那么新建一篇博客并发布大致就是如下:

cd /Users/xuefengchen/inspirelifedaily/inspirelife96.github.io
hexo new '文件名,不用包含后缀MD' // 创建文件,然后编辑
hexo g // 生成
hexo d // 部署

那么访问inspirelife96.github.io自然能查看到更新后的内容。

不过服务器上并没有更新,由于之前没有做自动部署,每次都是手动更新的。

大致的思路就是,在服务器端,重新下载github的网站的代码。

cd /home/inspirelife/blog
git clone https://github.com/Inspirelife96/inspirelife96.github.io.git
rm -rf ./blog
sudo cp -r inspirelife96.github.io/* ./public/

nginx的配置在这里,目前http都直接转https,https的root设置了/home/inspirelife/blog/public

cd /etc/nginx/sites-enabled/default

今天尝试做的就是利用github的webhook实现自动部署。

原理很简单。
首先我们看最终的目的:就是每当客户端执行hexo -d之后,提交所有的修改到Github,而服务器端的仓库能够执行git pull来自动更新。而工具就是github提供的webhook。

github提供的webhook原理上就是当接受到一个push之后,去触发某一个URL调用。

所以服务器这边需要提供一个URL调用的服务,而这个服务最终是要调用git pull来实现代码的自动更新。

//webhook.js
var http = require('http')
var createHandler = require('/usr/lib/node_modules/github-webhook-handler')
var handler = createHandler({ path: '/', secret: '226713' })

function run_cmd(cmd, args, callback) {
    var spawn = require('child_process').spawn;
    var child = spawn(cmd, args);
    var resp = "";
    child.stdout.on('data', function(buffer) { resp += buffer.toString(); });
    child.stdout.on('end', function() { callback (resp) });
}

http.createServer(function (req, res) {
    handler(req, res, function (err) {
        res.statusCode = 404
        res.end('no such location')
    })
}).listen(7777)

handler.on('error', function (err) {
    console.error('Error:', err.message)
})

handler.on('push', function (event) {
    console.log('Received a push event for %s to %s',
                event.payload.repository.name,
                event.payload.ref);
    run_cmd('sh', ['./deploy.sh',event.payload.repository.name], function(text){ console.log(text) });
})

这段代码的意思,大致就是创建了一个http://inspirelife2017.com:7777的服务,当为push时,执行当前目录下deploy.sh的脚本。

来看看deploy.sh的脚本

#!/bin/bash
# 网站的根目录
WEB_PATH='/home/inspirelife/blog/inspirelife96.github.io'
 
echo "start deployment" 
cd $WEB_PATH
echo $(pwd) echo $(date) echo $(whoami)
echo "fetching from remote..."
#echo $(git fetch --all)
#echo $(git reset --hard origin/master) 
echo $(git pull)
echo "done"

目的也很明确,就是到/home/inspirelife/blog/inspirelife96.github.io的目录下,执行git pull命令更新仓库。

所以,当服务器端执行 node webhook.js 激活服务之后,再配上Github上的配置

截屏2021-07-08 下午5.47.07.png

所有的通路就会打开

具体如何配置,可以参考这篇文章的服务器配置部分搭建hexo博客:阿里云+github+域名+自动部署webhook

当然这中间自己也添了不少坑,主要是自己服务器的功底不够,所以都是倒推着来测试的,流程大概是这样的:

首先是git的配置,这个应该没有什么问题
先确认git已经安装

git -version

配置github

git config --global user.name “xxxxxx” # 自行替换
git config --global user.email “xxxxxx@xx.com” # 自行替换

生成密钥:

ssh-keygen -t rsa -b 4096 -C "your_email@example.com" # 你的 GitHub邮箱地址

一直enter即可,最后看到密钥的image即可
此时~/.ssh文件夹下就会生成id_rsa(私有秘钥)和id_rsa.pub(公有密钥),将公钥复制带粘贴板
进入github->setting->SSH and GPG keys->new SSH key粘贴进入,Title随意取

完成后测试配置是否成功

ssh -T git@github.com
Hi xxxx! You've successfully authenticated, but GitHub does not provide shell access.

在服务器端新建一个文件目录存放博客代码

cd $HOME
mkdir Blog 
cd Blog
git clone git@github.com:yourname/hexo.git # 自行替换为用于存放博客代码的仓库ssh地址

Nginx的配置目录

/etc/nginx/sites-enabled/

在配置文件中,需要将root设置为刚git clone的目录,例如

server {
        listen 443;
        server_name inspirelife2017.com;

        root /home/inspirelife/blog/inspirelife96.github.io;
        index index.html index.htm;

        ssl on;
        # Use certificate and key provided by Let's Encrypt:
        ssl_certificate /etc/letsencrypt/live/inspirelife2017.com/fullchain.pem;
        ssl_certificate_key /etc/letsencrypt/live/inspirelife2017.com/privkey.pem;
...

修改完后需要重启nginx

sudo service nginx stop
sudo service nginx start

调试的过程

  • 服务器端确认git pull能够执行成功
  • 服务器端确认执行 . deply.sh能够成功更新仓库
  • 服务器端执行 node webhook.js,
  • 客户端执行下面脚本,触发webhook
hexo new '文件名,不用包含后缀MD' // 创建文件,然后编辑
hexo g // 生成
hexo d // 部署
  • 确认github仓库对应的setting/webhook中,对应的Deliveries执行成功


    截屏2021-07-08 下午6.16.14.png
  • 同时,服务器端,node执行界面会出现相应的log内容

最后再考虑PM2的问题

pm2 start webhook.js

这边今天遇到一个大坑,执行pm2失败,看上去是权限问题,所以我就简单的用了

sudo pm2 start webhook.js

pm2执行成功,且deply.sh也执行了,唯独奇怪的是,git pull执行之后没有反应,服务器端端仓库并没有更新。

这个问题花费了我大概一个小时,也没查出来是啥原因。

后面是重启了服务器就执行成功了。

所以,如果有奇怪的问题,或许重启也是一种解决方案。

此外,如果遇到类似这种github无法访问的问题,再尝试几次吧,多数是网络的问题。

Error: fatal: 无法访问 'https://github.com/xxxxx/':LibreSSL SSL_read: SSL_ERROR_SYSCALL, errno 60

相关文章

  • 人/狗/码的日常 2021-07-08

    人 好好休息,天天向上,继续调整状态。 狗 自从有了昨天进空调房睡午觉的经验之后,今天中午我打算进房间睡觉的时候,...

  • 人/狗/码的日常 - 开篇

    参加简书的日更,先给自己定个小目标吧,坚持三天。 没啥写作技巧,也不是写什么故事,小说,散文,存粹就是日记,来鼓励...

  • 人/狗/码的日常 2021-04-28

    人 今天爱人休息,所以就可以美美的吃上一顿了。自从病情控制以来,就有抑制不住的想吃东西的欲望,老觉得饿。 狗 今天...

  • 人/狗/码的日常 2021-05-01

    发现要每天坚持写一些东西,还是挺困难的。佩服那些能坚持日更1000+的人。 回想起小学的老师给过我的一句评语,没有...

  • 人/狗/码的日常 2021-04-30

    今天花费了一天的时间在某些不值得的事情上,所以基本上就是碌碌无为了。 人 天气渐渐热了,这对我来说是非常不错的事。...

  • 人/狗/码的日常 2021-05-02

    恭喜自己完成日更7天的任务。 人 药吃完了,所以今天不得不出门去买药。尚杰这些年来降了不少,从原先的2500+到现...

  • 人/狗/码的日常 2021-05-04

    今天上海阴雨绵绵,妖风阵阵。由于建筑方位的问题,每次这种天气,总会有呼啸声。 人 I let algorithms...

  • 人/狗/码的日常 2021-05-05

    不知道大家花在日更上的时间会是多少,可能30-60分钟是个合适的区间吧。 人 对于普通人来说,宇航员是探索者,是英...

  • 人/狗/码的日常 2021-05-03

    我们小区的生态环境是越来越好了,回想12年前刚住进来的时候,那还是光秃秃的草坪和没有枝叶的小树,现在变的郁郁葱葱了...

  • 人/狗/码的日常 2021-04-27

    知识产权 突然发现之前自己收藏的不少技术文章的内容都消失了,一部分变成了404,一部分变成了平台审核。可见现在对知...

网友评论

      本文标题:人/狗/码的日常 2021-07-08

      本文链接:https://www.haomeiwen.com/subject/fcytpltx.html