2022-09-01
老年痴呆
00

目录

搭建背景
搭建流程
安装docker
安装MongoDB
部署VanBlog
至此
初始化
总结
分割
后续填坑
问题概述
问题详述
问题解决
踩坑总结

搭建背景

须知:在搭建本博客之前,我对docker、MongoDB都是只闻其名,却从未接触,更别提日新月异的前端技术了。即便在此情况下,我依然成功搭建了本站,今日在这把本菜鸟的纯小白搭建流程记录下来,以作日后阅读,看看原来自己是如此之菜,过程究竟如何,且听我一一道来。

提示:本文主要讲述个人思路变化过程,不是正确部署流程,不要按照本文搭建!!!请参照官方文档部署!!!


本人作为一名Java后端,已然工作了几个年头,却仍旧是一位菜鸟。建立个人博客的心思,从工作之初直到现在,从未停歇,但也从未成功。前日(2022-8-31)偶然在GitHub黑板报公众号读到关于van-blog的文章,昨日抱着姑且一试的心态尝试搭建,竟真的成功了。

回头来看,我的搭建流程如下:

  1. 找到VanBlog的GitHub仓库,阅读README,阅读部署手册
  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 入门教程,在里边读了一会,就忘了提供了快速安装的命令,自己去百度如何安装去了😂

安装完成后,验证了一下安装成功就下一步了,验证命令:

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】。

安装完成后,配置了数据、日志相关文件夹,启动了MongoDB,发现没有mongo的可执行文件,一度使我怀疑安装有问题,浪费了个把时辰也没解决,最终发现是MongoDB新版本,没有该程序。。。最后也就不了了之。

  • PS:后来想查看MongDB数据咨询了官方大佬,才得知默认使用的MongDBdocker容器内部的服务,并未使用本人安装的这个MongoDB。。。
  • 尴了个大尬,费这么大劲竟然是无用功。。。详见:ISSUE

部署VanBlog

安装完dockerMongoDB后,我认为时机成熟,该实际部署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已经安装完成,恭喜自己!

初始化

安装完成后,即可进行博客初始化:官方文档

初始化时可准备如下信息,若第一次初始化没有如下信息,也可以先随意填写,以后在后台管理中重新设置:

  • 域名
  • 网站名
  • 网站图标图片
  • 个人名称
  • 个人头像图片
  • 支付宝收款码
  • 微信收款码

总结

菜是真的菜。

有时候一个思路的转变,就能少走一大段弯路。

编程切勿纸上谈兵,一切代码都需要自己去实践和感受,才能真正建立自己的理解。


分割

后续填坑

刚部署vanblog的时候,docker原理及其配置我是一点都不懂的,只知道他的基本信息,当时就想到可能会由于一些东西不懂,导致出现一些严重bug,没过两天就出现了

问题概述

  • 当我更新、重启Vanblog时,所有数据都会丢失。

问题详述

我部署vanblog时,官方大佬还在频繁开发源码中,并且发布了较多新版本,没过几天我部署的版本已经落后了很多,所以我打算升级我的版本。

庆幸大佬有先见之明,系统数据导入导出的功能还是很实用的,我做好了数据备份,按照官方文档更新我的版本,更新完成后启动,此时问题出现了,我的数据都没了。

此时我心里有两种猜想:

  • 我配置的什么地方不对?
  • vanblog就这样?

这有两种猜想的原因这里说一下

  1. 第一种猜想,是因为我改了docker-compose.yml中的一些关于文件夹的配置;
  2. 第二种猜想,原因有两个:一、官方提供这么完善的备份导入导出功能,是不是就是干这个用的?二、如果我的配置不对,为啥服务能正常运行并使用呢???

问题解决

最后实践证明了,官方大佬威武,是我的配置问题。。。

具体解决过程有以下几步:

  1. 我去问了一个略懂docker的同事,知道了文件夹映射原理
  2. 去学习了一下文件映射的配置含义和写法
  3. docker-compose.yml文件中的配置修改为正确的
  4. 重新部署一遍vanblogmongodb

踩坑总结

踩中此坑原因:

  • 根本原因:不会docker,不会docker-compose
  • 直接原因:惯性思维。具体表现为:认为文件映射的键值对配置中,key是docker使用的,value是本地的。

再一次:编程切勿纸上谈兵,一切代码都需要自己去实践和感受,才能真正建立自己的理解。

如果对你有用的话,可以打赏哦
打赏
ali pay
wechat pay

本文作者:DingDangDog

本文链接:

版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!