背景
在早之前基于Hexo+Gitee搭建了一个网站,近期无法访问了,发现是Gitee Pages服务暂停服务了。
刚好自己有一台云服务器和一个域名,那就重新再搭建一个网站,经过之前的使用体验,Hexo主题很多且好看,问题也很容易找到答案,因为也支持了docker,搭建很方便。但使用Hexo搭建的静态网站还是感觉存在一些麻烦,如:
Hexo没有后台,需要在本地配置环境进行触发部署更新(NodeJS、Gitee的一系列配置)
Markdown文件只能在本地编辑,不能在线编辑,所以图片只能加载OSS存储的方式插入(需额外使用OSS)
没有评论系统,需要外接评论系统
需求
搭建在云服务器上,使用域名访问
能编辑Markdown文档,图片直接插入
维护方便,包括文档更新,文档数量增加后加载不慢
通过对比市面上的博客框架,发现Halo能完美符合要求,可以使用Docker快速部署和维护,社区也较活跃,除了稍微吃资源,服务器内存需1G+
搭建
安装Docker
Docker 安装文档:https://docs.docker.com/engine/install/
Docker Compose 安装文档:https://docs.docker.com/compose/install/
建议安装官方的最新版本Docker,低版本的Docker安装Halo坑会出现不兼容情况
创建Halo安装目录
sudo -i
mkdir -p /usr/local/software/halo
cd /usr/local/software/halo
创建docker-compose.yml文件
vim docker-compose.yml
按i
插入内容(英文输入法)
如果粘贴时,出现自动缩进和连续注释,可以通过 :set paste
进入粘贴插入模式再粘贴
version: "3"
services:
halo:
image: halohub/halo:2.16
container_name: babajajaBlog
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./halo2:/root/.halo2
ports:
- "8090:8090"
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=http://babajaja.cn/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@88w0rd
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:
注:docker-compose.yml中halo:2.16是安装版本2.16.x的版本,可在https://github.com/halo-dev/halo/releases 查看最新版本
"8090:8090"
中前面8090是服务器的端口,可以更改为自己想要对外的端口,后面8090是halo容器里的进程端口
--halo.external-url=http://babajaja.cn/
,其中的http://babajaja.cn/
需要更改为你的域名,如果你打算用的域名是abc.com
也就是要改成--halo.external-url=https://abc.com
,官方默认是http://localhost:8090/
--spring.r2dbc.password=o#DwN&JSa56
和MYSQL_ROOT_PASSWORD=o#DwN&JSa56
一定要改密码,两个密码要保持一致
--halo.security.initializer.superadminpassword=P@88w0rd
记得改密码
MySQL的端口不是"3306:3306"
是安全考虑,不在公网暴露halo数据库的端口
然后按一下esc
,然后 :wq
保存退出。
开放端口
在云服务器的 控制台-实例-安全组 对外开发端口8090,这里每个人可能是不同服务器厂商和不同端口,自行按情况配置哈。
如果服务器上还开启了防火墙(大部分云服务器都是默认关闭),可以关闭防火墙或者设置防火墙的端口出入规则
查看端口是否被占用
lsof -i:8090
如果啥也没出现,表示端口未被占用,我们可以继续下面的操作了~
如果出现
-bash: lsof: command not found
就需要安装lsof
yum -y install lsof # Centos系统执行yum安装
apt install lsof # Debian、Ubuntu系统执行apt安装
安装Halo2.0
安装Halo
执行命令安装
cd /usr/local/software/halo #到docker-compose.yml文件目录下
docker-compose up -d
正常情况下,我们到浏览器输入http://babajaja.cn:8090/就可以访问了
后续可以考虑配置nginx
进行端口转发,访问就可以不带端口了
更新Halo
cd /usr/local/software/halo
docker-compose down
cp -r /usr/local/software/halo /usr/local/software/halo.archive # 万事先备份,以防万一
docker-compose pull
docker-compose up -d # 请不要使用 docker-compose stop 来停止容器,因为这么做需要额外的时间等待容器停止;docker-compose up -d 直接升级容器时会自动停止并立刻重建新的容器,完全没有必要浪费那些时间。
docker image prune # prune 命令用来删除不再使用的 docker 对象。删除所有未被 tag 标记和未被容器使用的镜像
卸载Halo
cd /usr/local/software/halo
docker-compose down
cd ..
rm -rf /usr/local/software/halo # 完全删除映射到本地的数据
安装主题
浏览器输入http://babajaja.cn:8090/console/
网址+/console可以访问后台
进入后台页面后,点击 主题-主题管理-应用市场
选择自己喜欢的风格的主题,我选择的是Joe 3.0
,点击安装
也可以直接到应用市场
浏览主题
安装完后,你会发现实际还没生效,需要到 主题-主题管理-已安装
在想要的主题下点击启用
即可
插件安装
到插件-安装-应用市场
,选择想要的插件,点击安装
参考文档
【好玩儿的Docker项目】好用又强大的开源建站工具——Halo 2.0:https://blog.laoda.de/archives/docker-compose-install-halo-version-2
Halo 文档:https://docs.halo.run/
Halo GitHub地址:https://github.com/halo-dev/halo
Halo插件地址:https://github.com/halo-sigs/awesome-halo
Docker 安装文档:https://docs.docker.com/engine/install/
Docker Compose 安装文档:https://docs.docker.com/compose/install/
评论区