本人搭建VanBlog的过程
## 搭建背景 须知:在搭建本博客之前,我对docker、MongoDB都是只闻其名,却从未接触,更
渲染中...
## 搭建背景
须知:在搭建本博客之前,我对docker、MongoDB都是只闻其名,却从未接触,更别提日新月异的前端技术了。即便在此情况下,我依然成功搭建了本站,今日在这把本菜鸟的纯小白搭建流程记录下来,以作日后阅读,看看原来自己是如此之菜,过程究竟如何,且听我一一道来。
> 提示:本文主要讲述个人思路变化过程,不是正确部署流程,不要按照本文搭建!!!请参照官方文档[部署](https://vanblog.mereith.com/guide/docker.html)!!!
<div class="article-ads"></div>
<!-- more -->
---
本人作为一名Java后端,已然工作了几个年头,却仍旧是一位菜鸟。建立个人博客的心思,从工作之初直到现在,从未停歇,但也从未成功。前日(2022-8-31)偶然在`GitHub黑板报`公众号读到关于`van-blog`的文章,昨日抱着姑且一试的心态尝试搭建,竟真的成功了。
回头来看,我的搭建流程如下:
1. 找到VanBlog的GitHub仓库,阅读README,阅读[部署手册](https://vanblog.mereith.com/guide/docker.html)。
2. 安装docker。
3. 安装MongoDB。
4. 部署VanBlog镜像。
5. 初始化配置。
## 搭建流程
### 安装docker
首先,阅读VanBlog的【快速上手-部署】,映入眼帘的第一个需要操作的步骤,就是安装docker。此步对于有过Linux操作经验的我来说,那真是驾熟就轻,文中提供了快速安装的命令:
```sh
sudo curl -sSL https://get.daocloud.io/docker | sh
sudo systemctl enable --now docker
```
但我没有用,因为我点进了[Docker 入门教程](https://www.ruanyifeng.com/blog/2018/02/docker-tutorial.html),在里边读了一会,就忘了提供了快速安装的命令,自己去百度如何安装去了😂
安装完成后,验证了一下安装成功就下一步了,验证命令:
```shell
$ docker version
# 或者
$ docker info
```
### 安装MongoDB
安装`MongoDB`饶是废了不少功夫,在【快速上手-部署】中,并未说明需要安装`MongoDB`,但以我多年的作案(犯错)经验,直觉告诉我应该安装`MongoDB`,因为我看到`docker-compose.yml`中有mongo相关的配置信息:
```yml
version: "3"
services:
vanblog:
# 默认 dockerhub 源
image: mereith/van-blog:latest
restart: always
environment:
TZ: "Asia/Shanghai"
# 图片资源允许的域名,英文逗号分隔。作者 logo 加载不出来请检查此项。
VAN_BLOG_ALLOW_DOMAINS: "www.mereith.com"
# CDN URL,包含协议,部署到 cdn 的时候用。在开启 cdn 之前请不要设置此项。
# VAN_BLOG_CDN_URL: "https://www.mereith.com"
# mongodb 的地址
VAN_BLOG_DATABASE_URL: "mongodb://vanBlog:vanBlog@mongo:27017/vanBlog?authSource=admin"
# jwt 密钥,随机字符串即可。请注意保密!所有的密码都由此密钥签发!
VAN_BLOG_JWT_SECRET: "AnyString"
# 邮箱地址,用于自动申请 https 证书
EMAIL: "[email protected]"
# 内嵌评论系统的 db 名,默认为 waline
VAN_BLOG_WALINE_DB: "waline"
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:
image: mongo
restart: always
environment:
TZ: "Asia/Shanghai"
# 如果你改了这两个,那上面的数据库连接地址也要同步修改。
# mongoDB 初始化用户名
MONGO_INITDB_ROOT_USERNAME: vanBlog
# mongoDB 初始化密码
MONGO_INITDB_ROOT_PASSWORD: vanBlog
volumes:
# mongoDB 数据存放地址,按需修改。
- ${PWD}/data/mongo:/data/db
```
所以我百度了如何安装`MongoDB`,参照了菜鸟教程的文章【[Linux平台安装MongoDB](https://www.runoob.com/mongodb/mongodb-linux-install.html)】。
安装完成后,配置了数据、日志相关文件夹,启动了`MongoDB`,发现没有`mongo`的可执行文件,一度使我怀疑安装有问题,浪费了个把时辰也没解决,最终发现是`MongoDB`新版本,没有该程序。。。最后也就不了了之。
> - PS:后来想查看`MongDB`数据咨询了官方大佬,才得知默认使用的`MongDB`是`docker`容器内部的服务,并未使用本人安装的这个`MongoDB`。。。
> - 尴了个大尬,费这么大劲竟然是无用功。。。详见:[ISSUE](https://github.com/Mereithhh/van-blog/issues/22)
### 部署VanBlog
安装完`docker`和`MongoDB`后,我认为时机成熟,该实际部署`VanBlog`了,但却没了思路,不知从何下手。
目前有以下信息:
- 首先,我还不知道`docker-compose.yml`有何用?放在哪?但肯定是`doker`需要用的某种配置。
- 其次,根据我对`docker`仅有的了解,我需要有个`VanBlog`打包好的docker镜像,然后运行某个`docker命令`,部署该镜像。
- 最后,官方提供了一个命令```sudo docker-compose up -d ```是干啥的?和`docker-compose.yml`什么关系?
根据以上三点信息,我有了一个猜想,`docker-compose.yml`是打包docker镜像的配置文件?使用`docker-compose up -d`生成docker镜像,有想法就有实践:
1. 把VanBlog源码down了下来
2. 添加了`docker-compose.yml`文件但项目根目录
3. 满怀自信的在终端执行了`docker-compose up -d`命令(用的vscode)
4. 果不其然报错了:
> ```
> PS E:\code\DingDangDog_sapce\van-blog> .\docker-compose up -d
> .\docker-compose : 无法将“.\docker-compose”项识别为 cmdlet、函数、脚本文件或可运行程序的名称。请检> 查名称的拼写,如果包括路径,请确保路径正确,然后再试一次。
> 所在位置 行:1 字符: 1
> + .\docker-compose up -d
> + ~~~~~~~~~~~~~~~~
> + CategoryInfo : ObjectNotFound: (.\docker-compose:String) [], CommandNotFoundException
> + FullyQualifiedErrorId : CommandNotFoundException
> ```
由此,改变思路,在这这行不了,在Linux上是否能执行呢?
又看了一遍`docker-compose.yml`的内容,发现有个配置:
```
services:
vanblog:
# 默认 dockerhub 源
image: mereith/van-blog:latest
```
不由得思考,这是`docker镜像`的名称?难道官方发布了镜像到公网的`docker镜像仓库`?像`Maven中央仓库`一样?再一次有想法就有实践:
1. 将`docker-compose.yml`上传至服务器
2. 在`docker-compose.yml`的同一个文件夹内,再次满怀自信的执行`docker-compose up -d`命令,却又报错,找不到`docker-compose`命令?
3. 查找`docker-compose`安装方法,还真有,此时已经确定思路是对的。
之后就是安装`docker-compose`并运行命令`docker-compose up -d`。
运行后便会显示下载并部署镜像的日志。
### 至此
> 至此,`VanBlog`已经安装完成,恭喜自己!
<div class="article-ads"></div>
## 初始化
安装完成后,即可进行博客初始化:[官方文档](https://vanblog.mereith.com/guide/init.html)
初始化时可准备如下信息,若第一次初始化没有如下信息,也可以先随意填写,以后在后台管理中重新设置:
- 域名
- 网站名
- 网站图标图片
- 个人名称
- 个人头像图片
- 支付宝收款码
- 微信收款码
## 总结
> 菜是真的菜。
>
> 有时候一个思路的转变,就能少走一大段弯路。
>
> 编程切勿纸上谈兵,一切代码都需要自己去实践和感受,才能真正建立自己的理解。
---
## 分割
## 后续填坑
> 刚部署`vanblog`的时候,docker原理及其配置我是一点都不懂的,只知道他的基本信息,当时就想到可能会由于一些东西不懂,导致出现一些严重bug,没过两天就出现了
### 问题概述
- 当我更新、重启`Vanblog`时,所有数据都会丢失。
### 问题详述
我部署`vanblog`时,官方大佬还在频繁开发源码中,并且发布了较多新版本,没过几天我部署的版本已经落后了很多,所以我打算升级我的版本。
庆幸大佬有先见之明,系统数据导入导出的功能还是很实用的,我做好了数据备份,按照官方文档更新我的版本,更新完成后启动,此时问题出现了,我的数据都没了。
此时我心里有两种猜想:
- 我配置的什么地方不对?
- `vanblog`就这样?
这有两种猜想的原因这里说一下
1. 第一种猜想,是因为我改了`docker-compose.yml`中的一些关于文件夹的配置;
2. 第二种猜想,原因有两个:一、官方提供这么完善的备份导入导出功能,是不是就是干这个用的?二、如果我的配置不对,为啥服务能正常运行并使用呢???
### 问题解决
最后实践证明了,官方大佬威武,是我的配置问题。。。
具体解决过程有以下几步:
1. 我去问了一个略懂docker的同事,知道了文件夹映射原理
2. 去学习了一下文件映射的配置含义和写法
3. 把`docker-compose.yml`文件中的配置修改为正确的
4. 重新部署一遍`vanblog`及`mongodb`
### 踩坑总结
踩中此坑原因:
- 根本原因:不会`docker`,不会`docker-compose`。
- 直接原因:惯性思维。具体表现为:认为文件映射的键值对配置中,`key`是docker使用的,`value`是本地的。
再一次:**编程切勿纸上谈兵,一切代码都需要自己去实践和感受,才能真正建立自己的理解。**
<div class="article-ads"></div>END
评论
登录后查看和发表评论
前往登录