BetaMao

COS加CDN部署静态网站

字数统计: 1.2k阅读时长: 5 min
2017/08/24 Share

颜值即正义,以前用WordPress搭建的博客太丑了,没有好看有免费的主题,于是转战hexo,一般都是使用的GitHub存放网页,但是这在国内打开速度实在不忍直视,于是部署在了腾讯云上,使用COS+CDN,记录为笔记。

先部署在GitHub上的

搭建Hexo


安装程序

  1. 安装Node.js
  2. 安装Git
  3. 安装hexo
1
npm install -g hexo-cli

本地搭建

  1. 在任意目录下新建文件夹folder

  2. 右键Git Bash

  3. 执行hexo init folder成功提示
    INFO Start blogging with Hexo!

  4. 进入folder目录,执行npm install

  5. 执行下列命令

    1
    2
    hexo generate
    hexo server
    显示内容为
    
    INFO  Start processing
    INFO  Hexo is running at http://localhost:4000/. Press Ctrl+C to stop.

    此时在浏览器中输入上面URL可以看到初始页面

    发布到GitHub

  6. 在GitHub里新建仓库,命名为username.github.io

  7. 复制当前仓库地址https://github.com/yourname/yourname.github.io.git

  8. 编辑_config.yml文件,看意思来配置就好了,这里列出关键的

    #Deployment
    ##Docs: https://hexo.io/docs/deployment.html
    deploy:

    type: git
    repo: https://github.com/betamaoIS/betamaoIS.github.io.git
    branch: master

    即repo的值为2复制的值

  9. 在bash里面执行

    1
    2
    3
    $ git config --global user.name "Your Name"
    $ git config --global user.email "email@example.com"
    ssh-keygen -t rsa -C "Github的注册邮箱地址"(引号中的内容替换为你的邮箱)

    之后,打开c://Users/yourname/.ssh/id_rsa.pub将其全部添加到GitHub的个人设置->SSH and GPG keys里面

  10. 发布文章

    1
    2
    3
    4
    hexo clean #清除缓存 网页正常情况下可以忽略此条命令
    hexo generate #生成
    hexo server #启动服务预览,非必要,可本地浏览网页
    hexo deploy #部署发布

解决错误

执行hexo deploy后,若出现error deployer not found:git错误,执行命令解决

1
npm install hexo-deployer-git --save

新建文章

  1. 执行hexo new "title"会在\source_posts\目录下生成title.md文件,使用markdown语法编辑

  2. 发布

    1
    hexo g -d

    更换主题

    之前说了,之所以换博客,就是冲着颜值来的,默认的还是不能满足需求,知乎上有很多漂亮的主题推荐,这里先随便换一个,以后再来
    先去下载一个主题
    将其解压到themes目录,再在_config.yml更改主题为spfk

    #Extensions
    ##Plugins: https://hexo.io/plugins/
    ##Themes: https://hexo.io/themes/
    theme: spfk
    再执行

    1
    git pull

    效果

    参考kami的博客

部署至腾讯云


腾讯云对学生是挺优惠的,比阿里好很多,比如对象存储和CDN免费额度挺大的,个人博客站不被打足够了。至于怎么开启这些直接看官方文档就好了,这里只说两个地方

发布内容

要是用GitHub,可以直接执行hexo d发布,但是现在用了COS了,就要换一种方法,可以自己写脚本,但是我偷懒了,直接用腾讯自带的文件同步工具,但是似乎有问题,总感觉每次同步都会重复上传很多文件,(不知道是不是感觉出了偏差),经检查,当生成新文件时,hexo会重新生成部分不会改变的文件到public目录,这样文件时间变了,但内容确实没变,于是读了下官方给的代码,这里似乎有问题,没有仔细看:

如图,当文件最后修改时间变了时会比较md5值,但是官方的代码写的是:

这两个是字符串,若是没有其他特别的操作这个一般情况下都是不相等的,于是意味着只要文件最后修改时间变了就会全部重传,把代码改下,然后到opbin\rebuild.bat就好了(需要安装maven)

更新内容

emmmm,这是才开始遇到的坑,由于CDN缓存,更新的内容不会立即生效,需要过很长时间,可以手动刷新,当然是用官方提供的API会简单很多,这里写了个脚本,支持刷新目录或URL:

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
#coding:utf-8
import requests
import time
import random
import base64
import hashlib
import hmac
import json
reqUrl = "https://cdn.api.qcloud.com/v2/index.php?"
secretKey = '' #自己滴
SecretId = "" #自己滴
publicPara={
"Action":"",
"Timestamp":int(time.time()),
"Nonce":random.randint(0,10000),
"SecretId":SecretId
}

def sign(dict,secretKey,method="POST"):
sortedList= sorted(dict.iteritems(), key=lambda d:d[0], reverse = False)
srcStr="%scdn.api.qcloud.com/v2/index.php?"%(method)
for tmpTuple in sortedList:
srcStr+="%s=%s&"%(tmpTuple[0],tmpTuple[1])
srcStr=srcStr[0:-1]
# print srcStr
signStr = base64.b64encode(hmac.new(secretKey, srcStr, digestmod=hashlib.sha1).digest())
# print signStr
return signStr

def refresh(urlList,dirOrUrl="Url"):
if dirOrUrl not in ("Url","Dir"):
print "参数类型错误:dirOrUrl=Url/Dir"
return
data=publicPara.copy()
data["Action"]="RefreshCdn"+dirOrUrl
i = 0
for url in urlList:
if not url.startswith(("http://","https://")):
print "URL必须以:http://或者https://开头"
return
key=dirOrUrl.lower()+"s.%d"%(i)
value=url
i+=1
data[key]=value
Signature=sign(data,secretKey)
data["Signature"]=Signature
response = requests.post(url=reqUrl,data=data)
return response.json()
if __name__=='__main__':
urlList=["http://blog.betamao.me",]#指定要刷新的url或目录,可支持列表
jsonResponse = refresh(urlList=urlList,dirOrUrl="Dir")#指定要刷新的对象是url还是目录
print json.dumps(jsonResponse, ensure_ascii=False).encode('utf-8')

哇,就这样吧

CATALOG
  1. 1. 搭建Hexo
    1. 1.1. 安装程序
    2. 1.2. 本地搭建
    3. 1.3. 发布到GitHub
    4. 1.4. 解决错误
    5. 1.5. 新建文章
    6. 1.6. 更换主题
  2. 2. 部署至腾讯云
    1. 2.1. 发布内容
    2. 2.2. 更新内容