本文使用的环境
电脑:Windows10
服务器 :超频2.1版Debian,扩容2+16的随身WiFi,Linux内核5.15
Halo有分1.x与2.x两个不同的大版本,2.x目前只能通过Docker部署
本文以单设备与Debian系统下使用Docker-Compose部署Halo2.x版本为主,且只推荐通过Docker-Compose部署使用2.x版本
使用的数据库是MySQL
若要使用随身WiFi搭建,需将随身WiFi扩容至2G运存,最好挂载扩展盘,或者可以选择使用2~3个随身WiFi组成集群的方式搭建,如将Halo、Nginx、MySQL分开部署,或Halo与Nginx一起部署,MySQL另外部署,可通过内网ip连接
1、准备工作
- SSH 工具下载链接:https://www.123pan.com/s/DGj7Vv-xSai.html 提取码:6q1k
- 准备一部已安装Docker、Docker-Compose(根据情况选择)的设备/云主机;若未安装Docker或者Docker-Compose,请移步安装 Docker、Docker Compose,此文章可做参考
2、官方提供的两种简单部署方式
2.1、只使用Docker部署
-
创建容器
docker run \ -it -d \ --name halo \ -p 8090:8090 \ -v ~/.halo2:/root/.halo2 \ halohub/halo:2.4 \ --halo.external-url=http://localhost:8090/ \ --halo.security.initializer.superadminusername=admin \ --halo.security.initializer.superadminpassword=P@88w0rd注意:此命令默认使用自带的 H2 Database 数据库,如需使用其他数据库,请使用 Docker Compose 部署
-
参数说明
- -it:开启输入功能并连接伪终端
- -d:后台运行容器
- –name:为容器指定一个名称
- -p:端口映射,格式为
主机(宿主)端口:容器端口,可在application.yaml配置。 - -v:工作目录映射。形式为:
-v 宿主机路径:/root/.halo2,后者不能修改。
-
变量
| 参数名 | 描述 |
|---|---|
spring.r2dbc.url |
数据库连接地址,详细可查阅下方的 数据库配置 |
spring.r2dbc.username |
数据库用户名 |
spring.r2dbc.password |
数据库密码 |
spring.sql.init.platform |
数据库平台名称,支持 postgresql、mysql、h2,需要与 SPRING_R2DBC_URL 对应 |
halo.external-url |
外部访问链接,如果需要在公网访问,需要配置为实际访问地址 |
halo.security.initializer.superadminusername |
初始超级管理员用户名 |
halo.security.initializer.superadminpassword |
初始超级管理员密码 |
- 数据库配置
| 数据库链接方式 | 链接地址格式 | SPRING_SQL_INIT_PLATFORM |
|---|---|---|
| PostgreSQL | r2dbc:pool:postgresql://{HOST}:{PORT}/{DATABASE} | postgresql |
| MySQL | r2dbc:pool:mysql://{HOST}:{PORT}/{DATABASE} | |
| mysql | ||
| H2 Database | r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE | |
| h2 |
- 升级版本
-
拉取新版本镜像
docker pull halohub/halo:2.4 -
停止运行中的容器
docker stop halo docker rm halo -
备份数据(重要)
cp -r ~/.halo2 ~/halo2.archive需要注意的是,
halo2.archive文件名不一定要根据此文档命名,这里仅仅是个示例 -
更新 Halo
修改版本号后,按照最初安装的方式,重新创建容器即可。halohub/halo:2.4 \
-
2.2、通过 1Panel 部署
- 安装 MySQL 应用
- 在安装 Halo 之前需要先安装 MySQL 数据库 ,击 1Panel 左侧导航菜单进入应用商店,选择其中的 MySQL 数据库进行安装
- 在应用详情页选择 MySQL 8.0.30 版本进行安装
- 在弹出的侧边栏中依次确认 MySQL 应用的名称、root用户密码及服务端口后,点击确认按钮开始安装
- 开始安装后页面自动跳转到已安装应用列表,等待刚刚安装的 MySQL 应用变为已启动状态
- 安装Halo应用
- MySQL 安装成功后,再次进入应用商店应用列表,选择其中的 Halo 应用进行安装
- 在应用详情页选择最新的 Halo 版本进行安装
- 在弹出的侧边栏中依次确认 Halo 应用的名称,并在数据库服务中下拉选择上一步创建的数据库应用,确认其他参数信息后,点击确认按钮进行安装
- 参数说明
- 名称:要创建的 Halo 应用的名称;
- 数据库服务:Halo 应用使用的数据库应用,支持下拉选择已安装的数据库应用,1Panel 会自动配置 Halo 使用该数据库;
- 数据库名:Halo 应用使用的数据库名称,1Panel 会在选中的数据库中自动创建这个数据库;
- 数据库用户:Halo 应用使用的数据库用户名,1Panel 会在选中的数据库中自动创建这个用户,并添加对应的数据库授权;
- 数据库用户密码:Halo 应用使用的数据库用户密码,1Panel 会在选中的数据库中自动为上一步创建的用户配置该密码;
- 超级管理员用户名:Halo 应用初始化创建的超级管理员用户名;
- 超级管理员密码:Halo 应用初始化创建的超级管理员密码;
- 外部访问地址:Halo 应用的最终访问地址,如果有为 Halo 规划域名,需要配置为域名格式,例如
http://halo.example.com;否则配置为http://服务器IP:PORT,例如http://172.16.10.154:8090; - 端口:Halo 应用的服务端口;
- 等待安装的 Halo 应用变为已启动状态
3、使用Docker Compose 部署(推荐)
本文使用的数据库是MySQL,若使用其他数据库请参考官方文档
本文提供本人使用的配置文件,稍作修改即可使用
配置文件https://www.123pan.com/s/DGj7Vv-Oiai.html 提取码:4T76
3.1、创建容器组
- 在系统任意位置创建一个文件夹,本文以
~/halo为例注意:后续操作中,Halo 产生的所有数据都会保存在这个目录,请妥善保存。
mkdir halo && cd halo - 创建
docker-compose.yamlvim docker-compose.yaml - 编写docker-compose.yaml配置文件
services: halo: image: halohub/halo:2.4.3 container_name: halo restart: on-failure:3 depends_on: halodb: condition: service_healthy networks: halo_network: volumes: - ./halo:/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=123456 - --spring.sql.init.platform=mysql # 外部访问地址,我的服务器为8.130.97.145,此处需要修改为你自己的服务器或虚拟机 ip - --halo.external-url=http://8.130.97.145:80/ # - --halo.external-url=http://blog.moyuan.asia/ # 初始化的超级管理员用户名 - --halo.security.initializer.superadminusername=LSD # 初始化的超级管理员密码 - --halo.security.initializer.superadminpassword=123456 halodb: image: mysql:8.0.31 container_name: halodb restart: on-failure:3 networks: halo_network: command: - --default-authentication-plugin=mysql_native_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: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=123456 - MYSQL_DATABASE=halo halonginx: # 服务名称,用户自定义 image: nginx:1.23.4 # 镜像版本 container_name: halonginx # 链接到其它容器,能在 nginx.conf 反向代理配置时使用 links: - halo networks: halo_network: ports: - 80:80 # 暴露端口 volumes: # 挂载 - /halo/nginx/conf/nginx.conf:/etc/nginx/nginx.conf privileged: true # 这个必须要,解决nginx的文件调用的权限问题 networks: halo_network:
3.2、 反向代理
本文以Nginx为例,若使用其他反向代理请参考官方文档
- 创建Nginx配置存放目录
sudo mkdir -p /halo/nginx/conf/ - 编写Nginx配置
sudo vim /halo/nginx/conf/nginx.conf#user root; error_log /var/log/nginx/error.log notice; worker_processes 1; pid /var/run/nginx.pid; events { worker_connections 1024; } http { include mime.types; default_type application/octet-stream; sendfile on; keepalive_timeout 65; # 设置上传文件的最大值 client_max_body_size 256m; upstream blog { # 使用容器服务名 server halo:8090; } server { listen 80; # 可进行域名绑定 server_name localhost; location / { # 设置反向代理的地址(实际是请求转发) proxy_pass http://blog; # 设置HTTP请求头 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; } error_page 500 502 503 504 /50x.html; location = /50x.html { root html; } } } - 运行docker-compose.yaml配置文件
- 进入 halo 目录
cd /halo - 运行docker-compose.yaml
sudo docker compose up -d
- 进入 halo 目录
4、更新版本
-
进入配置文件所在目录,并停止运行中的容器组
cd ~/halo && docker compose down -
备份数据(可选)
cp -r ./halo ~/halo.archive需要注意的是,
halo.archive文件名不一定要根据此文档命名,这里仅仅是个示例 -
更新 Halo 服务
修改docker-compose.yaml中配置的镜像版本image: halohub/halo:2.4.3更新镜像
docker compose pull halo运行docker-compose.yaml
sudo docker compose up -d