Toc
  1. 前言
  2. 创建OSS Bucket
    1. 打开OSS控制台
    2. 创建Bucket
    3. 配置OSS静态托管模式
  • 配置CDN全站加速
    1. 打开CDN全站加速控制台
    2. 添加CDN加速域名
    3. 配置你添加的域名
    4. 配置https证书
  • 域名解析
    1. 查看CDN加速的CNAME
    2. 解析
  • OSS域名管理
  • 计费问题
  • 使用SDK上传网站文件到OSS
    1. 这里精简的写下怎么使用:
      1. 安装node.js
      2. 安装阿里云 ali-oss 模块
      3. 新建一个js文件
  • END
  • Toc
    0 results found
    Dark
    使用阿里云sdk将hexo生成的博客上传至阿里云OSS并启CDN全站加速

    前言

    2020-07-29 更新:用java重新写了一个轮子,详细请看这里

    2020-05-27 更新:新增关于阿里云计费问题,详情看下一条博客

    众所周知hexo是一个静态博客,我们可以将生成的静态页面上传到对象存储(OSS)实现托管,理论上可以完全不需要服务器了。
    再加上CDN站点加速,相对于github静态托管,访问速度应该是有很大的提升的。
    这里再运用阿里云的sdk,实现在服务器上一条命令将静态页面上传至OSS。

    创建OSS Bucket

    打开OSS控制台

    首次进入先开通服务:



    创建Bucket

    • 填写自定bucket名称
    • 选择与你服务器同地区的区域
    • 选择“标准存储”
    • 修改读写权限为:公共读


    配置OSS静态托管模式

    填写默认首页为 index.html,
    开通子目录首页 :

    • 如你的config.yml文件中pretty_urls:false,请务必开通子目录首页!




    配置CDN全站加速

    打开CDN全站加速控制台

    首次进入也要先开通:

    • 选择按流量计费


    添加CDN加速域名

    • 填写你的博客域名
    • 源站信息选择OSS域名,选中你刚刚创建的bucket


    配置你添加的域名

    • / 代表所有资源(因为hexo是静态,可以全站都用CDN加速)
    • 过期时间按需配置(过期后会回OSS源站重新获取资源)
    • 可以适当延长过期时间(省流量),反正后面会开启“CDN缓存自动刷新”
    • 回源会吃流量(这部分是收费的)


    配置https证书

    • 如不开通https则不需要配置此步


    域名解析

    查看CDN加速的CNAME



    解析

    • 复制CDN的CNAME到域名解析即可




    OSS域名管理

    • 填写你的域名绑定即可(不要勾选“自动添加CNAME记录”)
    • 配置完成后等几分钟就会生效
    • 打开“CDN缓存自动刷新”
    • 以后当OSS文件更新,CDN就会自动回源刷新




    计费问题

    计费问题请查看这一篇:关于阿里云的OSS和CDN流量的计费问题





    使用SDK上传网站文件到OSS

    2020-07-29 更新:
    由于下面的js代码只有一个方法,只支持直接上传,随着文章越来越多,文件体积也越来越大,每次都简单的覆盖上传已经显得不那么“方便”了,每次上传的时间越来越长,阿里云的自动刷新CDN也没有那么“聪明”,所以我决定重写一个轮子,详细在一键上传hexo文件到阿里云OSS-第二版,如果想用新的轮子,下面就可以不用看啦~

    hexo默认生成的网页文件在/public下,我们只需要把/public的文件上传到oss上,网站就能正常访问了,OSS+CDN部分到这里也就结束了。
    那么问题来了:

    每次更新博客就需要手动上传文件到OSS,服务器到OSS有没有一步到位的方法呢?有的!

    我们需要用到阿里云官方的SDK

    这里我用的是node.js的SDK - 官方文档

    这里精简的写下怎么使用:

    安装node.js

    这里只写一种安装方式:
    Ubuntu apt-get命令安装
    sudo apt-get install nodejs

    sudo apt-get install npm

    查看node版本
    node -v

    • 其他版本linux安装方式请到node.js官网
    • ali-oss需要node版本10.x+

    安装阿里云 ali-oss 模块

    先进入你的hexo项目根目录
    cd /path/of/your/hexo

    安装ali-oss
    npm install ali-oss

    新建一个js文件

    新建:
    vi send-to-oss.js

    写入以下代码:

    send-to-oss.js
    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-***',
    accessKeyId: ALIOSSKEY.key,
    accessKeySecret: ALIOSSKEY.secret,
    // 请填写对应的 Bucket 名字
    bucket: '***'
    })

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

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

    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]}`)
    }
    }
    } catch (e) {
    console.log(e)
    }
    }

    run()

    • 阿里 access key 建议使用子账户进行管理
    • region以你实际在的地区为准,一般为:oss-cn-地区拼音

    接下来每次hexo g 后只需要一条命令即可上传文件到oss:
    node send-to-oss.js





    END

    本文作者:Dark
    版权声明:本文首发于Dark的博客,转载请注明出处!