百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术文章 > 正文

「Docker应用」搭建个人博客-Halo

nanshan 2025-01-09 15:06 9 浏览 0 评论

基本上安装过程与咕咕鸽分享的教程一致,只是部署的位置不同。咕咕鸽的教程是直接在服务器上部署。而我们会将博客部署在内网环境中,并使用内网穿透的方式映射到公网中,最后通过反向代理实现域名访问。关于内网穿透,这里只做简要说明。同样,关于反向代理也只做配置的一部分说明。我们目前使用的是 Zerotier 实现内网穿透,并使用 Nginx 做反向代理。

下面先讲讲为什么选择这样繁琐的方式搭建个人博客。在购买服务器时,我们相对更注重价格而非性能。现在我们的服务器上运行了较多的服务,为了将来能够拥有更多的玩法,我们选择了内网穿透和反向代理的方式进行部署。

这种部署方式有一个好处就是,在内网环境中完成博客的部署后,我们只需要在本地服务器上添加服务,通过穿透和反向代理就可以快速地映射到公网中。同样,如果在内网中发现了问题,也可以轻松进行修改,然后再映射到公网上。

好了,废话说了这么多,下面正式开始。

Halo 2.0 简介

在选择 Halo 博客之前,我们看了很多平台,包括 Hexo、WordPress、Typecho 等。甚至在以前,我们尝试过使用 HTML 自己编写前端,并直接在服务器上使用宝塔面板部署。最终,我们选择了 Halo,因为它最适合我们目前的需求。

由于工作原因,我们需要记录一些笔记,并一直使用 Notion 进行记录。这次,我们希望能够将个人博客和笔记需求合二为一,并且最重要的是博客必须轻量化。我们不喜欢过于复杂的界面,因此 Halo 成为了最适合我们的平台。

Halo 界面简单、功能完善,且支持后台编辑,非常适合我们当前的个人需求。

有关更详细的特点,大家可以访问官网(https://www.halo.run)了解。

项目部署

(1)环境准备

当前部署环境:

服务器:本地服务器(戴尔 R730XD)

部署系统:Debian 12(EXSI 8.0 虚拟机)

需要安装:Docker、Docker-compose、Nginx Proxy Manager(可选)、Zerotier(可选)

需要准备一个域名(可选)。在进行反向代理时需要使用,我们的域名是很久以前在贝锐(https://domain.oray.com)购买的。大家可以自己寻找平台购买,也可以使用免费的域名。——注:如果条件允许,建议看看国外的供应商,国内备案太麻烦。

(2)部署Halo

通过 SSH 登录到服务器(最好使用 ROOT 用户登录,以防权限不足)。这里我们演示使用 MAC OS 终端命令ssh 「用户名」@「IP地址」 -p 「端口号」格式进行登录。

ssh [root@10.100.1.21](mailto:root@10.100.1.21) -p 22

输入用户密码后即可登录。

接下来创建安装目录,并进入该目录。可以任意创建,便于分类容器。


mkdir -p /root/data/docker_data/halo




cd /root/data/docker_data/halo

这里使用 Docker Compose 进行部署。首先在文件夹中创建一个 docker-compose.yml 文件(我们习惯使用 vi 工具,大家可以使用其他工具,原理相同):

vi docker-compose.yml

然后将 Docker Compose 的内容直接复制到 docker-compose.yml 文件中:


version: "3"




services:


halo:


image: halohub/halo:2.10


container_name: halo


restart: on-failure:3


depends_on:


halodb:


condition: service_healthy


networks:


halo_network:


volumes:


- ./halo2:/root/.halo2


ports:


- "9100:8090"


# 将内部端口8090映射到容器外部9100,确保外部端口未被占用


healthcheck:


test: ["CMD", "curl", "-f", "http://localhost:8090/actuator/health/readiness"]


interval: 30s


timeout: 5s


retries: 5


start_period: 30s


command:


- --spring.r2dbc.url=r2dbc:pool:mysql://halodb:3306/halo


- --spring.r2dbc.username=root


# MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。


- --spring.r2dbc.password=o#DwN&JSa56


- --spring.sql.init.platform=mysql


# 外部访问地址,请根据实际需要修改


- --halo.external-url=https://xn--9krq6q.xn--1jvr1n.xn--fiqs8s




halodb:


image: mysql:8.1.0


container_name: halodb


restart: on-failure:3


networks:


halo_network:


command:


- --default-authentication-plugin=caching_sha2_password


- --character-set-server=utf8mb4


- --collation-server=utf8mb4_general_ci


- --explicit_defaults_for_timestamp=true


volumes:


- ./mysql:/var/lib/mysql


- ./mysqlBackup:/data/mysqlBackup


ports:


- "3306"




healthcheck:


test: ["CMD", "mysqladmin", "ping", "-h", "127.0.0.1", "--silent"]


interval: 3s


retries: 5


start_period: 30s


environment:


# 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值


- MYSQL_ROOT_PASSWORD=o#DwN&JSa56


- MYSQL_DATABASE=halo




networks:


halo_network:

注意:
一定要修改数据库密码以防意外发生
--halo.external-url=http://localhost:8090/,其中的 http://localhost:8090/ 需要更改为你的域名。如果你想使用域名 abc.com,将其改为 --halo.external-url=https://abc.com
在数据库的 3306 端口处,我们并未将其写成 3306:3306,而是改为了前者。这样做是为了不将 Halo 数据库的端口暴露在公网,从而在一定程度上保障博客的安全性(来自咕咕鸽的额外提醒)

保存退出。如果和我们一样使用 vi 工具,请直接按下 ESC 键,然后输入英文冒号 :wq 即可保存并退出。

保存成功后,可以查看端口情况,防止冲突。如果同时运行了许多服务,可以使用 lsof -i:「端口号」 命令查询。


lsof -i:8090


lsof -i:3306

如果出现下面的命令未找到的错误信息:-bash: lsof: command not found,可以运行 apt install lsof 命令安装 lsof。

apt install lsof

如果查询端口没有显示任何信息,说明该端口未被占用。

这样我们就可以开始部署了,在确保当前处于刚刚设置 Docker Compose 的文件夹下时,使用 docker-compose up -d 开始部署 Halo。


cd /root/data/docker_data/halo # 进入 docker-compose 文件所在的文件夹下




docker-compose up -d

如果使用 docker-compose up -d 命令时出现 ***yaml: line 17: found character that cannot start any token 错误。只需要重新进入 docker-compose,删除注释即可(小声地嘀咕,写文章的时候正在同步操作,习惯性地按了 TAB 键。当然,发布时肯定已经修改了这个问题)。

安装完成后,理论上我们可以使用 http://IP:9100 访问 Halo 了。

然后首次访问我们根据自己的情况进行设置,设置完成即可登录。

这篇文章将是我们在博客上发布的第一篇文章。

到这里,重新使用 http://IP:9100 就可以访问前端了。接下来,大家可以自行探索 Halo 的使用。

(3)内网穿透和反向代理

由于我们在服务器上进行了内网穿透,公网服务器可以直接使用 IP 访问内网。关于内网穿透的教程,我们会尽快更新。因此,我们直接进行反向代理的设置,进入 Nginx Proxy Manager 后台。

在后台设置域名、内网地址和端口号。

注意:
对于 docker-compose.yml 文件中的 --halo.external-url=http://localhost:8090/ 部分,其中的 http://localhost:8090/ 需要更改为你的域名。例如,如果你的域名是 abc.com,那么需要改为 --halo.external-url=https://abc.com(来自咕咕鸽的额外提醒)。

然后申请一个 SSL 证书,只允许加密通信。

最后,使用域名尝试访问。

成功!我们即将更新我们的第一篇博客。

(4)卸载 Halo

卸载 Halo 首先进入到 Halo 的 Docker Compose 文件夹中,使用 docker-compose down 命令删除。


cd /root/data/docker_data/halo




docker-compose down

然后返回上一级文件夹,使用 rm -rf 「文件路径」 删除相应的文件。

成功删除后,就没有 Halo 文件夹了。

感谢大家阅读。

相关推荐

Linux 的磁盘系统,和你了解的Windows差别很大

我的C盘去哪了?一个系统,如果没有存储,那么也就不能称之为系统。存储性是一个完整系统的重要组成部分。例如AWS最开始的服务就是S3(用来存储数据的云服务),足以见得存储对于一个应用平台是多么的重要。...

一文读懂 Linux 硬盘挂载:从问题到解决方案

各位互联网大厂的后端开发伙伴们!在咱们日常工作中,操作Linux系统是常有的事儿吧。你们有没有遇到过这样的场景:新添加了一块硬盘,满心欢喜准备用来存储重要数据或者部署新的应用服务,却突然发现不知道...

硬盘分区(硬盘分区格式)

 磁盘(硬盘)分区,可以分C、D、E等分区,大家可能都会用,会根据自已的需要确定所需的空间,但分区是如何工作的呢,内容如下。Windows中有3类:MBR分区:MasterBootRecord,也...

parted命令工具分区介绍(particle命令)

linux系统磁盘分区通常可以使用fdisk和parted命令,当分区大小小于2TB的时候,两种皆可以使用,当分区大于2TB的话,就需要用parted分区。以下介绍parted命令相关使用,以sdb为...

Linux 服务器上查看磁盘类型的方法

方法1:使用lsblk命令lsblk输出说明:TYPE列显示设备类型,如disk(物理磁盘)、part(分区)、rom(只读存储)等。NAME列显示设备名称(如sda、nvme0n1)。TR...

Linux分区命令fdisk和parted使用介绍

摘要:一般情况下,Linux分区都是选择fdisk工具,要求硬盘格式为MBR格式,能支持的最大分区空间为2T。但是目前在实际生产环境中使用的磁盘空间越来越大,呈TB级别增长;而常用的fdisk这个工具...

linux 分区原理与名词解释(linux操作系统中的分区类型)

分区的意义将磁盘分成几份,每份挂在到文件系统的那个目录在linux里的文件系统Ext2:早期的格式,不支持日志功能Ext3:ext2改良版,增加了日志功能,是最基本且最常用的使用格式了Ext4:针对e...

linux 分区合并(linux合理分区)

查看虚拟机当前磁盘挂载情况fdisk-l选择磁盘fdisk/dev/sda查看磁盘分区情况p重新选择分区n选择主分区p保存w创建物理卷pvcreate/dev/sda3查看物理卷信息pvdi...

如何在 Linux 系统中永久禁用交换分区 ?

Linux操作系统中的交换分区或交换文件充当硬盘上的临时存储区域,当物理内存(RAM)满时,系统使用该存储区域。它用于交换较少使用的内存页,这样系统就不会因为运行应用程序而耗尽物理内存。随着技术的发...

Linux 如何知道硬盘已用多少空间、未用多少空间

刚出社会时,去了一家公司上班,老板为了省钱,买的服务器是低配的,硬盘大小只有40G,有一次网站突然不能访问了,排查半天才知道原来服务器的硬盘空间已用完,已无可用空间。第一步是查看硬盘的使用情况,第二步...

用Linux系统管理磁盘空间 就该这么来

要想充分有效的管理使用Linux系统中的存储空间,用户必须要做的就是双管齐下,一边扩充空间一边限制空间。不得不说的就是很多时候磁盘空间就像水资源,需节制水流。说到要如何实现限制空间就离不开使用LVM技...

Windows 11 磁盘怎么分区?(windows11磁盘怎么分区)

Windows11磁盘分区技术解析与操作指南:构建高效存储体系一、磁盘分区的技术本质与系统价值磁盘分区作为存储系统的基础架构,通过逻辑划分实现数据隔离与管理优化。Windows11采用NTF...

linux上创建多个文件分区,格式化为 ext2、ext3、ext4、XFS 文件

以下是在Linux系统上创建多个20GB文件分区并格式化为不同文件系统的分步指南:步骤1:创建基础文件(4个20GB文件)bash#创建4个20GB稀疏文件(实际占用空间随写入量增长)ddif=/...

救命的U盘低格哪家最强?(低格优盘)

周二时有位童鞋留言说U盘之前做过引导盘,现在格式化不了,用各种工具都不行,而且因为U盘厂商的关系,查不到U盘主控,无法量产恢复,特来求助。小编花了点时间特意弄坏一个U盘分区,终于试出方法了,特来分享一...

Linux 查看硬件磁盘存储大小和磁盘阵列(RAID)的组合方式

一、查看硬件磁盘存储大小查看所有磁盘信息:#lsblk该命令会列出所有磁盘(如/dev/sda、/dev/nvme0n1)及其分区和挂载点。查看磁盘总容量:fdisk-l#或parted-...

取消回复欢迎 发表评论: