Halo 是一个强大易用的开源建站工具,适合用来搭建个人博客,有后台管理系统,并且有丰富的主题和插件可以选择,目前在 Github 上已经快 30k stars。
本篇记录并分享一下自己部署 Halo 的过程。本篇参考 Halo 官方文档
如果使用 1Panel 的小伙伴,可以直接在应用商店一键安装 Halo。我后来迁移过一次 Halo,就是使用 1Panel 面板一键安装的。本篇也会记录一下迁移过程。
先看效果
安装 Docker && Docker-Compose
部署方式使用 Halo 文档中的 Docker Compose 部署方式
Docker 安装文档:https://docs.docker.com/engine/install/
Docker Compose 安装文档:https://docs.docker.com/compose/install/
安装 Docker
如果有旧版本 Docker,想重新安装,需要先卸载
sudo yum remove docker \ docker-client \ docker-client-latest \ docker-common \ docker-latest \ docker-latest-logrotate \ docker-logrotate \ docker-engine
安装相关依赖
sudo yum install -y yum-utils device-mapper-persistent-data lvm2
添加 Docker 软件源
sudo yum-config-manager --add-repo https://download.docker.com/linux/centos/docker-ce.repo
国内服务器可以使用阿里镜像源:
sudo yum-config-manager --add-repo http://mirrors.aliyun.com/docker-ce/linux/centos/docker-ce.repo
安装 Docker
sudo yum install -y docker-ce
启动 Docker 服务
sudo systemctl start docker
设置开启自动启动 Docker 服务
sudo systemctl enable docker
测试是否安装成功,安装成功会显示详细信息
docker version
安装 Docker-Compose
执行以下命令下载 Docker Compose 的二进制文件:
sudo curl -SL https://github.com/docker/compose/releases/download/v2.23.3/docker-compose-linux-x86_64 -o /usr/local/bin/docker-compose
添加执行权限
sudo chmod +x /usr/local/bin/docker-compose
测试是否安装成功
docker-compose --version
创建容器组
我在
/opt
目录下创建文件夹mkdir /opt/blog/halo cd /opt/blog/halo
创建
docker-compose.yaml
文件,内容如下我这里选择了使用已有外部数据库的方式进行部署,需要先在 Mysql 中创建好下面所需要的数据库。
官方文档还有其他三种方式可以参考。
version: "3" services: halo: image: halohub/halo:2.11 container_name: halo restart: on-failure:3 network_mode: "host" volumes: - ./:/root/.halo2 command: # 修改为自己已有的 MySQL 配置 - --spring.r2dbc.url=r2dbc:pool:mysql://***.***.***.***:3306/halo # 需要现在这个外部数据库建好halo数据库 - --spring.r2dbc.username=root - --spring.r2dbc.password=********* - --spring.sql.init.platform=mysql # 外部访问地址,请根据实际需要修改 - --halo.external-url=http://ip:8090/ # 初始化的超级管理员用户名 - --halo.security.initializer.superadminusername=admin # 初始化的超级管理员密码 - --halo.security.initializer.superadminpassword=admin # 端口号 默认8090 - --server.port=8090
启动 Halo 服务
docker-compose up -d
实时查看日志:
docker-compose logs -f
用浏览器访问
/console
即可进入 Halo 管理页面,用户名和密码为在docker-compose.yaml
文件中设置的superadminusername
和superadminpassword
。
配置域名
准备为博客配置 blog.miykah.top
域名,需要将域名解析到 ip:8090
将域名解析到服务器 ip
配置 nginx 反向代理
upstream halo { server 127.0.0.1:8090; } server { listen 80; listen [::]:80; server_name blog.miykah.top; # 域名 client_max_body_size 1024m; location / { proxy_pass http://halo; 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; } }
此时就可以使用域名访问博客
配置 SSL 证书,使用 HTTPS
在云服务器厂商申请 SSL 证书(通常有免费的)
下载证书文件保存到服务器。我这里存放在
/opt/cert
文件夹中。将.key
和.pem
文件保存在服务器修改
nginx.conf
参考 https://cloud.tencent.com/developer/article/1953367
server { listen 80; #侦听80端口,如果强制所有的访问都必须是HTTPs的,这行需要注销掉 listen 443 ssl; #侦听443端口,用于SSL server_name blog.miykah.top; # 自己的域名 #配置 ssl ssl_certificate /opt/cert/blog.miykah.top_bundle.pem; # pem文件的径 ssl_certificate_key /opt/cert/blog.miykah.top.key; # key文件的路径 ssl_session_timeout 5m; ssl_protocols TLSv1 TLSv1.1 TLSv1.2; ssl_ciphers ECDHE-RSA-AES128-GCM-SHA256:HIGH:!aNULL:!MD5:!RC4:!DHE; ssl_prefer_server_ciphers on; client_max_body_size 1024m; location / { 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_pass http://127.0.0.1:8090; } }
重载 nginx 配置
nginx -s reload
博客版本升级
停止运行中的容器组
cd ~/halo && docker-compose down
备份数据(重要)
cp -r ~/halo ~/halo.archive
需要注意的是,
halo.archive
文件名不一定要根据此文档命名,这里仅仅是个示例。更新 Halo 服务
修改
docker-compose.yaml
中配置的镜像版本。services: halo: image: halohub/halo:2.11.2 container_name: halo
docker-compose pull halo
docker-compose up -d
博客迁移
更新于2023.12.14
由于更换服务器,博客需要迁移,同时新服务器使用了 1Panel 面板,其高度集成了 Halo 博客,可以在应用商店一键安装。这里记录一下迁移过程。非常简单,其实就是备份原博客,安装新的 Halo,然后导入文件进行恢复即可。
原 Halo 博客备份
在原 Halo 博客控制台,创建备份,并下载保存。
1Panel 安装 Halo
在 1Panel 商店安装 Halo,自行修改下面需要修改的信息。
恢复备份
安装完成后,进入新的 Halo 博客控制台(ip:port/console),找到备份,上传备份文件,等待恢复即可。
官方文档相关提示:
在恢复前,需要了解以下几点:
恢复不限制部署方式,也不限制数据库,也就是说新站点的部署方式和数据库类型可以和备份的站点不同。
恢复过程可能会持续较长时间,期间请勿刷新页面。
在恢复的过程中,虽然已有的数据不会被清理掉,但如果有冲突的数据将被覆盖。
恢复完成之后会提示停止运行 Halo,停止之后可能需要手动运行。
评论区