利用git+hugo+markdown 搭建一个静态网站

一直想要有一个自己的文档管理系统:

  1. 可以很方便书写,而且相应的文档很容易被分享
  2. 很方便的存储、管理、历史记录
  3. 比较方面的浏览和查询

第一点用Makrdown来写文档是一个非常好的选择,第二点自然想到了git,

第三点用一个静态的网站来浏览和管理是一个不错的选择,这里选择了hugo。

Hugo是由Go语言实现的静态网站生成器。 注意是生成器。他虽然自带webserver,但是没有Nigix强大了。

他能非常方便的把markdown文件转换为html。

如何搭建

首先必须有一台服务器,我选择了阿里云。然后:

第一步: 安装hugo

  1. 首先检查系统的版本:cat /proc/version
  2. 直接用 sudo yum install hugo 发现不行,只能选择本机安装了
  3. 当然发现少了一个能上传的客户端: yum install lrzsz
  4. 因为是radhat,用hugo-0.16-2.el6.x86_64.rpm 包,然后sudo yum install hugo-0.16-2.el6.x86_64.rpm

第二步: 开始创建站点

  1. hugo new site hub_site
  2. cd hub_sit
  3. 安装皮肤: cd themes; git clone https://github.com/key-amb/hugo-theme-bootie-docs.git themes/bootie-docs

    也可以本地上传
  4. 编辑: config.toml
  5. 加一个主页: _index.md
  6. 加一个 about页面: hugo new post/about.md
  7. 启动:hugo server --buildDrafts -p 8080 --bind ip -b http://ip:8080/

这时候我们就可以看到第一个页面了。

第三步:和github结合起来

利用git来管理文档是一个非常好的方式。这里直接想到用github来存储文档。gitbhu支持收到push请求的时候调用固定的地址http。

所以我们可以用这个来实现完美的功能。

首先在github上配置请求:settings->Webhooks

然后我们要在外面的服务器上搭建一个Http服务器来接受这个请求, 这里选择用python的import http.server来搭建,简单方便:

class EntranceHttpRequestHandler(http.server.CGIHTTPRequestHandler):

    def do_POST(self):
print('begin') if __name__=='__main__':
handler = EntranceHttpRequestHandler.EntranceHttpRequestHandler
httpd = socketserver.TCPServer(("", 8001), handler)
httpd.serve_forever()

第四步 用python把整个链路连接起来

import http.server
import Convertor
import os
import _thread TargetPath = "/root/root/site/content/post/blog"
GitSrcPath = "/root/root/site/blog"
HugeSitePath = "/root/root/site/"
HugeStatCommond = r'hugo server --buildDrafts -p 80 --bind 115.28.83.94 -b http://115.28.83.94/'
class EntranceHttpRequestHandler(http.server.CGIHTTPRequestHandler): def do_POST(self):
print('begin') self.gitpull(GitSrcPath) self.stopHugo() convert = Convertor.Convertor()
convert.excute(GitSrcPath,TargetPath)
self.startHugo()
print("finished")
self.wfile.write(b"msg finished") def gitpull(self, filePath):
os.chdir(filePath)
command = "git pull "
os.system(command) def startHugo(self):
_thread.start_new_thread(self.doStartHugo, ()) def doStartHugo(self):
os.chdir(HugeSitePath)
output = os.system(HugeStatCommond)
print(output)
print('sartHugo finished') def stopHugo(self):
command = 'kill -9 $(pidof hugo)'
os.system(command)
print('stopHugo finished')

其中Convert 是对文档做一些分类和tag的转换不详细介绍。

到现在一个完整的网站就搭建完成了,每一次只要在本地push文档,就能在网站上自动更新。

完整代码看这里

利用git+hugo+markdown 搭建一个静态网站的更多相关文章

  1. 利用vue-cli配合vue-router搭建一个完整的spa流程

    好文章备忘录: 转自:https://segmentfault.com/a/1190000009160934?_ea=1849098 demo源码:https://github.com/1590123 ...

  2. express + mongodb 搭建一个简易网站 (四)

    express + mongodb 搭建一个简易网站 (四) 目前网站整体页面都已经能全部展示了,但是,整个网站还有两个块需要做完才能算完整,一个连接数据库,目前网站上的数据都是抓取的本地假数据,所以 ...

  3. express + mongodb 搭建一个简易网站 (三)

    express + mongodb 搭建一个简易网站 (三) 前面已经实现了基本的网站功能,现在我们就开始开搞一个完整的网站,现在整个网站的UI就是下面的这个样子. 我们网站的样子就照着这个来吧. 1 ...

  4. 利用Wamp在本地搭建一个wordpress站点

    原文链接:利用Wamp在本地搭建一个wordpress站点 有时候我们会想搭建一个自己的站点,可是由于只是想自己访问,就不是很想为这个站点在买一个服务器和域名,那我们可能首先就想到把自己电脑当做服务器 ...

  5. 从零开始,在windows上用nodejs搭建一个静态文件服务器

    从零开始,在windows上用nodejs搭建一个静态文件服务器 首先安装nodejs: 新建一个node文件夹 下载node.exe到该文件夹 下载npm然后解压到该文件夹 现在node文件夹是这样 ...

  6. express + mongodb 搭建一个简易网站(二)

    express + mongodb 搭建一个简易网站 (二) 在搭建网站(一)中,实现了简单的路由功能,这离一个完整的网站还差的有点远,继续撸代码吧. 1.首先在根目录下新建一个views文件夹,用来 ...

  7. express + mongodb 搭建一个简易网站(一)

    express + mongodb 搭建一个简易网站(一) 前言:后台使用node.js的express框架,数据库使用mongodb,模板使用ejs.大概就这些. 开始第一个简易网站之旅吧.... ...

  8. 搭建一个wordpress网站需要做哪些工作

    今天做了自己的个人网站:二飞日志 之前因为服务器的问题,因为备案的原因辛辛苦苦做的站点数据没了.还好的是没有多少数据.没关系,重新来.有了上一次的经验,这次搭建起来比较顺手.但是也出现了几个问题.下面 ...

  9. Python Flask搭建一个视频网站实战视频教程

    点击了解更多Python课程>>> Python Flask搭建一个视频网站实战视频教程 第1章 课程介绍 第2章 预备开发环境 第3章 项目分析.建立目录及模型规划 第4章 建立前 ...

随机推荐

  1. ZeroMQ接口函数之 :zmq_msg_size - 以字节为单位返回消息内容的大小

    ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_msg_size zmq_msg_size(3)  ØMQ Manual - ØMQ/3.2.5 Name zmq ...

  2. Struts2基础数据校验和框架校验

    一:三种校验的方式 1.用validate()方法实现数据校验 2.用execute()方法实现数据校验 3.用validateXxx()方法实现数据校验 1.用validate()方法实现数据校验 ...

  3. 试验添加RAC(ORA10G)节点

    删除一个RAC节点:http://www.cnblogs.com/myrunning/p/4548624.html 1.1安装CLUSTERWARE软件 备注:在做添加删除节点时,10G版本一定要注意 ...

  4. 对比SerialCommunication和微软的SerialPort,向SerialPort看齐

    SerialCommunication是我综合网上看到的代码稍作修改而成的串口通信类,而SerialPort则是C#的System类库的IO目录Ports子目录下的串口通信类.SerialCommun ...

  5. ansible-安装与使用

    1.安装ansible: 环境为centos7. 1) epel 采用阿里源的epel.安装方式连接:http://mirrors.aliyun.com/help/epel 2)yum install ...

  6. UE4开发神秘海域类游戏原型 初阶(二):动画资源的整合

    前一篇已经确定神海类游戏原型的目标,首先要做的就是3C's(Character, Controls, Camera)的开发.   UE4的3C's的程序部分开发主要也就是基于他的GamePlay Fr ...

  7. google protobuf初体验

    最近在读别人代码的时候发现一个的东西,名字叫protobuf, 感觉挺好用的,写在这里,留个记录.那么什么是protobuf 呢?假如您在网上搜索,应该会得到类似这样的文字介绍: Google Pro ...

  8. 使用Java开发高性能网站需要关注的那些事儿

    无论大型门户网站还是中小型垂直类型网站都会对稳定性.性能和可伸缩性有所追求.大型网站的技术经验分享值得我们去学习和借用,但落实到更具体的实践上并不是对所有网站可以适用,其他语言开发的网站我还不敢多说, ...

  9. AutoIt操作Windows GUI实现文件上传

    AutoIt 一个使用类似BASIC脚本语言的免费软件,用于Windows GUI(图形用户界面)中进行自动化操作.它利用模拟键盘按键,鼠标移动和窗口/控件的组合来实现自动化任务. 官方网站: htt ...

  10. ORA-29275: partial multibyte character

    查询表报错 修改方式1 和字符集存储方式有关系 ,修改客户端和服务器的字符集存储方害死 修改方式2 修改表的字段由nvarchar2修改为varchar2