基于ECS使用Halo实现博客平台
官方介绍
Halo [ˈheɪloʊ]
好用又强大的开源建站工具。
Halo是一个动态开源博客框架,后端基于Spring Boot,数据库使用嵌入式数据库R2DBC(基于需求在1.x版本可以扩展MySQL,在2.0版本可以使用PostgreSQL),前端使用Tymeleaf引擎。除此之外使用webflux reactive响应式编程的方案,Apache Lucene作为搜索库...很多独特的技术来搭建框架。
简介
Halo作为一个博客框架,能具有很好的开箱即用的便捷性,而且具有丰富的管理和扩展能力,一定数量的Theme扩展(1.x版本的扩展丰富一些,2.0的扩展较少),有诸如评论,App端...的周边生态,并且作为动态博客框架,能方便博客撰写者在线编辑预览效果。Halo也在不断更新,在如今2022.12月最新更新的2.0.0的release,社区活跃,能够帮助解决我们很多问题。所以如今我们使用Halo在阿里云ECS服务器上完成一次完成的Halo博客平台的搭建,包含下面的内容:
前置提醒
本次选择的Halo版本为1.6,并没有选择最新的2.0,2.0本身架构上与1.x并不兼容,并且1.x已经不再积极更新和维护,如果升级2.0则需要完全重新部署,但是1.x系列有着更好的主题库(官方提供),2.0不能兼容一些官方主题仓库的主题,所以最后选择了1.6,==请根据需要选择==文档
本次使用的操作系统为Alibaba Cloud Linux 3.2104 LTS 64位
,使用rpm进行包管理,配置2核2G 40G云盘(Halo的硬件需求不高,只要求1G上的RAM即可)
公网使用
打开云服务器对应控制台,选择安全组>进入当前服务器的安全组>配置规则>
手动添加8090端口(这是halo默认的端口号)的入规则:
Docker部署
安装
参照官网的Docker Engine安装教程
这里我们选择Docker Server下的Centos版本(和Alibaba Cloud Linux兼容)
需要其他版本的可以自己在官网查看,我们会到达这个界面
因为是新的服务器,我们直接按照教程安装:(PS:为了速度更快可以选择阿里官方的方案,下面会列出)
建立储存库
sudo yum install -y yum-utils # yum工具集
sudo yum-config-manager \ # yum配置docker官方源
--add-repo \
https://download.docker.com/linux/centos/docker-ce.repo
安装Docker最新版本配套工具集
sudo yum install docker-ce docker-ce-cli containerd.io docker-compose-plugin #
启动Docker
sudo systemctl start docker
验证Docker是否成功运行
sudo docker run hello-world # 启动hello-world的容器服务,出现Hello from Docker!的系列文字即为成功
==注意:== 尽量安装最新的Docker,如果已经安装了旧版的Docker,可以使用官方的升级方案:重复安装步骤,但是用
yum -y upgrade
替代yum -y install
即可
升级的原因是因为不升级Docker版本低,启用Java会报错。
阿里云Docker安装方案:sudo yum install -y yum-utils device-mapper-persistent-data lvm2 sudo yum-config-manager --add-repo https://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo sudo sed -i 's+download.docker.com+mirrors.aliyun.com/docker-ce+' /etc/yum.repos.d/docker-ce.repo sudo yum makecache fast sudo yum -y install docker-ce sudo service docker start
具体信息参看阿里云文档
镜像安装部署
- 创建 工作目录
mkdir ~/.halo && cd ~/.halo # 自己随意选择目录来存放halo产生的文件
- 下载示例配置文件到 工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
- 编辑配置文件,配置数据库或者端口等,如需配置请参考配置参考,这里我们沿用默认配置
vim application.yaml
- 拉取最新的 Halo 镜像
docker pull halohub/halo:1.6.0 # 这里记得用1.6版本镜像,最新的可能是2.0
- 创建容器,使用docker容器的8090端口映射到宿主机8090,这个端口自己选择;restart官方 建议设置为 unless-stopped,在 Docker 启动的时候自动启动 Halo 容器。
docker run -it -d --name halo -p 8090:8090 -v ~/.halo:/root/.halo --restart=unless-stopped halohub/halo:1.6.0
创建成功后我们可以在浏览器中访问啦,访问http://公网ip:8090/
==!!!管理端为http://公网ip:8090/admin
,这是对于1.x版本而言,对于2.0版本管理端为http://公网ip:8090/console
==
我们可以在这里进行后端的管理
命令行部署
- java环境安装
halo使用的java为11,安装openjdk11即可:
sudo yum install java-11-openjdk -y
# java --version # 检查安装结果
这里我们图省事没有按照官方非root的安装办法:
- 创建存放 运行包 的目录,这里以 ~/app 为例
mkdir ~/app && cd ~/app
- 下载运行包
wget https://dl.halo.run/release/halo-1.6.0.jar -O halo.jar
如果下载速度不理想,可以尝试wget https://github.com/halo-dev/halo/releases/download/v1.6.0/halo-1.6.0.jar -O halo.jar
,wget https://halo.cary.tech/release/halo-1.6.0.jar -O halo.jar
- 创建工作目录
mkdir ~/.halo && cd ~/.halo
- 下载示例配置文件到工作目录
wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml
- 编辑配置文件,配置数据库或者端口等,如需配置请参考 配置参考
vim application.yaml
这是我的配置文件:
server:
port: 8090 # 端口
# Response data gzip. # 响应压缩(节省带宽)
compression:
enabled: false
spring:
datasource: # 嵌入数据源
# H2 database configuration.
driver-class-name: org.h2.Driver
url: jdbc:h2:file:~/.halo/db/halo
username: admin
password: 123321
# 可配置的MySQL数据源
# MySQL database configuration.
# driver-class-name: com.mysql.cj.jdbc.Driver
# url: jdbc:mysql://127.0.0.1:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true
# username: root
# password: 123456
# H2数据库配置
h2:
console:
settings:
web-allow-others: false # 允许数据库web访问
path: /h2-console # h2数据库管理页面
enabled: false
halo:
# Your admin client path is https://your-domain/{admin-path}
admin-path: admin # 管理界面路径!!区别于2.0
# 缓存
cache: memory
- 测试运行 Halo
cd ~/app && java -jar halo.jar
如看到类似以下日志输出,则代表启动成功。
run.halo.app.listener.StartedListener : Halo started at http://127.0.0.1:8090
run.halo.app.listener.StartedListener : Halo admin started at http://127.0.0.1:8090/admin
run.halo.app.listener.StartedListener : Halo has started successfully!
在这一个流程配置下来,达到了和之前docker一样的部署效果,但是不同于docker的是这个服务不会自动启动,自动启动可以使用service版本进行安装,参考官网作为服务运行
效果展示见上
主题更换
在主题界面选择安装:
在 https://halo.run/themes.html 中的主题我们需要甄别1.6.0版本可用的,我们选择任意,进入它的github界面,复制它的git地址,例如我下面的这个:https://github.com/PedroNull/halo-theme-hingle.git
或者release中的zip地址:https://github.com/Pedro-null/halo-theme-hingle/archive/refs/tags/v1.0.0.zip
==注:有些下载的可能很慢,我们可以在gitee上搜索有无对应源==
也可以自己下载然后拖动zip包到框中即可完整主题安装。
安装成功后就可以随意更换自己喜欢的主题啦!!
域名解析
这里可以使用aliyun的域名服务我们的ip,这样大家就都可以通过我们的域名访问我们的博客!