NodeBB安装部署指南 - 从零开始搭建高性能论坛
本文详细介绍了NodeBB论坛系统的完整部署方案,涵盖了环境要求检查、Docker容器化部署、传统服务器安装配置以及云平台一键部署的最佳实践。内容包含系统依赖检查、多数据库支持、资源配置建议、安全加固配置和高可用架构设计,为从零开始搭建高性能论坛提供全面指导。
环境要求与系统依赖检查
在开始部署NodeBB论坛系统之前,充分了解其环境要求和系统依赖是确保顺利安装和稳定运行的关键。NodeBB作为基于Node.js的高性能论坛软件,对运行环境有着明确的要求,本节将详细分析这些要求并提供实用的检查方法。
Node.js版本要求
NodeBB要求Node.js版本至少为20或更高版本。这是确保所有现代JavaScript特性和性能优化能够正常工作的基础要求。
// 检查当前Node.js版本
const semver = require('semver');
const currentNodeVersion = process.version;
const requiredNodeVersion = '>=20';
if (!semver.satisfies(currentNodeVersion, requiredNodeVersion)) {
console.error(`错误:Node.js版本不兼容。需要 ${requiredNodeVersion},当前为 ${currentNodeVersion}`);
process.exit(1);
}
版本兼容性检查流程如下:
flowchart TD
A[开始版本检查] --> B[获取当前Node.js版本]
B --> C{版本是否≥20?}
C -->|是| D[版本兼容,继续安装]
C -->|否| E[版本不兼容,终止安装]
D --> F[检查npm版本]
E --> G[提示升级Node.js]
F --> H[检查系统架构]
H --> I[环境检查完成]
数据库支持矩阵
NodeBB支持三种主流数据库系统,每种数据库都有特定的版本要求:
| 数据库类型 | 最低版本要求 | 推荐版本 | 特点 |
|---|---|---|---|
| MongoDB | 5.0+ | 6.0+ | 文档数据库,灵活的数据模型 |
| Redis | 7.2+ | 7.4+ | 内存数据库,高性能缓存 |
| PostgreSQL | 12+ | 15+ | 关系型数据库,强一致性 |
系统资源需求
根据部署规模的不同,NodeBB对系统资源的需求也有所差异:
小型部署(<1000用户)
- CPU:2核心
- 内存:2GB
- 存储:10GB SSD
- 带宽:100Mbps
中型部署(1000-10000用户)
- CPU:4核心
- 内存:4GB
- 存储:50GB SSD
- 带宽:1Gbps
大型部署(>10000用户)
- CPU:8+核心
- 内存:16GB+
- 存储:100GB+ SSD
- 带宽:10Gbps+
依赖包检查脚本
为了确保所有必要的依赖包都已正确安装,可以使用以下检查脚本:
#!/bin/bash
# 检查Node.js版本
echo "检查Node.js版本..."
node -v
# 检查npm版本
echo "检查npm版本..."
npm -v
# 检查数据库客户端
echo "检查MongoDB客户端..."
mongosh --version 2>/dev/null || echo "MongoDB客户端未安装"
echo "检查Redis客户端..."
redis-cli --version 2>/dev/null || echo "Redis客户端未安装"
echo "检查PostgreSQL客户端..."
psql --version 2>/dev/null || echo "PostgreSQL客户端未安装"
# 检查系统工具
echo "检查系统工具..."
git --version
curl --version
wget --version
端口占用检查
NodeBB默认使用以下端口,需要确保这些端口未被占用:
| 端口号 | 用途 | 是否必需 |
|---|---|---|
| 4567 | NodeBB应用端口 | 是 |
| 27017 | MongoDB默认端口 | 可选 |
| 6379 | Redis默认端口 | 可选 |
| 5432 | PostgreSQL默认端口 | 可选 |
端口检查命令:
# 检查端口占用情况
netstat -tuln | grep -E '(4567|27017|6379|5432)'
lsof -i :4567
文件系统权限要求
NodeBB需要对以下目录具有读写权限:
mindmap
root((文件权限要求))
config目录
config.json
package.json
public目录
uploads子目录
images子目录
logs目录
access.log
error.log
node_modules目录
依赖包安装
环境变量配置
NodeBB支持通过环境变量进行配置,重要的环境变量包括:
# 数据库连接配置
export NODEBB_DATABASE="redis" # 或 mongo, postgres
export NODEBB_DATABASE_HOST="localhost"
export NODEBB_DATABASE_PORT="6379"
export NODEBB_DATABASE_PASSWORD="your_password"
# 应用配置
export NODEBB_PORT="4567"
export NODEBB_URL="http://your-domain.com"
export NODEBB_SECRET="your_secret_key"
# 性能调优
export NODEBB_WORKERS="4"
export UV_THREADPOOL_SIZE="16"
系统架构兼容性
NodeBB支持多种系统架构,包括:
| 架构类型 | 支持状态 | 备注 |
|---|---|---|
| x86_64 | ✅ 完全支持 | 主流服务器架构 |
| ARM64 | ✅ 完全支持 | 云服务器和树莓派 |
| ARMv7 | ⚠️ 有限支持 | 需要手动编译部分依赖 |
| ppc64le | ⚠️ 有限支持 | 企业级Power架构 |
安全检查清单
在部署前,请确保完成以下安全检查:
- 防火墙配置:只开放必要的端口
- 数据库安全:设置强密码和访问限制
- 文件权限:遵循最小权限原则
- SSL证书:准备有效的HTTPS证书
- 备份策略:制定定期备份计划
通过全面的环境要求和依赖检查,可以为NodeBB的稳定运行奠定坚实基础。下一节将进入具体的安装部署步骤。
Docker容器化部署方案
NodeBB提供了完整的Docker容器化部署方案,通过Docker Compose可以快速搭建包含数据库、缓存和NodeBB应用的全栈环境。这种部署方式具有环境一致性、快速部署和易于维护的优势。
Docker架构设计
NodeBB的Docker部署采用多容器架构,各个服务通过Docker网络进行通信:
flowchart TD
A[用户请求] --> B[NodeBB容器<br>端口4567]
B --> C[MongoDB数据库<br>端口27017]
B --> D[Redis缓存<br>端口6379]
B --> E[PostgreSQL数据库<br>端口5432]
F[Docker Volume<br>数据持久化] --> B
F --> C
F --> D
F --> E
G[配置文件<br>setup.json] --> B
核心配置文件解析
Dockerfile结构
NodeBB的Dockerfile采用多阶段构建模式,确保最终镜像的精简和安全:
# 第一阶段:构建阶段
FROM node:lts as build
ENV NODE_ENV=production DAEMON=false SILENT=false
WORKDIR /usr/src/app/
COPY . /usr/src/app/
RUN corepack enable
RUN apt-get update && apt-get install -y tini
RUN groupadd --gid 1001 nodebb && useradd --uid 1001 --gid 1001 nodebb
USER nodebb
RUN npm install --omit=dev
# 第二阶段:运行阶段
FROM node:lts-slim AS final
ENV NODE_ENV=production DAEMON=false SILENT=false
WORKDIR /usr/src/app/
RUN corepack enable && groupadd --gid 1001 nodebb && useradd --uid 1001 nodebb
COPY --from=build /usr/src/app/ /usr/src/app/
COPY --from=build /usr/bin/tini /usr/local/bin/
COPY --from=build /usr/src/app/install/docker/entrypoint.sh /usr/local/bin/
RUN chmod +x /usr/local/bin/entrypoint.sh
EXPOSE 4567
VOLUME ["/usr/src/app/node_modules", "/usr/src/app/build", "/opt/config/"]
ENTRYPOINT ["tini", "--", "entrypoint.sh"]
Docker Compose配置
docker-compose.yml文件定义了完整的服务栈:
services:
nodebb:
build: .
restart: unless-stopped
ports:
- '4567:4567'
volumes:
- nodebb-build:/usr/src/app/build
- nodebb-uploads:/usr/src/app/public/uploads
- nodebb-config:/opt/config
- ./install/docker/setup.json:/usr/src/app/setup.json
mongo:
image: 'mongo:7-jammy'
restart: unless-stopped
environment:
MONGO_INITDB_ROOT_USERNAME: nodebb
MONGO_INITDB_ROOT_PASSWORD: nodebb
MONGO_INITDB_DATABASE: nodebb
volumes:
- mongo-data:/data/db
- ./install/docker/mongodb-user-init.js:/docker-entrypoint-initdb.d/user-init.js
部署流程详解
1. 环境准备
首先确保系统已安装Docker和Docker Compose,然后克隆NodeBB仓库:
git clone https://gitcode.com/gh_mirrors/no/NodeBB
cd NodeBB
2. 配置文件定制
编辑install/docker/setup.json文件,配置数据库连接参数:
{
"defaults": {
"mongo": {
"host": "mongo",
"port": 27017,
"database": "nodebb",
"username": "nodebb",
"password": "nodebb"
},
"redis": {
"host": "redis",
"port": 6379,
"database": 0
}
}
}
3. 启动服务栈
使用Docker Compose启动所有服务:
docker-compose up -d
这个命令会启动以下服务:
- NodeBB应用容器(端口4567)
- MongoDB数据库容器(端口27017)
- 数据持久化卷
4. 初始化安装
首次启动时会自动执行安装流程,可以通过日志查看进度:
docker-compose logs -f nodebb
容器启动流程
NodeBB容器的启动由entrypoint.sh脚本控制,其执行流程如下:
sequenceDiagram
participant User
participant Entrypoint
participant NodeBB
participant Database
User->>Entrypoint: 启动容器
Entrypoint->>Entrypoint: 设置环境变量默认值
Entrypoint->>Entrypoint: 检查配置目录权限
Entrypoint->>Entrypoint: 复制包管理文件
Entrypoint->>Entrypoint: 安装依赖
alt 配置文件存在
Entrypoint->>NodeBB: 构建论坛
NodeBB->>Database: 连接数据库
Entrypoint->>NodeBB: 启动论坛
else 配置文件不存在
Entrypoint->>NodeBB: 执行安装流程
NodeBB->>User: 等待配置输入
User->>NodeBB: 提供配置信息
NodeBB->>Database: 初始化数据库
Entrypoint->>NodeBB: 构建并启动
end
NodeBB->>User: 论坛服务就绪
数据持久化策略
NodeBB Docker部署采用卷挂载方式实现数据持久化:
| 卷名称 | 挂载路径 | 数据类型 | 说明 |
|---|---|---|---|
| nodebb-build | /usr/src/app/build | 构建文件 | Webpack构建产物 |
| nodebb-uploads | /usr/src/app/public/uploads | 用户文件 | 用户上传的图片和附件 |
| nodebb-config | /opt/config | 配置文件 | 应用配置和包管理文件 |
| mongo-data | /data/db | 数据库 | MongoDB数据文件 |
环境变量配置
通过环境变量可以灵活配置容器行为:
| 环境变量 | 默认值 | 说明 |
|---|---|---|
| NODE_ENV | production | 运行环境 |
| DAEMON | false | 是否以守护进程运行 |
| SILENT | false | 是否静默模式 |
| CONFIG_DIR | /opt/config | 配置目录路径 |
| PACKAGE_MANAGER | npm | 包管理器(npm/yarn/pnpm) |
| START_BUILD | false | 启动前是否构建 |
自定义配置示例
如果需要使用自定义配置,可以创建config.json文件:
{
"url": "https://forum.yourdomain.com",
"secret": "your-secret-key",
"database": "mongo",
"mongo": {
"host": "mongo",
"port": 27017,
"username": "nodebb",
"password": "nodebb",
"database": "nodebb"
},
"port": 4567
}
运维管理命令
常用的容器管理命令:
# 查看服务状态
docker-compose ps
# 查看日志
docker-compose logs nodebb
# 重启服务
docker-compose restart nodebb
# 进入容器
docker-compose exec nodebb bash
# 停止服务
docker-compose down
# 停止并清理数据
docker-compose down -v
性能优化建议
对于生产环境部署,建议进行以下优化:
- 资源限制:为容器设置CPU和内存限制
- 日志管理:配置日志轮转和外部存储
- 健康检查:添加容器健康检查配置
- 网络优化:使用自定义Docker网络
- 监控集成:添加Prometheus监控指标
# 优化后的docker-compose配置示例
services:
nodebb:
deploy:
resources:
limits:
memory: 1G
cpus: '1.0'
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4567/api/config"]
interval: 30s
timeout: 10s
retries: 3
通过Docker容器化部署,NodeBB可以实现快速部署、弹性扩展和简化运维,为生产环境提供稳定可靠的论坛服务基础架构。
传统服务器安装配置步骤
在传统服务器环境中部署NodeBB需要系统性的配置流程,本节将详细指导您完成从环境准备到最终部署的全过程。NodeBB支持多种数据库后端,包括MongoDB、Redis和PostgreSQL,我们将以最常用的MongoDB为例进行说明。
环境准备与依赖安装
首先确保您的服务器满足NodeBB的基本要求:
系统要求:
- Node.js 20.x 或更高版本
- MongoDB 5.x 或更高版本(或Redis 7.2+、PostgreSQL)
- npm 或 yarn 包管理器
- 至少2GB RAM(生产环境推荐4GB+)
安装Node.js和npm:
# 使用NodeSource仓库安装Node.js 20.x
curl -fsSL https://deb.nodesource.com/setup_20.x | sudo -E bash -
sudo apt-get install -y nodejs
# 验证安装
node --version
npm --version
安装MongoDB:
# 导入MongoDB GPG密钥
wget -qO - https://www.mongodb.org/static/pgp/server-7.0.asc | sudo apt-key add -
# 添加MongoDB仓库
echo "deb [ arch=amd64,arm64 ] https://repo.mongodb.org/apt/ubuntu jammy/mongodb-org/7.0 multiverse" | sudo tee /etc/apt/sources.list.d/mongodb-org-7.0.list
# 安装MongoDB
sudo apt-get update
sudo apt-get install -y mongodb-org
# 启动MongoDB服务
sudo systemctl start mongod
sudo systemctl enable mongod
NodeBB项目部署
克隆项目并安装依赖:
# 克隆NodeBB仓库
git clone https://gitcode.com/gh_mirrors/no/NodeBB.git
cd NodeBB
# 安装项目依赖
npm install --production
初始化配置流程: NodeBB提供了交互式配置向导,通过以下命令启动:
# 启动设置向导
./nodebb setup
配置向导将引导您完成以下步骤:
-
基础配置:
- 设置访问URL(如:http://your-domain.com:4567)
- 配置NodeBB安全密钥
- 选择是否提交匿名插件使用统计
-
数据库配置(以MongoDB为例):
Database Type: mongo Host: 127.0.0.1 Port: 27017 Database Name: nodebb Username: (可选) Password: (可选) -
管理员账户创建:
- 设置管理员用户名、密码和邮箱
配置文件详解
NodeBB使用JSON格式的配置文件,主要配置文件位于config.json:
{
"url": "http://localhost:4567",
"secret": "your-secret-key",
"database": "mongo",
"mongo": {
"host": "127.0.0.1",
"port": 27017,
"username": "",
"password": "",
"database": "nodebb"
},
"port": 4567,
"submitPluginUsage": true
}
安全配置最佳实践
防火墙配置:
# 配置UFW防火墙
sudo ufw allow ssh
sudo ufw allow 4567/tcp
sudo ufw enable
MongoDB安全配置:
// /etc/mongod.conf
security:
authorization: enabled
net:
bindIp: 127.0.0.1
port: 27017
NodeBB生产环境优化:
{
"socket.io": {
"transports": ["websocket"]
},
"cluster": {
"isMaster": true,
"isWorker": false
}
}
启动与管理
启动NodeBB服务:
# 开发模式启动
./nodebb dev
# 生产模式启动
./nodebb start
# 查看运行状态
./nodebb status
# 停止服务
./nodebb stop
# 重启服务
./nodebb restart
系统服务配置(使用systemd):
创建/etc/systemd/system/nodebb.service:
[Unit]
Description=NodeBB Forum Software
After=network.target mongod.service
[Service]
Type=simple
User=nodebb
WorkingDirectory=/opt/nodebb
ExecStart=/usr/bin/node loader.js
Restart=always
Environment=NODE_ENV=production
[Install]
WantedBy=multi-user.target
数据库连接流程
以下是NodeBB与MongoDB数据库的连接时序图:
sequenceDiagram
participant Client as 客户端
participant NodeBB as NodeBB应用
participant MongoDB as MongoDB数据库
Client->>NodeBB: HTTP请求
NodeBB->>MongoDB: 建立连接池
MongoDB-->>NodeBB: 连接确认
NodeBB->>MongoDB: 查询用户数据
MongoDB-->>NodeBB: 返回查询结果
NodeBB->>MongoDB: 写入会话数据
MongoDB-->>NodeBB: 写入确认
NodeBB-->>Client: 返回响应
配置参数参考表
| 参数 | 默认值 | 说明 | 必需 |
|---|---|---|---|
| url | http://localhost:4567 | 论坛访问地址 | 是 |
| port | 4567 | 监听端口 | 是 |
| secret | 自动生成 | 安全密钥 | 是 |
| database | mongo | 数据库类型 | 是 |
| mongo.host | 127.0.0.1 | MongoDB主机地址 | 是 |
| mongo.port | 27017 | MongoDB端口 | 是 |
| mongo.database | nodebb | 数据库名称 | 是 |
故障排除
常见问题解决方案:
-
端口冲突:
# 检查端口占用 netstat -tulpn | grep :4567 # 修改配置端口 ./nodebb setup -
数据库连接失败:
# 测试MongoDB连接 mongo --host 127.0.0.1 --port 27017 -
权限问题:
# 确保NodeBB有写入权限 chown -R nodebb:nodebb /opt/nodebb
通过以上步骤,您已经完成了NodeBB在传统服务器环境下的完整安装和配置。下一步可以继续进行主题定制、插件安装和性能优化等高级配置。
云平台一键部署最佳实践
NodeBB作为现代化的论坛软件,在云平台部署方面提供了多种便捷的解决方案。通过容器化技术和云平台集成,可以实现快速、可靠的一键部署体验。
Docker Compose 部署架构
NodeBB提供了完整的Docker Compose配置,支持多种数据库后端选择。部署架构采用微服务模式,各组件独立运行并通过网络互联:
flowchart TD
A[用户请求] --> B[NodeBB应用容器]
B --> C{MongoDB数据库}
B --> D[Redis缓存]
B --> E[PostgreSQL数据库]
C --> F[数据持久化存储]
D --> G[缓存持久化存储]
E --> H[关系数据存储]
多数据库支持配置
NodeBB支持三种主流数据库,通过环境变量灵活切换:
| 数据库类型 | 默认配置 | 适用场景 | 性能特点 |
|---|---|---|---|
| MongoDB | host: mongo, port: 27017 | 大规模数据、灵活Schema | 高性能读写、水平扩展 |
| Redis | host: redis, port: 6379 | 缓存、会话存储 | 内存级速度、高并发 |
| PostgreSQL | host: postgres, port: 5432 | 事务性应用、复杂查询 | ACID兼容、关系型 |
云平台部署配置示例
Docker Compose 核心配置
version: '3.8'
services:
nodebb:
image: nodebb/nodebb:latest
ports:
- "4567:4567"
environment:
- NODE_ENV=production
- DATABASE=mongo
depends_on:
- mongo
- redis
mongo:
image: mongo:7-jammy
environment:
MONGO_INITDB_ROOT_USERNAME: nodebb
MONGO_INITDB_ROOT_PASSWORD: nodebb
volumes:
- mongo-data:/data/db
redis:
image: redis:7-alpine
command: redis-server --appendonly yes
volumes:
- redis-data:/data
环境变量配置策略
针对不同云平台环境,推荐以下环境变量配置:
# 生产环境配置
export NODEBB_URL=https://your-forum.com
export NODEBB_SECRET=your-secure-random-string
export REDIS_PASSWORD=secure-redis-password
export MONGO_URI=mongodb://user:pass@mongo:27017/nodebb
# 开发环境配置
export NODE_ENV=development
export NODEBB_URL=http://localhost:4567
持久化存储最佳实践
为确保数据安全性和可恢复性,必须正确配置持久化存储:
volumes:
mongo-data:
driver: local
driver_opts:
type: nfs
device: :/path/to/nfs/mongo
o: addr=nfs-server.example.com,rw
redis-data:
driver: cloud-storage-driver
driver_opts:
bucket: your-redis-backups
region: us-west-2
nodebb-uploads:
driver: azure_file
driver_opts:
share_name: nodebb-uploads
storage_account_name: yourstorageaccount
高可用性部署架构
对于生产环境,建议采用多节点高可用架构:
flowchart LR
subgraph Load Balancer
LB[HAProxy/Nginx]
end
subgraph NodeBB Cluster
N1[NodeBB实例1]
N2[NodeBB实例2]
N3[NodeBB实例3]
end
subgraph Database Cluster
M1[MongoDB主节点]
M2[MongoDB从节点]
M3[MongoDB仲裁节点]
end
subgraph Redis Cluster
R1[Redis主节点]
R2[Redis从节点]
R3[Redis从节点]
end
LB --> N1
LB --> N2
LB --> N3
N1 --> M1
N2 --> M1
N3 --> M1
N1 --> R1
N2 --> R1
N3 --> R1
M1 --> M2
M1 --> M3
R1 --> R2
R1 --> R3
自动化部署流水线
建立CI/CD流水线实现自动化部署:
flowchart LR
A[代码提交] --> B[自动化测试]
B --> C[构建Docker镜像]
C --> D[推送镜像到仓库]
D --> E[云平台部署]
E --> F[健康检查]
F --> G[流量切换]
G --> H[部署完成]
subgraph 监控告警
I[性能监控]
J[错误日志]
K[资源使用]
end
H --> I
H --> J
H --> K
安全加固配置
云平台部署必须重视安全配置:
# 网络安全配置
security:
- no-new-privileges: true
- seccomp: runtime/default
# 资源限制
deploy:
resources:
limits:
memory: 1G
cpus: '0.5'
reservations:
memory: 512M
cpus: '0.25'
# 健康检查
healthcheck:
test: ["CMD", "curl", "-f", "http://localhost:4567"]
interval: 30s
timeout: 10s
retries: 3
监控与日志管理
集成云平台监控服务,确保系统可观测性:
# 日志驱动配置
logging:
driver: awslogs
options:
awslogs-group: nodebb-app
awslogs-region: us-west-2
awslogs-stream-prefix: nodebb
# 指标收集
metrics:
enabled: true
port: 9469
path: /metrics
通过以上最佳实践,可以在云平台上快速部署稳定、高性能的NodeBB论坛系统,同时确保安全性、可扩展性和可维护性。
NodeBB提供了灵活多样的部署方案,从传统的服务器安装到现代化的容器化部署,都能满足不同规模和需求的论坛搭建。通过本文的详细指导,用户可以了解NodeBB的环境要求、数据库支持、安全配置和性能优化策略。无论是选择Docker容器化部署实现快速搭建,还是采用传统服务器安装获得更多控制权,亦或是利用云平台的一键部署功能,NodeBB都能提供稳定可靠的高性能论坛服务。正确的环境配置、安全加固和监控设置是确保论坛长期稳定运行的关键。
Kimi-K2.5Kimi K2.5 是一款开源的原生多模态智能体模型,它在 Kimi-K2-Base 的基础上,通过对约 15 万亿混合视觉和文本 tokens 进行持续预训练构建而成。该模型将视觉与语言理解、高级智能体能力、即时模式与思考模式,以及对话式与智能体范式无缝融合。Python00- QQwen3-Coder-Next2026年2月4日,正式发布的Qwen3-Coder-Next,一款专为编码智能体和本地开发场景设计的开源语言模型。Python00
xw-cli实现国产算力大模型零门槛部署,一键跑通 Qwen、GLM-4.7、Minimax-2.1、DeepSeek-OCR 等模型Go06
PaddleOCR-VL-1.5PaddleOCR-VL-1.5 是 PaddleOCR-VL 的新一代进阶模型,在 OmniDocBench v1.5 上实现了 94.5% 的全新 state-of-the-art 准确率。 为了严格评估模型在真实物理畸变下的鲁棒性——包括扫描伪影、倾斜、扭曲、屏幕拍摄和光照变化——我们提出了 Real5-OmniDocBench 基准测试集。实验结果表明,该增强模型在新构建的基准测试集上达到了 SOTA 性能。此外,我们通过整合印章识别和文本检测识别(text spotting)任务扩展了模型的能力,同时保持 0.9B 的超紧凑 VLM 规模,具备高效率特性。Python00
KuiklyUI基于KMP技术的高性能、全平台开发框架,具备统一代码库、极致易用性和动态灵活性。 Provide a high-performance, full-platform development framework with unified codebase, ultimate ease of use, and dynamic flexibility. 注意:本仓库为Github仓库镜像,PR或Issue请移步至Github发起,感谢支持!Kotlin08
VLOOKVLOOK™ 是优雅好用的 Typora/Markdown 主题包和增强插件。 VLOOK™ is an elegant and practical THEME PACKAGE × ENHANCEMENT PLUGIN for Typora/Markdown.Less00