1.静态内容


github pages

优点

  • 方便 用的人多

缺点

  • 访问慢 不稳定
  • 无CI,不过外部工具也很多

gitlab pages

优点

  • 有CI 可以持续集成

缺点

  • CI编译慢,不稳定

coding

优点

  • 国内访问快

缺点

  • 需要在页面上给coding打广告

  • 第一次打开会出现广告

虚拟主机

优点

  • 稳定 快

缺点

  • 贵,需要备案

阿里云和腾讯云的 对象存储

优点

  • 快,基本不要钱,稳定,支持https

缺点

  • 需要一个备案过的域名

  • 无CI,但是有api


2.动态内容


heroku

https://devcenter.heroku.com/

ibm bluemix

https://www.ibm.com/cloud-computing/bluemix/node/4471

google app engine

https://console.cloud.google.com/

阿里腾讯学生机

https://cloud.tencent.com/act/campus


3.CI


codeship CI介绍

https://app.codeship.com

travis-ci

https://docs.travis-ci.com/user/deployment/pages/

daocloud docker CI

https://daocloud.io

docker hub CI 介绍

https://hub.docker.com

4.私有js cdn方案

https://www.jsdelivr.com/


总结


所以比较好的方案是 github私有仓库,codeship做CI,js用jsdelivr,阿里云和腾讯云的对象存储来存放网页

实践例子

hexo 搭建博客
theme模板 链接都添加 index.html

使用 ali-oss 上传到 阿里OSS

在codeship上配置CI

以后直接新增 .md 文件即可实现发布

上传脚本

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
const fs = require('fs')
const path = require('path')
const util = require('util')
const OSS = require('ali-oss')

const promisifyReaddir = util.promisify(fs.readdir)
const promisifyStat = util.promisify(fs.stat)

// 阿里 OSS access key 拥有对 OSS 的全部权限
const ALIOSSKEY = {
key: '......',
secret: '.......'
}

const client = new OSS({
// 请填写你的 Bucket 对应的 region
region: 'oss-cn-beijing',
accessKeyId: ALIOSSKEY.key,
accessKeySecret: ALIOSSKEY.secret,
// 请填写对应的 Bucket 名字
bucket: '...'
})

const publicPath = path.resolve(__dirname, './blog')

async function run(proPath = '') {
const dir = await promisifyReaddir(`${publicPath}${proPath}`)

for (let i = 0; i < dir.length; i++) {
const stat = await promisifyStat(path.resolve(`${publicPath}${proPath}`, dir[i]))

if (stat.isFile()) {
const fileStream = fs.createReadStream(path.resolve(`${publicPath}${proPath}`, dir[i]))
console.log(`上传文件: ${proPath}/${dir[i]}`)
const result = await client.putStream(`${proPath}/${dir[i]}`, fileStream)
// console.log(result)
} else if (stat.isDirectory()) {
await run(`${proPath}/${dir[i]}`)
}
}
}

run()

codeship 配置命令

1
2
3
npm install
npm run build
npm run upload