利用git+hugo+markdown 搭建一个静态网站
利用git+hugo+markdown 搭建一个静态网站
一直想要有一个自己的文档管理系统:
- 可以很方便书写,而且相应的文档很容易被分享
- 很方便的存储、管理、历史记录
- 比较方面的浏览和查询
第一点用Makrdown来写文档是一个非常好的选择,第二点自然想到了git,
第三点用一个静态的网站来浏览和管理是一个不错的选择,这里选择了hugo。
Hugo是由Go语言实现的静态网站生成器。 注意是生成器。他虽然自带webserver,但是没有Nigix强大了。
他能非常方便的把markdown文件转换为html。
如何搭建
首先必须有一台服务器,我选择了阿里云。然后:
第一步: 安装hugo
- 首先检查系统的版本:cat /proc/version
- 直接用 sudo yum install hugo 发现不行,只能选择本机安装了
- 当然发现少了一个能上传的客户端: yum install lrzsz
- 因为是radhat,用hugo-0.16-2.el6.x86_64.rpm 包,然后sudo yum install hugo-0.16-2.el6.x86_64.rpm
第二步: 开始创建站点
- hugo new site hub_site
- cd hub_sit
- 安装皮肤: cd themes; git clone https://github.com/key-amb/hugo-theme-bootie-docs.git themes/bootie-docs
也可以本地上传 - 编辑: config.toml
- 加一个主页: _index.md
- 加一个 about页面: hugo new post/about.md
- 启动: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 搭建一个静态网站的更多相关文章
- 利用vue-cli配合vue-router搭建一个完整的spa流程
好文章备忘录: 转自:https://segmentfault.com/a/1190000009160934?_ea=1849098 demo源码:https://github.com/1590123 ...
- express + mongodb 搭建一个简易网站 (四)
express + mongodb 搭建一个简易网站 (四) 目前网站整体页面都已经能全部展示了,但是,整个网站还有两个块需要做完才能算完整,一个连接数据库,目前网站上的数据都是抓取的本地假数据,所以 ...
- express + mongodb 搭建一个简易网站 (三)
express + mongodb 搭建一个简易网站 (三) 前面已经实现了基本的网站功能,现在我们就开始开搞一个完整的网站,现在整个网站的UI就是下面的这个样子. 我们网站的样子就照着这个来吧. 1 ...
- 利用Wamp在本地搭建一个wordpress站点
原文链接:利用Wamp在本地搭建一个wordpress站点 有时候我们会想搭建一个自己的站点,可是由于只是想自己访问,就不是很想为这个站点在买一个服务器和域名,那我们可能首先就想到把自己电脑当做服务器 ...
- 从零开始,在windows上用nodejs搭建一个静态文件服务器
从零开始,在windows上用nodejs搭建一个静态文件服务器 首先安装nodejs: 新建一个node文件夹 下载node.exe到该文件夹 下载npm然后解压到该文件夹 现在node文件夹是这样 ...
- express + mongodb 搭建一个简易网站(二)
express + mongodb 搭建一个简易网站 (二) 在搭建网站(一)中,实现了简单的路由功能,这离一个完整的网站还差的有点远,继续撸代码吧. 1.首先在根目录下新建一个views文件夹,用来 ...
- express + mongodb 搭建一个简易网站(一)
express + mongodb 搭建一个简易网站(一) 前言:后台使用node.js的express框架,数据库使用mongodb,模板使用ejs.大概就这些. 开始第一个简易网站之旅吧.... ...
- 搭建一个wordpress网站需要做哪些工作
今天做了自己的个人网站:二飞日志 之前因为服务器的问题,因为备案的原因辛辛苦苦做的站点数据没了.还好的是没有多少数据.没关系,重新来.有了上一次的经验,这次搭建起来比较顺手.但是也出现了几个问题.下面 ...
- Python Flask搭建一个视频网站实战视频教程
点击了解更多Python课程>>> Python Flask搭建一个视频网站实战视频教程 第1章 课程介绍 第2章 预备开发环境 第3章 项目分析.建立目录及模型规划 第4章 建立前 ...
随机推荐
- ZeroMQ接口函数之 :zmq_unbind - 停止连接外来的请求
ZeroMQ 官方地址 :http://api.zeromq.org/4-2:zmq_unbind zmq_unbind(3) ØMQ Manual - ØMQ/4.1.0 Name zmq_unbi ...
- O(n)求1-n的逆元
转自:http://www.2cto.com/kf/201401/272375.html 新学的一个求逆元的方法: inv[i] = ( MOD - MOD / i ) * inv[MOD%i] % ...
- Unity学习疑问记录之触屏
当将Unity游戏运行到ios或android设备上时,桌面系统中的鼠标左键操作可以自动变为手机屏幕上的触屏操作,但鼠标操作无法实现一些特有的触屏操作,比如多点触屏. 触控对于Android移动设备来 ...
- 配置Office 365单点登录摘要
O365: 如果O365账号之前做过测试,则停用同步,强制删除已有用户涉及命令:Remove-MsolUser -UserPrincipalName zhang_san@company.cn (-Re ...
- Codeforces Good Bye 2016 D 模拟搜索?
给出烟花的爆炸方式和爆炸次数 问最后有多少个格子会被炸到 如果dfs的话会超时... 利用模拟每一层来搜索..? 思想就是一开始有一个爆炸点向上 然后模拟完第一段 会产生一个爆炸点 朝两个方向 就用v ...
- HDU 3966 & POJ 3237 & HYSBZ 2243 树链剖分
树链剖分是一个很固定的套路 一般用来解决树上两点之间的路径更改与查询 思想是将一棵树分成不想交的几条链 并且由于dfs的顺序性 给每条链上的点或边标的号必定是连着的 那么每两个点之间的路径都可以拆成几 ...
- alfresco category searches...
From page 475 of the Alfresco Developer Guide- Category searches use the PATH field, but you constru ...
- poj2488骑士马走
#include<stdio.h> #include<stdlib.h> int data[100][100] = {0}; int Dx[8] = {-1,1,-2,2,-2 ...
- java中return与finally的执行顺序
可不能小看这个简单的 finally,看似简单的问题背后,却隐藏了无数的玄机.接下来我就带您一步一步的揭开这个 finally 的神秘面纱. 问题分析 首先来问大家一个问题:finally 语句块一定 ...
- Android--Activity(活动)
1. 安卓中的 Activity 大致等于桌面应用中的window 2. Activity 的生命周期由系统控制, 所以在开发时要假设 Activity 会被随时销毁掉的情况, 比如: 应用中有一个 ...