前言

为方便操作和管理,先搭建了服务器管理面板-宝塔Linux面板
Halo-Plus 是玖涯Halo博客系统 1.6.1 版本之上继续开发的 Halo 博客程序版本,自带Dream主题。

Docker部署Halo-Plus

Docker环境部署

Docker 安装文档:https://docs.docker.com/engine/install/
Docker Compose 安装文档:https://docs.docker.com/compose/install/

使用 Docker 部署 Halo-Plus 和 MySQL

  1. 创建 Docker 自定义桥接网络
docker network create halo-plus-net
  1. 拉取 MySQL 镜像
docker pull mysql:8.0.27
  1. 创建 MySQL 数据目录
mkdir -p ~/.halo-plus/mysql
  1. 启动 MySQL 实例
docker run --name some-mysql -v ~/.halo-plus/mysql:/var/lib/mysql -e MYSQL_ROOT_PASSWORD=自己定义密码 --net halo-plus-net --restart=unless-stopped -d mysql:8.0.27
-e MYSQL_ROOT_PASSWORD=my-secret-pw: 指定MySQL的登录密码为 my-secret-pw
-v ~/.halo/mysql:/var/lib/mysql
命令: 将宿主机的目录 ~/.halo/mysql 挂载到容器内部的目录 /var/lib/mysql,默认情况下 MySQL 将向 ~/.halo/mysql 写入其数据文件。
--net halo-net: 将该容器加入到 halo-net 网络,连接到 halo-net 网络的任何其他容器都可以访问 some-mysql容器上的所有端口。
  1. 进入 MySQL 容器中登录 MySQL 并创建 Halo-Plus 需要的数据库
docker exec -it some-mysql /bin/bash
mysql -u root -p
create database halodb character set utf8mb4 collate utf8mb4_bin;

 使用 exit退出MySQL 并退出容器
 6. 在Halo-Plus 工作目录下,下载配置文件到工作目录中

wget https://dl.halo.run/config/application-template.yaml -O ./application.yaml

 7. 编辑配置文件,配置数据库,其他配置请参考[参考配置](https://docs.halo-plus.nineya.com/getting-started/config
 - 注释 H2 database configuration.部分

  • 启用 MySQL database configuration.部分
  • 修改 datasource 下的 url 中的 ip 地址部分为容器名称并修改密码为您设定的 MySQL 密码
    修改后的内容如下:
spring:  datasource:    driver-class-name: com.mysql.cj.jdbc.Driver    url: jdbc:mysql://some-mysql:3306/halodb?characterEncoding=utf8&useSSL=false&serverTimezone=Asia/Shanghai&allowPublicKeyRetrieval=true    username: root    password: my-secret-pw
  1. 在工作目录下,创建 Halo-Plus 容器实例
docker run -it -d --name halo-plus -p 8090:8090 -v ~/.halo-plus:/root/.halo-plus --net halo-plus-net --restart=unless-stopped nineya/halo-plus:1.0.1
  1. 打开 http://ip:端口号 即可看到安装引导界面。

反向代理Nginx及SSL配置

首先去申请证书,比如:阿里云、腾讯云等云服务商,申请后下载nginx类型证书,一般为.pem .key文件,并将其放入到Nginx软件目录下的conf/cert目录下
在宝塔面板或者软件目录打开配置文件.conf
server {}同级路径中添加

upstream halo-plus {  
server 127.0.0.1:8090;  
}

server{}里的内容全部替换成

server {  
         #监听443端口
        listen 443 ssl;
        #对应的域名,把server_name改成你们自己的域名就可以了
        server_name 自己的域名;
        #从腾讯云获取到的key文件的全路径
        ssl_certificate /cert/pem文件名称;
        #SSL证书路径配置
        ssl_certificate_key /cert/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_pass http://halo-plus;  
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;  
}  
}

添加一个80端口重定向到443server节点

server{ listen 80; server_name 自己的域名; rewrite ^(.*)$ https://$host:443$1 permanent; }

保存后,重启Nginx

Halo博客系统部署完毕