「Docker应用」搭建个人博客-Halo
nanshan 2025-01-09 15:06 7 浏览 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 文件夹了。
感谢大家阅读。
相关推荐
- Let’s Encrypt免费搭建HTTPS网站
-
HTTPS(全称:HyperTextTransferProtocoloverSecureSocketLayer),是以安全为目标的HTTP通道,简单讲是HTTP的安全版。即HTTP下加入...
- 使用Nginx配置TCP负载均衡(nginx tcp负载)
-
假设Kubernetes集群已经配置好,我们将基于CentOS为Nginx创建一个虚拟机。以下是实验种设置的详细信息:Nginx(CenOS8Minimal)-192.168.1.50Kube...
- Nginx负载均衡及支持HTTPS与申请免费SSL证书
-
背景有两台minio文件服务器已做好集群配置,一台是192.168.56.41:9000;另一台是192.168.56.42:9000。应用程序通过Nginx负载均衡调用这两台minio服务,减轻单点...
- HTTPS配置实战(https配置文件)
-
原因现在网站使用HTTPS是规范操作之一,前些日子买了腾讯云服务,同时申请了域名http://www.asap2me.top/,目前该域名只支持HTTP,想升级为HTTPS。关于HTTPS的链接过程大...
- 只有IP地址没有域名实现HTTPS访问方法
-
一般来说,要实现HTTPS,得有个注册好的域名才行。但有时候呢,咱只有服务器的IP地址,没注册域名,这种特殊情况下,也能照样实现HTTPS安全访问,按下面这些步骤来就行:第一步,先确认公网...
- 超详解:HTTPS及配置Django+HTTPS开发环境
-
众所周知HTTP协议是以TCP协议为基石诞生的一个用于传输Web内容的一个网络协议,在“网络分层模型”中属于“应用层协议”的一种。在这里我们并不研究该协议标准本身,而是从安全角度去探究使用该协议传输数...
- Godaddy购买SSL之后Nginx配置流程以及各种错误的解决
-
完整流程:参考地址:https://sg.godaddy.com/zh/help/nginx-generate-csrs-certificate-signing-requests-3601生成NGI...
- Nginx从安装到高可用,一篇搞定(nginx安装与配置详解)
-
一、Nginx安装1、去官网http://nginx.org/下载对应的nginx包,推荐使用稳定版本2、上传nginx到linux系统3、安装依赖环境(1)安装gcc环境yuminstallgc...
- 阿里云免费证书申请,配置安装,使用tomcat,支持http/https访问
-
参数说明商品类型默认已选择云盾证书服务(无需修改)。云盾证书服务类型SSL证书服务的类型。默认已选择云盾SSL证书(无需修改),表示付费版SSL证书。如果您需要免费领取或付费扩容DV单域名证书【免费试...
- 你试过两步实现Nginx的规范配置吗?极速生成Nginx配置小工具
-
NGINX是一款轻量级的Web服务器,最强大的功能之一是能够有效地提供HTML和媒体文件等静态内容。NGINX使用异步事件驱动模型,在负载下提供可预测的性能。是当下最受欢迎的高性能的Web...
- 从零开始搭建HTTPS服务(搭建https网站)
-
搭建HTTPS服务的最初目的是为了开发微信小程序,因为wx.request只允许发起HTTPS请求,并且还必须和指定的域名进行网络通信。要从零开始搭建一个HTTPS的服务需要下面4...
- 群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问
-
安全第一步,群晖NAS使用官网域名和自己的域名配置SSL实现HTTPS访问【新手导向】NAS本质还是一个可以随时随地访问的个人数据存储中心,我们在外网访问的时候,特别是在公网IP下,其实会面临着很多安...
- 让网站快速升级HTTPS协议提高安全性
-
为什么用HTTPS网络安全越来越受到重视,很多互联网服务网站,都已经升级改造为https协议。https协议下数据包是ssl/tcl加密的,而http包是明文传输。如果请求一旦被拦截,数据就会泄露产生...
- 用Https方式访问Harbor-1.9版本(https访问流程)
-
我上周在头条号写过一篇原创文章《Docker-Harbor&Docker-kitematic史上最详细双系统配置手册》,这篇算是它的姊妹篇吧。这篇文章也将用到我在头条写的另一篇原创文章的...
- 如何启用 HTTPS 并配置免费的 SSL 证书
-
在Linux服务器上启用HTTPS并配置免费的SSL证书(以Let'sEncrypt为例)可以通过以下步骤完成:---###**一、准备工作**1.**确保域名已解析**...
你 发表评论:
欢迎- 一周热门
-
-
极空间如何无损移机,新Z4 Pro又有哪些升级?极空间Z4 Pro深度体验
-
如何在安装前及安装后修改黑群晖的Mac地址和Sn系列号
-
爱折腾的特斯拉车主必看!手把手教你TESLAMATE的备份和恢复
-
10个免费文件中转服务站,分享文件简单方便,你知道几个?
-
[常用工具] OpenCV_contrib库在windows下编译使用指南
-
日本海上自卫队的军衔制度(日本海上自卫队的军衔制度是什么)
-
Ubuntu系统Daphne + Nginx + supervisor部署Django项目
-
【系统配置】信创终端挂载NAS共享全攻略:一步到位!
-
WindowsServer2022|配置NTP服务器的命令
-
UOS服务器操作系统防火墙设置(uos20关闭防火墙)
-
- 最近发表
- 标签列表
-
- linux 查询端口号 (58)
- docker映射容器目录到宿主机 (66)
- 杀端口 (60)
- yum更换阿里源 (62)
- internet explorer 增强的安全配置已启用 (65)
- linux自动挂载 (56)
- 禁用selinux (55)
- sysv-rc-conf (69)
- ubuntu防火墙状态查看 (64)
- windows server 2022激活密钥 (56)
- 无法与服务器建立安全连接是什么意思 (74)
- 443/80端口被占用怎么解决 (56)
- ping无法访问目标主机怎么解决 (58)
- fdatasync (59)
- 405 not allowed (56)
- 免备案虚拟主机zxhost (55)
- linux根据pid查看进程 (60)
- dhcp工具 (62)
- mysql 1045 (57)
- 宝塔远程工具 (56)
- ssh服务器拒绝了密码 请再试一次 (56)
- ubuntu卸载docker (56)
- linux查看nginx状态 (63)
- tomcat 乱码 (76)
- 2008r2激活序列号 (65)