配置详情
目录结构
以Hexo的根目录为例:
.
├── public
├── scaffolds
├── source
├── themes
├── .elog.env // Elog用于本地调试时的环境变量配置
├── .gitignore // git忽略文件,请将.elog.env文件加入,防止密码等信息误提交
├── _config.yml
├── elog.cache.json // Elog的缓存文件,用于缓存上次同步的文件
├── elog.config.js // Elog的配置文件
└── package.json
以下配置都是基于elog.config.js
来说明
完整示例
module.exports = {
write: {
platform: 'yuque',
yuque: {
token: process.env.YUQUE_TOKEN,
baseUrl: '',
login: process.env.YUQUE_LOGIN,
repo: process.env.YUQUE_REPO,
onlyPublic: false,
onlyPublished: true,
},
notion: {
token: process.env.NOTION_TOKEN,
databaseId: process.env.NOTION_DATABASE_ID,
filter: true, // {property: 'status', select: {equals: '已发布'}}
sorts: true, // [{timestamp: 'created_time', direction: 'descending'}],
catalog: false
},
},
deploy: {
platform: 'local',
local: {
outputDir: '',
filename: '',
format: '',
catalog: false,
formatExt: '',
},
confluence: {
user: process.env.CONFLUENCE_USER,
password: process.env.CONFLUENCE_PASSWORD,
baseUrl: process.env.CONFLUENCE_BASE_URL,
spaceKey: process.env.CONFLUENCE_SPACE_KEY,
rootPageId: process.env.CONFLUENCE_ROOT_PAGE_ID, // 可选
formatExt: '', // 可选
},
},
image: {
enable: false,
platform: 'local',
local: {
outputDir: '',
prefixKey: '',
},
oss: {
secretId: process.env.OSS_SECRET_ID,
secretKey: process.env.OSS_SECRET_KEY,
bucket: process.env.OSS_BUCKET,
region: process.env.OSS_REGION,
host: process.env.OSS_HOST,
prefixKey: '',
secretExt: '', // 可选
},
cos: {
secretId: process.env.COS_SECRET_ID,
secretKey: process.env.COS_SECRET_KEY,
bucket: process.env.COS_BUCKET,
region: process.env.COS_REGION,
host: process.env.COS_HOST,
prefixKey: '',
secretExt: '', // 可选
},
qiniu: {
secretId: process.env.QINIU_SECRET_ID,
secretKey: process.env.QINIU_SECRET_KEY,
bucket: process.env.QINIU_BUCKET,
region: process.env.QINIU_REGION,
host: process.env.QINIU_HOST,
prefixKey: '',
secretExt: '', // 可选
},
upyun: {
user: process.env.UPYUN_USER,
password: process.env.UPYUN_PASSWORD,
bucket: process.env.UPYUN_BUCKET,
host: process.env.UPYUN_HOST,
prefixKey: '',
secretExt: '', // 可选
},
github: {
user: process.env.GITHUB_USER,
token: process.env.GITHUB_TOKEN,
repo: process.env.GITHUB_REPO,
branch: '',
host: '',
prefixKey: '',
secretExt: '', // 可选
},
},
}
字段说明
字段 | 说明 |
---|---|
write | 写作平台详细配置 |
deploy | 部署平台详细配置 |
image | 图床平台详情配置 |
写作平台
语雀
语雀关键信息获取及配置流程请移步 关键信息获取 页面
字段 | 必填 | 说明 | 默认值 |
---|---|---|---|
token | 是 | 语雀Token | - |
baseUrl | 否 | 语雀API请求的Base Url | https://www.yuque.com/api/v2 |
login | 是 | 个人路径/空间ID | - |
repo | 是 | 语雀仓库短名称,也称为语雀知识库路径 | - |
onlyPublic | 否 | 是否只获取公开文章 | false |
onlyPublished | 否 | 是否只获取已发布文章 | false |
baseUrl
为语雀 API 请求路径 当知识库类型为个人知识库时,无需配置。 当知识库类型为团队知识库时,baseUrl=https://空间id.yuque.com/api/v2
,login=空间id
,repo=空间中的语雀知识库路径
Notion
Notion模版获取、关键信息获取及配置流程请移步 关键信息获取 页面
字段 | 必填 | 类型 | 说明 | 默认值 |
---|---|---|---|---|
token | 是 | string | Notion Token | |
databaseId | 是 | string | notion 中的数据库 id | - |
filter | 否 | boolean|object | 过滤条件 | true |
sorts | 否 | boolean|object[] | 排序条件 | true |
catalog | 否 | boolean|object | 目录信息配置 | false |
Filter 字段说明
filter
字段是为了筛选 Notion 数据库文档,表示哪些文章需要被 Elog 下载。
- 默认值为 true ,即筛选数据库的
status
属性,且属性值为已发布
,对应 Notion 的筛选规则为:
{
property: 'status',
select: {
equals: '已发布'
}
}
- 当
filter = false
时,不进行筛选,默认下载数据库所有文档 - 当需要自定义筛选时,需要按照Notion的筛选规则进行。具体请参考Notion API文档 - Filter database entries
Sorts 字段说明
sorts
字段是为了对 Notion 数据库文档进行排序,以便生成一定顺序的目录信息,对文档的同步不影响。 例如,使用 VitePress 部署文档时,需要对文档按照指定顺序和结构生成路由和 sidebar。 详情见 Elog Docs 文档源码
- elog 提供了一些预设参数,如下。例如
sorts=sortDesc
即按照数据库的 sort 字段进行倒序排列
export const enum NotionSortPreset {
/** 按自定义日期排序 */
dateDesc = 'dateDesc', // 倒序
dateAsc = 'dateAsc', // 升序
/** 按创建时间排序 */
createTimeDesc = 'createTimeDesc', // 倒序
createTimeAsc = 'createTimeAsc', // 升序
/** 按更新时间排序 */
updateTimeDesc = 'updateTimeDesc', // 倒序
updateTimeAsc = 'updateTimeAsc', // 升序
/** 按数据库的sort字段进行排序 */
sortDesc = 'sortDesc', // 倒序
sortAsc = 'sortAsc', // 升序
}
- 当
sorts=true
或者不填时,默认按照文档创建时间倒序进行排序 - 当需要自定义排序时,需要按照Notion的筛选规则进行。具体请参考 Notion API文档 - Sort database entries
Catalog 字段说明
catalog
字段是为了配置文档的目录信息,如果需要按照指定目录分类下载时,则需要进行配置,对文档的同步不影响。
- 默认值为
false
,即不记录文档的目录信息 - 当
catalog=true
,则表示按照数据库的catalog
字段进行记录 - 当需要自定义属性时,则可按照以下格式进行配置
catalog: {
enable: true,
property: "自定义属性"
}
- 当需要配置
catalog
字段时,请保证数据库有相关属性存在(支持单选/多选)
部署平台
本地部署(local)
适用于所有类似 Hexo 的框架:通过向指定目录存放 markdown 文档来进行渲染的博客平台
字段 | 必填 | 说明 | 默认值 |
---|---|---|---|
outputDir | 否 | 文档输出目录 | - |
filename | 否 | 生成文档的命名格式,取值 urlname|title | title |
format | 否 | 适配器,取值 markdown|matter-markdown|wiki|html | markdown |
catalog | 否 | 是否按照目录生成文档 | false |
formatExt | 否 | 自定义文档处理适配器路径 | - |
FormatExt 字段说明
自定义文档处理适配器.js
文件路径,当需要对文档进一步处理时,可配置此选项
- 目前只支持 Common Js 标准的处理器
- 处理器需要暴露一个同步的
format
的方法,不支持异步方法
// 如果需要返回带有front-matter的md字符串,则需要安装并引入此库
const { matterMarkdownAdapter } = require('@elog/plugin-adapter')
/**
* 自定义文档处理器
* @param {DocDetail} doc doc的类型定义为 DocDetail
* @return {string} 返回处理后的文档内容字符串
*/
const format = (doc) => {
doc.body = process(body)
// 直接返回md内容字符串
return doc.body
// 返回带有front-matter的md字符串
// return matterMarkdownAdapter(doc);
};
module.exports = {
format,
};
DocDetail 类型定义如下:
/** 文章详情 */
export interface DocDetail extends BaseDoc {
/** 实际部署时的markdown文档字符串 */
body: string
/** 原始markdown文档字符串 */
body_original: string
/** 部署到wiki时会存在 */
body_wiki?: string
/** html字符串 */
body_html?: string
/** 文章属性 */
properties: DocProperties
/** 语雀文章目录路径, Notion暂不支持 */
catalog?: YuqueCatalog[]
}
export interface BaseDoc {
/** 文章唯一ID */
id: string
/** 文章ID */
doc_id: string
/** 更新时间,冗余字段 */
updated: number
}
/** 文章属性 */
export interface DocProperties {
urlname: string
title: string
date: string
updated: string
[key: string]: any
}
/** 语雀知识库目录 */
export interface YuqueCatalog {
/** 类型:文章/分组 */
type: 'DOC' | 'TITLE'
title: string
uuid: string
child_uuid: string
parent_uuid: string
slug: string
depth: number
level: number
}
Confluence
字段 | 必填 | 说明 | 默认值 |
---|---|---|---|
baseUrl | 是 | Confluence API 请求 Base Url | - |
spaceKey | 是 | 空间Key | - |
rootPageId | 是 | 根页面ID,Elog会把文档统一存到此目录下 | - |
user | 是 | Confluence账号 | - |
password | 是 | Confluence密码 | - |
formatExt | 否 | 自定义文档处理适配器路径,需要符合Confluence格式要求 | - |
图床平台
图床关键信息获取及配置流程请移步 关键信息获取 页面。
本地存储(local)
字段 | 必填 | 说明 | 默认值 |
---|---|---|---|
outputDir | 是 | 图片输出目录 | - |
prefixKey | 否 | 图片资源统一前缀 | - |
PrefixKey 字段说明
- 本地部署平台一般会有资源根目录,会将某个文件夹视为根目录,而
prefixKey
就是配置资源目录的前缀 - 例如 Vitpress,如果
outputDir=./docs/asset/images
,则prefixKey=/asset/images
腾讯云(cos)/阿里云(oss)/七牛云(qiniu)
字段 | 必填 | 说明 | 默认值 |
---|---|---|---|
secretId | 是 | 图床密钥ID | - |
secretKey**** | 是 | 图床密钥KEY | - |
bucket | 是 | 桶名称/七牛云空间 | - |
region | 是 | 存储区域 | - |
host | 否 | 指定域名,七牛云必填 | - |
prefixKey | 否 | 上传路径,默认上传到根路径 | - |
secretExt | 否 | 图床密钥拓展点 | - |
又拍云(upyun)
字段 | 必填 | 说明 | 默认值 |
---|---|---|---|
user**** | 是 | 操作员账号 | - |
password | 是 | 操作员密码 | - |
bucket | 是 | 地区 | - |
host | 否 | 指定域名,又拍云会默认提供30天的临时测试域名,建议配置自定义域名 | 临时域名:http://xxx.est.upcdn.net |
prefixKey | 否 | 上传路径,默认上传到根路径 | - |
secretExt | 否 | 图床密钥拓展点 | - |
Github图床(github)
字段 | 必填 | 说明 | 默认值 |
---|---|---|---|
token | 是 | Github Token | - |
user | 是 | 用户名 | - |
repo | 是 | 仓库名 | - |
branch | 否 | 分支 | master |
host | 否 | 加速域名,取值 cdn.jsdelivr.net | - |
prefixKey | 否 | 上传路径,默认上传到根路径 | - |
secretExt | 否 | 图床密钥拓展点 | - |
secretExt 字段说明
图床密钥拓展点路径,一般适用于不想直接配置AK到环境变量或者本地,而是通过异步接口获取
- 目前只支持 Common Js 标准拓展点
- 拓展点需要暴露一个同步/异步的
getSecret
的方法
const axios = require('axios');
const getOssSts = async () => {
return await axios.get('https://xxxx/oss/sts?directory=elog')
}
const getSecret = async () => {
const res = await getOssSts()
const { accessKeyId, accessKeySecret, securityToken, dir, region, bucket } = res.data.data
return {
secretId: accessKeyId,
secretKey: accessKeySecret,
stsToken: securityToken,
secure: true,
prefixKey: dir,
region,
bucket,
}
}
module.exports = {
getSecret,
}
getSecret
返回的密钥信息需要符合图床实例SDK的字段要求,具体请参考对应图床 SDK/API
环境变量配置
- 当 Elog 配置文件为 Js 类型时,可在配置文件中通过
process.env.xxx
自定义环境变量。 - 当 ELog 配置文件为 Json 类型时,Elog会优先从配置文件中获取,如果获取不到,则会从环境变量中获取。Elog 默认只会读取以下环境变量值: | Key | Value | | --- | --- | | YUQUE_TOKEN | 语雀Token | | NOTION_TOKEN | Notion Token | | CONFLUENCE_USER | Confluence账号 | | CONFLUENCE_PWD | Confluence密码 | | GITHUB_TOKEN | Github Token | | COS_SECRET_ID | 腾讯云COS的secretId | | COS_SECRET_KEY | 腾讯云COS的secretKey | | OSS_SECRET_ID | 阿里云OSS的AccessKey ID | | OSS_SECRET_KEY | 阿里云OSS的AccessKey Secret | | QINIU_SECRET_ID | 七牛云的AccessKey | | QINIU_SECRET_KEY | 七牛云的SecretKey | | UPYUN_SECRET_ID | 又拍云的操作员账号 | | UPYUN_SECRET_KEY | 又拍云的操作员密码 |
⚠️ 为了安全,在实际配置中请不要将敏感信息写在配置文件中,Elog提供了更优雅的本地调试方式。
本地调试
为了方便本地调试,Elog 支持从本地文件中获取环境变量。只需要在部署平台根目录新增.elog.env
文件,将用到的配置写入,然后在执行同步命令时指定环境变量文件即可。
elog sync -e .elog.env
# 语雀
YUQUE_TOKEN=
YUQUE_LOGIN=
YUQUE_REPO=
# Notion
NOTION_TOKEN=
NOTION_DATABASE_ID=
# Confluence
CONFLUENCE_BASE_URL=
CONFLUENCE_USER=
CONFLUENCE_PASSWORD=
CONFLUENCE_SPACE_KEY=
CONFLUENCE_ROOT_PAGE_ID=
# 腾讯云
COS_SECRET_ID=
COS_SECRET_KEY=
COS_BUCKET=
COS_REGION=
COS_HOST=
# 阿里云
OSS_SECRET_ID=
OSS_SECRET_KEY=
OSS_BUCKET=
OSS_REGION=
OSS_HOST=
# 七牛云
QINIU_SECRET_ID=
QINIU_SECRET_KEY=
QINIU_BUCKET=
QINIU_REGION=
QINIU_HOST=
# 又拍云
UPYUN_USER=
UPYUN_PASSWORD=
UPYUN_BUCKET=
UPYUN_HOST=xxx.xx.upaiyun.com
# Github
GITHUB_USER=
GITHUB_TOKEN=
GITHUB_REPO=
⚠️ 注意:请将
**.elog.env**
文件加入**.gitignore**
,防止误提交到git仓库
线上部署
线上部署时,只需要提前将以上用到的信息配置到环境变量上即可。 以 Github 为例,可以在仓库的设置-Secrets and variables-Actions-Secrets
中进行配置,然后在流水线中注入即可。