快速上手
欢迎使用 VanBlog ,只需几个步骤,你就可以在你的服务器搭建自己的博客服务了。
提示
目前 VanBlog 还在快速迭代中,如果后台出现升级提示,推荐进行升级。
介绍
VanBlog
VanBlog 是一款简洁实用优雅的高性能个人博客系统。支持 HTTPS 证书全自动按需申请、黑暗模式、支持移动端自适应和评论,内置流量统计与图床,内嵌评论系统,配有完备的、支持黑暗模式、支持移动端、支持一键上传剪切板图片到图床、带有强大的编辑器的后台管理面板。
你也可以先查看 Demo,账号密码均为 demo
。
配置要求
理论上 VanBlog 不需要很高的配置,实际上演示站不算数据库,资源的占用情况如图:
不到 400M
的内存(有一部分还是静态页面缓存),启动时大概峰值占用处理器一个核心的 30%
,其余时间基本不占用什么处理器资源。
但比较小的带宽可能会让页面加载变慢(第一次慢,后面的话有缓存加速就会快一些),如果带宽比较小的话可以尝试设置一下 CDN。
部署方式
你可以运行下方命令,通过脚本一键部署 VanBlog。
curl -L https://vanblog.mereith.com/vanblog.sh -o vanblog.sh && chmod +x vanblog.sh && ./vanblog.sh
如果未来需要再次运行脚本,可直接运行:
./vanblog.sh
启动完毕后,请 完成初始化。
提示
- 只推荐在纯 Linux 环境下使用此脚本,宝塔面板也可以使用。脚本推出不久,未经过广泛测试,如有问题请反馈!
- 如果你想在外部访问数据库,请参考 部署常见问题 → 如何从外部访问数据库。
- 反代时只需要反代映射的 HTTP 端口,详见 反代配置。由于 VanBlog 是一个整体,无需考虑内部的 Caddy。
1.安装依赖
如果你没有安装 docker
和 docker-compose
,可以通过以下命令一键安装:
curl -sSL https://get.daocloud.io/docker | sh
systemctl enable --now docker
提示
如果你没有接触过 docker
,可以查看 Docker 入门教程。
环境要求
只需安装 docker
和 docker-compose
即可,不需要手动安装 mongoDB
,因为编排中已经包含了数据库(数据库是通过 docker 容器化运行的,不需要手动安装)。
2.新建编排文件
在安装好了 docker
和 docker-compose
后,新建一个 vanblog
的目录,在这个目录下新建 docker-compose.yaml
文件,内容如下:
version: '3'
services:
vanblog:
# 阿里云镜像源
# image: registry.cn-beijing.aliyuncs.com/mereith/van-blog:latest
image: mereith/van-blog:latest
restart: always
environment:
TZ: 'Asia/Shanghai'
# 邮箱地址,用于自动申请 https 证书
EMAIL: 'someone@mereith.com'
volumes:
# 图床文件的存放地址,按需修改。
- ${PWD}/data/static:/app/static
# 日志文件
- ${PWD}/log:/var/log
# Caddy 配置存储
- ${PWD}/caddy/config:/root/.config/caddy
# Caddy 证书存储
- ${PWD}/caddy/data:/root/.local/share/caddy
ports:
# 前面的是映射到宿主机的端口号,改端口的话改前面的。
- 80:80
- 443:443
mongo:
# 某些机器不支持 avx 会报错,所以默认用 v4 版本。有的话用最新的。
image: mongo:4.4.16
restart: always
environment:
TZ: 'Asia/Shanghai'
volumes:
- ${PWD}/data/mongo:/data/db
所有可用的环境变量详见 参考 → 环境变量。
3.启动项目
按注释说明修改 docker-compose.yaml
的配置后运行:
docker-compose up -d
启动完毕后,请 完成初始化。
以下是一个 kubernetes 的部署参考:
kind: Deployment
apiVersion: apps/v1
metadata:
name: van-blog
labels:
app: van-blog
spec:
selector:
matchLabels:
app: van-blog
template:
spec:
volumes:
- name: host-time
hostPath:
path: /etc/localtime
type: ''
- name: static
hostPath:
path: /var/k8s/van-blog/static
type: ''
- name: log
hostPath:
path: /var/k8s/van-blog/log
type: ''
containers:
- name: van-blog
image: 'mereith/van-blog:latest'
ports:
- name: http-80
containerPort: 80
protocol: TCP
- name: https-443
containerPort: 443
protocol: TCP
env:
- name: VAN_BLOG_DATABASE_URL
value: >-
mongodb://some@some@van.example.com:27017/vanBlog?authSource=admin
- name: EMAIL
value: >-
vanblog@mereith.com
resources:
requests:
memory: '300Mi'
cpu: '250m'
limits:
memory: '500Mi'
cpu: '500m'
volumeMounts:
- name: host-time
readOnly: true
mountPath: /etc/localtime
- name: static
mountPath: /app/static
- name: log
mountPath: /var/log
imagePullPolicy: Always
启动完毕后,请 完成初始化。
温馨提示
VanBlog 现在支持一键脚本部署了。经过测试,宝塔也可以通过一键脚本进行部署。
建议您通过一键脚本部署,这样后期可以通过脚本一键升级会方便一些。
如果您想通过图形化部署,请看下文。
宝塔面板自带的 nginx 会占用 80 端口,所以以下教程用的 8880 端口,如果您想关闭 nginx,可以输入 nginx -s stop
,并把端口映射改为默认的 80 和 443。
否则默认需要您反代 8880
端口。
你也可以通过宝塔面板图形化操作部署 VanBlog,具体步骤如下:
安装依赖
进入宝塔后台,点击侧边栏 Docker
,点击安装按钮。
耐心等一会,宝塔会自动安装好这些:
添加 docker-compose 模板
如图所示,添加 docker-compose
模板,模板名称为 vanblog
,描述随意。
模板内容请复制下面的代码,注意需要按注释修改 EMAIL
为你的邮箱:
version: '3'
services:
vanblog:
# 阿里云镜像源
# image: registry.cn-beijing.aliyuncs.com/mereith/van-blog:latest
image: mereith/van-blog:latest
restart: always
environment:
TZ: 'Asia/Shanghai'
# 邮箱地址,用于自动申请 https 证书
EMAIL: 'someone@mereith.com'
volumes:
# 图床文件的存放地址,按需修改。
- /var/vanblog/data/static:/app/static
# 日志文件
- /var/vanblog/log:/var/log
# Caddy 配置存储
- /var/vanblog/caddy/config:/root/.config/caddy
# Caddy 证书存储
- /var/vanblog/caddy/data:/root/.local/share/caddy
ports:
# 前面的是映射到宿主机的端口号,该端口的话改前面的。
- 8880:80
- 4443:443
mongo:
# 某些机器不支持 avx 会报错,所以默认用 v4 版本。有的话用最新的。
image: mongo:4.4.16
restart: always
environment:
TZ: 'Asia/Shanghai'
volumes:
- /var/vanblog/data/mongo:/data/db
所有可用的环境变量详见 参考 → 环境变量
启动
如下图所示,新建 Compose
项目,名称写 vanblog
,模板选择刚刚创建的。
然后会弹出窗口拉取镜像启动容器:
启动完毕后,请 完成初始化。
调整 nginx 缓存
根据群友反应,宝塔的 nginx 配置反代后经常会出现缓存问题,具体表现为在后台修改后,内容不能及时反映到前台页面上。
这时需要设置手动在宝塔 nginx 设置一个较短的缓存时间即可(比如1分钟),不然默认的缓存时间会很长。
如果宝塔已有项目较少,还是推荐使用 nginx-proxy-manager 进行反代管理会更方便。
常见问题
部署失败
请查看容器的日志进行排查。
端口被占用
需要修改编排文件里的端口映射,改为非常用端口。
如果你只部署 VanBlog ,并想关闭 Ngnix ,请输入以下命令关闭 Ngnix:
nginx -s stop
首先安装 Docker
套件。
下载镜像
在 Docker
套件中点击 映像/新增/从 URL 添加
:
填入地址为 mereith/van-blog
:
标签选择默认的 latest
即可:
仿照上面的增加 mongo
镜像,版本选择 4.4.9
的,如图所示(有些机器不支持 AVX,用最新的会报错):
完成后如图:
创建容器
创建 mongoDB 容器
点击 容器/新建
,选中刚刚下载的 mongo
镜像。
容器名称设置为 mongo
,其他的一路下一步就行。
如果不嫌麻烦,最后把数据存储映射一下:| 容器内目录 | 说明 | | ------------------------ | ----------------------------------------------------------- | | /data/db
| 数据库的存储 |
完成后启动即可。
创建 VanBlog 容器
和上面一样,点击 容器/新建
,选中刚刚下载的 mereith/van-blog:latest
镜像,容器名称为 VanBlog。
环境变量
点击 高级设置/环境
,其他的都可忽略,但下表的环境变量需要设置/新加:
名称 | 值 |
---|---|
你自己的邮箱 |
参考
- 在 参考 → 环境变量 中所示设置好环境变量。
链接
为了让 VanBlog 容器内可以访问之前创建的 mongo
容器,在 高级设置/链接
中添加链接到之前创建的 mongo
容器。
端口映射
然后点击下一步,进行端口映射,群晖不能用默认的 80
端口,所以可以映射成其他端口,比如 8880
。
存储空间映射
可以参考 VanBlog 文档/环境变量配置 中的目录映射部分进行映射。
其中图床数据的目录映射推荐做一下,不然重置后可能会让你的博客本地图床图片都失效。
容器内目录 | 说明 |
---|---|
/app/static | 图床中数据的存放路径,使用内置图床请务必映射好! |
/var/log | 日志的存放路径,包括 access 日志、 Caddy 日志和前台服务日志 |
/root/.config/caddy | Caddy 配置存储路径 |
/root/.local/share/caddy | Caddy 证书存储路径 |
完成
然后点击完成即可:
错误排查
如果发生错误,可以在容器日志中查看报错原因。
后续
启动完毕后,请 完成初始化。
注意
如果你想在公网访问,最好现在 配置好反代,用最终使用的 URL 来访问进行初始化,否则内置图床上传的图片链接可能会有问题。
容器化的优点
VanBlog 的定位是简洁实用的,尽可能的减少复杂的配置。
VanBlog 内部由很多微服务组成,直接部署到裸机环境可能会由于硬件、系统版本不同、软件不同而出现很多意料之外的问题,容器化可以提供很好的隔离环境,避免因这些差异导致的问题。
使用容器部署 VanBlog 学习成本小,迁移和升级都非常方便,与一键部署近乎没区别。(容器化真的是很好的技术,我很推荐大家都去学习一下)
自行部署须知
裸机部署需要的知识储备以及常见问题(不同的 node 版本、端口被占用、不同的系统、部署路径的影响等等)可能远大于简单的学习 docker-compose up -d
这一个指令。
裸机部署需要的时间远远大于你起一个容器的时间,如果你执意要裸机部署,请继续往下看。裸机部署遇到的问题,请自行百度。
环境要求
项目 | 要求 | 备注 |
---|---|---|
Nodejs | >=16 | 长期支持版即可,可用 nvm 管理 node 版本 |
pnpm | v7 | pnpm 包管理器,其他管理器不能识别 pnpm-lock.yaml 可能导致问题 |
操作系统 | Linux | 主流 linux 发行版即可 |
MongoDB | - | 主流 mongodb 版本 |
Caddy | v2 | Caddy v2 反代各个微服务,其他的反代理论上可以,但是需要自己写配置 |
后台运行程序 | - | 可以让服务后台运行,比如 systemd、tmux 等 |
部署
因为最近更新比较快,单独部署的老板文档已经不在合适,对于有能力的同学,直接参考 Dockerfile
即可。