从零开始搭建博客

博客全家桶

halo

halo 是一个部署简单,操作方便,生态比较完善的一个开源博客~

部署方式又好几种,这里推荐使用 docker 的方式部署。

准备数据库

halo 的运行依赖于数据库。所以需要提前准备。

当然,它也支持一件运行数据库+本体。不推荐这种做法。

我使用的是 mysql

image.png

dockerfile 文件准备

如果你跟我一样,使用 docker compose 的话,可以直接复制我的 dockerfile 文件

version: "3"

services:
  halo:
    image: halohub/halo:2.11
    container_name: halo
    restart: on-failure:3
    network_mode: "host"
    volumes:
      - ./halo2:/root/.halo2 # 配置文件映射到外部,存到当前目录下。需要提前准备。
    command:
      # 修改为自己已有的 MySQL 配置
      - --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
      - --spring.r2dbc.username=xxxxx
      - --spring.r2dbc.password=xxxxxxx
      - --spring.sql.init.platform=mysql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=https://1love.pub/
      # 端口号 默认8090
      - --server.port=8090

开始运行

使用 docker compsoe执行文件

docker compose up -d

运行成功后,可以使用

docker compose logs -f

查看日志。

访问站点

假设你的 ip 是 192.168.0.1

那访问地址:http://192.168.0.1:8090

image-hitr.png

这就是后台的地址了。

你可以在后台进行 评论审核、文章发布等操作。

配置域名

当然,以上操作其实已经安装完成了一个简单的博客。

但是访问起来不太方便 111.222.333.444:xxxx

看到这种域名就没有访问的欲望了

所以,你需要一个域名~

各大厂商都有域名服务,大部分四位数以上的地址其实都很便宜。

有了域名之后。就可以对你的项目进行 反向代理

因为我们的项目是用 docker 进行启动的,直接配置 域名也支持。看个人喜好,我为了配置 ssl 所以选择了使用反向代理~

nginx 安装

反向代理的前提是你拥有一个 nginx,所以你需要在服务器安装。

这里推荐使用一些服务器运维面板: 宝塔、1pane...

这些服务器运维面板比较方便,一键安装各种环境~

这里以宝塔为例:

image-rdys.png

这是我们启动的 docker 服务,也就是 halo 本体

我们点击到网站目录,点击添加

image-vrra.png

这里看图,填写域名。 下面php 版本可以不选择,直接使用纯静态。

反向代理

image.png

点击网站,在弹窗中选择反向代理。点击添加,按图所示即可~

此时域名已经可以正常访问了~

图床

写文章,必定是涉及到图片存储。

如果说把图片直接上传到halo中,会有一个问题,一般的云服务器其实内存都不是那么的大~

比如我的,一共也才30G。

所以,这个时候需要一个图床。

这个图床呢,是本地的图床。

我在本地搭建了一个nas服务器。用来存储影视、图片等资料

这个nas,4T。便宜好使~

搭建图床的话,我有以下两个建议

  • 兰空(LSKY PRO)
  • chevereto

chevereto

目前 chevereto最新版,不支持中文。而且对php版本有要求,还有些拓展之类的。

不太符合我的预期。要么就安装低版本的。

兰空

使用 Laravel 框架开发。全中文,支持对接 S3、腾讯Cos、阿里oos、七牛等第三方存储,十分方便的啦。

所以,我选择的是兰空作为图床。

lsky pro 安装

lsky-org/lsky-pro: ☁️兰空图床(Lsky Pro) - Your photo album on the cloud. (github.com)

直接进Release下载最新版即可。

关于兰空的安装,这里提供官方安装文档

基础配置

安装完成之后,是这个样子

image-xjto.png

我们需要对他进行一点点的配置

系统设置

image-uloq.png

因为我们这个图床,仅仅是给自己使用的,并不需要给别人使用。所以,这里关闭游客上传、注册。

如果开了游客上传、注册,十分不好搞。如果别人上传点奇奇怪怪的东西,就烂掉了。。当然,你也可以配置审核策略

审核策略

image-avml.png

是的,兰空支持腾讯云、阿里云以及Nefwjs做审核。我不太推荐,我想省钱~并不想去为了这个花钱。

常规设置

因为是给自己使用的,所以直接给上传数量、文件大小、拉满!

image-wozp.png

关联typora

图床配置成功了,怎么让我在写md文档的时候,直接上传到图床,而不是手动上传,并复制出链接呢?

请看VCR:

配置图床 | 38.5° (1love.pub)

对象存储

已经有图床了,为什么还要搞个对象存储?岂不是多此一举?

我只能说:生命在于搞事~

开玩笑的。

图床有个很致命的缺点,比如我,其实我更喜欢直接在网页,或者vscode中直接编写文档。

此时图床就不太爽利了。。

于是乎,就萌生了搞个对象存储的想法。

当然,还是在本地搭建的,没花钱。

minIO

我看了下,只有这一个选项。

安装minIO

依然是熟悉的配方,docker

docker run -p 9000:9000   -p 9001:9001 --name minio \
-d --restart=always \
-e "MINIO_ACCESS_KEY=222" \ # 账号
-e "MINIO_SECRET_KEY=333333333 \ # 密码
-v /data/minio-data:/data \ # 对应的数据映射
-v /data/minio-config:/root/.minio \ # 他也是!
 minio/minio server /data  --console-address ":9001" --address ":9000" # 看下文!
  • server /data 表示文件存储在/data下
  • 9001 代表的是web console的端口。 当docker启动完成后,可以使用 ip:9001访问
  • 9000 可以理解是向外暴露的接口端口

创建accesskey

image-ratj.png

创建的时候会有弹窗,让你把key下载到本地。此时可以下载下来,保存一波~

创建存储桶

image-lbug.png

创建完成之后记得把这个桶的权限改成public。

不然是加载不了的哦~

image-gtfc.png

配置https

因为我们的博客站点是https的,所以我们的对象存储,访问图片的地址也应该是https的,不然没法加载。

但是我们的服务是docker启动的,怎么处理?

还是老配方,使用反向代理。

但是要记住,9001和9000端口,不要代理错了。

我们只需要代理9000端口就行了。

因为我们上传完文件,使用 域名+桶名称+文件名称=>图片,是使用的9000端口。

比如本站的图片:io.1love.pub/38d5/1.png

其实就是代理的原始ip的9000端口~

在web编辑器中配置

需要前置一个插件

image-adjb.png

需要先安装好这个插件,再进行以下操作~😕

image-xrnb.png

image-vvdp.png

image-kcrb.png

这个地方一定要注意!

一定是 域名+桶名!

然后就可以上传图片试试了~

如果失败了,需要去看docker的日志。

vscode

这里需要安装一个halo的vscode插件

Halo - Visual Studio Marketplace

安装完成后,根据操作提示,进行文章同步、上传、图片上传等操作~