前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >从零开始搭建Halo个人博客

从零开始搭建Halo个人博客

原创
作者头像
计算机集成
修改于 2024-12-09 13:43:53
修改于 2024-12-09 13:43:53
10600
代码可运行
举报
文章被收录于专栏:技术_生活技术_生活
运行总次数:0
代码可运行

前言

老话说得好,好记性不如烂笔头。对于程序员来说,学无止境,需要学习的东西很多,而如果不记录下来可能过不了多久就忘记了,而记录下来这一步也能很好地贯彻费曼学习法。

其实网上有很多博客平台,但是自己搭一个博客,在自己的平台上分享自己的学习生活,感觉也是一种独有的浪漫,人生在世,总得给世界留点东西哈哈哈。

我为什么重新搭一个博客

之前我也搭建了Hexo+GitHub的静态博客,后面觉得静态博客更新起来太麻烦了,想搞个高级点的动态博客,也能把吃灰的云服务器利用起来。

于是,经过调研了解,选了个人觉得不错的开源博客平台Halo,代码开源,博客简洁强大且社区氛围好,这挺适合个人学习和分享。

Halo部署在自己购买的腾讯云服务器上,在搭载过程中遇到了很多坑,也花了点时间,因此这里记录下来希望能帮到大家。

前期准备

以下条件基于部署在Linux服务器前提下,其他情况可参考Halo官网。

  1. 云服务器。如果需要建议搞活动期间入手国内云厂商,这样会实惠很多。
  2. 域名(可选)。为了便于访问可以考虑购买一个域名。
  3. Shell客户端连接工具,推荐WindTerm和免费版的Xshell。

环境要求

官方推荐配置如下:

  1. CPU:无特别要求。目前我们的 Docker 镜像 也已经支持多平台。
  2. 内存:为了获得更好的体验,我们建议至少配置 1G 的 RAM。
  3. 磁盘:无特别要求,容量要求不高。
  4. 软件:- 目前我使用了Docker+宝塔面板安装,容器技术是不错的趋势,顺便学习下。 - 数据库暂时选择了Halo自带的H2,后续将转成MySQL

搭建步骤

1. 第一步:安装宝塔面板

为了提高搭建效率,我选择了宝塔面板辅助,宝塔面板是不错的服务器管理软件,可以帮助我们快速搭建网站。

如上图,安装方式可以参考官网,由于我的是OpenCloud,所以选择了第一个命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
url=https://download.bt.cn/install/install_lts.sh;if [ -f /usr/bin/curl ];then curl -sSO $url;else wget -O install_lts.sh $url;fi;bash install_lts.sh ed8484bec

运行以上命令后,等待安装完成。安装完成后,会显示宝塔面板的登录信息,包括面板地址、用户名和密码。请务必保存这些信息,以便后续登录使用。

输入命令 bt default 也可查看登录信息。

完成以上几步后,按照上图信息登录对应网址,正确输入账号密码后就可以跳转到宝塔面板页面了。

如下图,在软件商店中安装以下必备软件。

2. 第二步:安装Docker

Docker官方安装文档:CentOS安装docker (推荐安装最新官方文档安装)

根据Docker官方文档,以下是在CentOS上安装Docker的步骤:

2.1 卸载旧版本

首先,卸载任何旧版本的Docker:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum remove docker \\
                  docker-client \\
                  docker-client-latest \\
                  docker-common \\
                  docker-latest \\
                  docker-latest-logrotate \\
                  docker-logrotate \\
                  docker-engine

2.2 设置仓库

安装所需的包:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install -y yum-utils
sudo yum-config-manager --add-repo <https://download.docker.com/linux/centos/docker-ce.repo>

2.3 安装Docker引擎

安装最新版本的Docker Engine和containerd:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo yum install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

2.4 启动Docker

启动Docker服务:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl start docker

2.5 验证安装

通过运行hello-world镜像验证Docker是否正确安装:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker run hello-world

如果一切正常,你应该看到一条欢迎消息,表明Docker已成功安装并运行。

2.6 配置Docker开机自启(可选)

如果你希望Docker在系统启动时自动启动,可以执行以下命令:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl enable docker

按照以上步骤,你应该能够在CentOS系统上成功安装Docker。如果在安装过程中遇到任何问题,请参考Docker官方文档或寻求进一步的帮助。

3. 第三步:Docker镜像安装Halo 2.10

Halo官方安装文档:使用 Docker 部署 | Halo 文档

3.1 配置镜像加速源

为了加快下载速度,建议配置镜像加速源,以下以腾讯云加速源为例:

  • 首先执行以下命令:打开 /etc/docker/daemon.json 配置文件。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
vim /etc/docker/daemon.json
  • i 切换至编辑模式,添加以下内容,并保存。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
{
   "registry-mirrors": [
   "<https://mirror.ccs.tencentyun.com>"
  ]
}
  • 执行以下命令,重启 Docker 即可。示例命令以 CentOS 7 为例。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo systemctl restart docker
  • 重启 Docker 后,并运行以下命令来查看当前 Docker 的配置。如镜像源配置成功,则输出的内容中会包含下图所示的部分。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
sudo docker info

完成以上步骤后,你的Docker就会使用腾讯云的镜像加速服务,这将显著提高镜像的下载速度。

3.2 拉取Halo镜像

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker pull halohub/halo:2.10

下载速度大幅提升…

3.3 创建容器

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run -it -d --name halo -p 8090:8090 -v ~/.halo2:/root/.halo2 halohub/halo:2.10

使用上述命令运行 Halo 容器。这个命令会将容器的 8090 端口映射到主机的 8090 端口,并将 ~/.halo2 目录挂载到容器内的 /root/.halo2 目录。

4. 第四步:浏览器访问并初始化系统

浏览器输入 http://服务器IP:8090/console 进入下图管理页面,首次登录会进入下图初始化页面,可以按照自己喜好进行相关配置即可。

由于Halo默认端口是8090,记得将8090端口设为安全组。

初始化页面:

我的博客:

到这里已经可以通过网址:http://服务器IP:8090 访问我们的博客了。如果想要通过域名访问博客,则需要以下步骤。

5. 第五步:实现域名访问

前提有一个属于自己的域名,如果没有可以在各大云平台购买。另外国内的域名需要备案。

5.1 域名解析

推荐在自己购买的域名商出进行解析:

进入云服务器控制台,搜索云解析DNS并点击进入,【公网DNS解析】→【权威域名解析】→找到要解析的域名,点击添加记录,主机记录和记录类型参考截图以下两行。

5.2 配置反向代理

首先,借助宝塔面板快速添加我们的站点信息。

紧接着配置免费的SSL证书。

最后配置Nginx反向代理:

用#注释一部分内容,从而添加新的Nginx配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
location / {
  proxy_pass <http://127.0.0.1:8090/>;       # halo博客-ip访问的端口,我这里是8090
  rewrite ^/(.*)$ /$1 break;
  proxy_redirect off;
  proxy_set_header Host $host;
  proxy_set_header X-Forwarded-Proto $scheme;
  proxy_set_header X-Real-IP $remote_addr;
  proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  proxy_set_header Upgrade-Insecure-Requests 1;
  proxy_set_header X-Forwarded-Proto https;
}

到这里已经可以公告域名来访问我们的博客了。

域名后接 /console 即可进入Halo管理页面。

坚持到这里了,给自己一个大大的点赞!👍👍👍

6. 总结

搭建博客过程中由于不熟悉也经历了一些波折,但是当看到输入网址博客页面出来那一刻还是挺开心的,而且在这过程中也学到了很多东西,开阔了视野,所以大家如果感兴趣或者有需求建议自己动手折腾起来。

另外,博客还是以内容为主,以后会多加分享学习总结等到博客上,后续也会慢慢优化博客,包括脚本同步备份,切换数据库为MySQL,完善博客等等。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
暂无评论
推荐阅读
玩转OpenHarmony社交场景:即时通讯平台
本样例是基于即时通讯(Instant messaging,简称IM)服务实现的OpenAtom OpenHarmony(简称“OpenHarmony”)应用,允许两人或多人使用互联网即时地传递文字、图片、文件、语音、emoji等讯息,可应用于各类聊天场景,为人们带来更加及时高效的通讯体验。
小帅聊鸿蒙
2024/09/10
1740
玩转OpenHarmony社交场景:即时通讯平台
OpenHarmony如何正确利用native的方式实现跨线程调用?
在OpenHarmony应用开发实践中,经常会遇到一些耗时的任务,如I/O操作、域名解析以及复杂计算等。这些任务如果直接在主线程中执行,将会严重阻塞主线程,影响后续任务的正常流程,进而导致用户界面响应延迟甚至卡顿。因此,为了提升代码性能,通常会将这类耗时任务放在子线程中执行。
小帅聊鸿蒙
2024/10/15
4050
OpenHarmony如何正确利用native的方式实现跨线程调用?
这套分布式IM即时通讯系统如何写到简历上?我给你整理好了!
分布式IM即时通讯系统本质上就是对线上聊天和用户的管理,针对聊天本身来说,最核心的需求就是:发送文字、图片、文件、语音、视频、消息缓存、消息存储、消息未读、已读、撤回,离线消息、历史消息、单聊、群聊,多端同步,以及其他一些需求。
冰河
2023/12/12
6520
这套分布式IM即时通讯系统如何写到简历上?我给你整理好了!
IM即时通讯实现原理
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前 者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数 据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。 QQ就是使用UDP协议进行发送和接收消息的。当你的机器安装了OICQ以后,实际上,你既是服务端(Server),又是客户端(C
李海彬
2018/03/22
7.8K0
IM即时通讯实现原理
即时通讯(Instant Messenger,简称IM)软件多是基于TCP/IP和UDP进行通讯的,TCP/IP和UDP都是建立在更低层的IP协议上的两种通讯传输协议。前 者是以数据流的形式,将传输数据经分割、打包后,通过两台机器之间建立起的虚电路,进行连续的、双向的、严格保证数据正确性的文件传输协议。而后者是以数 据报的形式,对拆分后的数据的先后到达顺序不做要求的文件传输协议。
V13144630810
2021/01/26
2.3K0
IM即时通讯实现原理
一文教你用java实现即时通讯软件的设计(附下载源码)
随着信息社会的快速发展,网络作为改变世界的最重要的因素。众多的企业纷纷使用局域网聊天来满足工作与交流高效、快速执行的需求。企业中使用内部局域网可以使内部信息交互的过程得以简化,从而达到提高工作效率的目的。所以经上所述,公司内部使用即时通讯的方式在各台计算机之间进行交流已经是时代发展的趋势。
孙叫兽
2021/03/23
1.1K0
HarmonyOS 开发实践——跨语言的复杂参数类型传递
我们经常在ArkTS与C++之间相互传递参数,那么具体该如何传呢?下面介绍了几个常用的场景:
小帅聊鸿蒙
2024/11/10
3070
HarmonyOS 开发实践——跨语言的复杂参数类型传递
即时通讯开发系统的介绍
由于即时通讯系统的复杂性和对服务器稳定性的很高要求,一般即时通讯系统开发至少需要1年左右的时间,而这还只是测试版,离"稳定"还有一定距离,而这时匆匆上马的不稳定的系统会让你失去用户,您也不可能召集上万台电脑进行测试,那样的成本本身已经相当高,而无论如何测试,也仍然只是测试系统。而我们的系统,是经过几年的正式使用,经受过实际高用户量稳定运行的系统。这是长时间专业积累的经验和成果。所以,需要选择与专业的音视频即时通讯开发公司合作,可以快速获得即时通讯的开发经验和一套稳定的系统。
用户8119822
2021/02/03
1.6K0
iOS 即时通讯 + 仿微信聊天框架 + 源码
更新:2017年8月1日 实在是抱歉,git上的Demo这么久,有问题自己没有发现!肯定给大家造成过不方便,抱歉!git上Demo刚重新上传,要有需要的可以去下载,要有问题可以直接找我QQ联系我!       最近在总结Socket方面的知识,等文章写完会发不来,这篇文章是去年什么四五月份写的吧,那是水平也是有限,希望接下来能总结的比这篇好一点!!       在Demo中,XMPP接收发送消息这一块的代码我暂时是删除了,仿照微信的聊天框架是在的,你要想通过XMPP自己在项目中试试,你需要的也就是在Dem
Mr.RisingSun
2018/02/06
4.1K0
iOS  即时通讯 + 仿微信聊天框架 + 源码
端开发技术——FLutter开发即时通讯
即时通讯是端开发工作中常见的需求,本篇文章以作者工作中使用FLutter开发社交软件即时通讯需求为背景,描述一下即时通讯功能设计的要点。
思想者杰克
2021/11/04
2K0
laravel实现利用RabbitMQ实现MQTT即时通讯
有时候我们的项目中会用到即时通讯功能,比如电商系统中的客服聊天功能,还有在支付过程中,当用户支付成功后,第三方支付服务会回调我们的回调接口,此时我们需要通知前端支付成功。而 RabbitMQ 可以很方便的实现即时通讯功能,如果你的业务只是少量地方使用即时通信,需要一个简易的消息系统,你可以直接考虑 MQ 的实现, MQ 有很高的吞吐率,具有持久化,还可以横向扩展,总之还不错,用就完了,奥利给!
憧憬博客
2021/01/03
4.2K0
laravel实现利用RabbitMQ实现MQTT即时通讯
推荐一个鸿蒙即时通讯软件《果聊》,有点屌呢!!
首先可以来看一下我实现之后在DAYU200的运行效果,建议大家一键三连,支持一下坚果,毕竟坚果也不容易。
徐建国
2022/12/05
8170
推荐一个鸿蒙即时通讯软件《果聊》,有点屌呢!!
RabbitMQ实现即时通讯居然如此简单!连后端代码都省得写了?
MQTT(Message Queuing Telemetry Transport,消息队列遥测传输协议),是一种基于发布/订阅(publish/subscribe)模式的轻量级通讯协议,该协议构建于TCP/IP协议上。MQTT最大优点在于,可以以极少的代码和有限的带宽,为连接远程设备提供实时可靠的消息服务。
macrozheng
2020/10/28
2.4K0
RabbitMQ实现即时通讯居然如此简单!连后端代码都省得写了?
优雅草蜻蜓I即时通讯软件以及优雅草蜻蜓I即时通讯水银版私有化部署软件介绍和区别-优雅草卓伊凡
优雅草蜻蜓I即时通讯软件以及优雅草蜻蜓I即时通讯水银版私有化部署软件介绍和区别-优雅草卓伊凡
卓伊凡
2025/06/16
790
深入浅出即时通讯(1)_即时通讯协议对比
业界上用来做即时通讯的解决方案有:1. 基于http 的轮询; 2. 基于websocket 长连接; 3. 基于tcp或udp的自定义协议, 这种若在要在Web端使用, 需要套一层websocket 封装. 此外早期还有基于Comet 技术的长连接,基于xmpp 的开源客户端应用等。
E聊SDK
2022/05/17
3.3K0
开源即时通讯(IM)项目OpenIM源码部署流程
由于OpenIM依赖的组件较多,开发者需求不一,导致OpenIM部署一直被人诟病,经过几次迭代优化,包括依赖的组件compose的一键部署,环境变量设置一次,全局生效,以及脚本重构,目前OpenIM部署比较丝滑,特写文章分享给大家。
OpenIM
2023/09/12
2.7K0
PHP/Java即时通讯源码下载 - 开源IM系统开发指南与定制服务
在数字化时代,即时通讯(Instant Messaging, IM)已成为互联网应用的核心基础设施之一。从早期的ICQ、QQ到如今的微信、Slack,即时通讯技术经历了从简单文本消息到富媒体交互、从单端应用到多端协同的演进。随着移动互联网、云计算和跨平台开发技术的成熟,用户对即时通讯的需求已不再局限于单一设备,而是要求在手机APP、Web浏览器、PC客户端等多种终端之间实现无缝的实时通讯体验。
用户7417571
2025/06/19
940
PHP/Java即时通讯源码下载 - 开源IM系统开发指南与定制服务
[开源] 即时通讯组件---ImCore
ImCore 是一款 .NETCore 下利用 WebSocket 实现的简易、高性能、集群即时通讯组件,支持点对点通讯、群聊通讯、上线下线事件消息等众多实用性功能。
梁规晓
2019/08/01
7.3K1
[开源] 即时通讯组件---ImCore
基于Netty实现的即时通讯
Jelly是一款基于Netty4.x开发的TCP长连接即时通讯服务器端程序;并且提供了Java客户端API。
BUG弄潮儿
2022/06/30
8200
uniapp使用WebSocket实现即时通讯
WebSocket是一种基于TCP协议的全双工通信协议,它可以在客户端和服务器之间建立一个持久性的连接,实现实时通信。在uniapp中,我们可以使用uni-socketio插件来实现WebSocket的功能。
超级小可爱
2023/10/18
4.5K0
推荐阅读
相关推荐
玩转OpenHarmony社交场景:即时通讯平台
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档