杜龙少(sdvdxl)

Hexo+Git+Oschina+Golang+Tenxcloud打造博客

Word count: 1,039 / Reading time: 4 min
2016/03/09 Share

简介

Hexo 是一个快速简洁且高效的博客框架Hexo 使用 Markdown或其他渲染引擎解析文章在几秒内即可利用靓丽的主题生成静态网页具体使用方法参见这里

Git 介绍和使用参见这里

OSCina 开源信息平台这里指的是其下的Git托管平台

Golang 谷歌开发的一款跨平台的语言官方地址在国内无法打开golangtc是一个Golang学习网站可以自行查阅

TenxCloud 也就是时速云是国内最早的容器云平台之一(Container as a service)提供丰富的容器化应用镜像构建与发布弹性可伸缩的容器服务以及灵活高性能的容器主机管理容器化应用包括但不限于云主机云数据库大数据Web应用等

准备

  1. 安装hexo
  2. 安装Golang并配置Golang环境
  3. 安装Git并配置相关环境变量

创建Git仓库

打开开源中国Git托管平台(注册后)登录点击右上角+新建项目输入项目名描述如果不想公开的话可以选择私有其余默认即可点击创建然后克隆到本地命令行切换到刚才克隆的项目根目录输入hexo inithexo博客初始化完成输入hexo generate可以渲染页面生成静态页面默认是在public文件夹hexo默认初始化忽略了public文件夹我们需要修改.gitignore文件删除public的记录这样保证可以同步到git仓库中

编写Golang Server服务

在项目根目录创建一个叫server.go的文件把下面的代码考入即可

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
package main

import (
"net/http"
"log"
"os/exec"
)

func main() {
fs := http.FileServer(http.Dir("public"))
http.Handle("/", fs)

//用于gitwebhook触发pull
http.HandleFunc("/_blog/_pull", func(writer http.ResponseWriter, request *http.Request) {
cmd := exec.Command("git","pull")
if err:=cmd.Start(); err!=nil {
log.Println("git pull error", err)
}
})

err := http.ListenAndServe(":80", nil)
if err != nil {
log.Fatal("ListenAndServe: ", err)
}
}

通过git提交文件到远程

创建容器

这里之所以选择时速云是因为一开始接触这类最早的就是这个平台所以使用的还算熟悉下面我们就在上面创建一个容器

  1. 登录之后选择这个镜像此镜像集成了GitGolangSSH服务点击右侧部署镜像按钮如下图配置
    配置点击创建按钮等待片刻即可创建成功
  2. 返回容器服务切换到北京2可以看到我们刚才创建的容器服务点击如图所示的图标进入控制台
    进入控制台
  3. 进入控制台后使用git命令git clone 之前创建的git仓库地址克隆完后进入项目目录输入go build server.go然后输入./server &运行服务端
  4. 现在打开容器服务视图找到我们创建的容器点击右侧的查看所有服务地址点击协议为HTTP的那个服务地址在打开的页面中即可看到我们的博客内容
  5. 点击绑定域名绑定80端口域名我们就可以通过自己的域名访问了

设置WebHooks

打开开源中国git平台找到刚创建的项目点击右侧的管理然后点击左侧的WebHooksURL输入http://你的域名/_blog/_pullPush和合并请求打上勾然后提交

说明

  1. 不要选择杭州区的服务因为采用的是阿里云服务所以会导致没有备案的域名没法打开
  2. 本博客公开托管在开源中国的Git服务上大家可以fork之后改动后用作自己的博客平台
  3. 方便起见Golang脚本已经编译成了Windows Mac Linux 各平台的3264位版本无需编译server.go文件了可以直接选择相应平台文件进行运行启动web服务
CATALOG
  1. 1. 简介
  2. 2. 准备
  3. 3. 创建 Git 仓库
  4. 4. 编写 Golang Server 服务
  5. 5. 创建容器
  6. 6. 设置 WebHooks
  7. 7. 说明