在 Ubuntu 上安装和配置 Halo 博客可以帮助您轻松地搭建一个自己的博客平台。本教程将向您展示如何在 Ubuntu 上安装和配置 Halo 博客。
一、Docker Compose方式
创建halo文件夹和docker-compose.yaml文件
mkdir ~/halo && cd ~/halo
touch docker-compose.yaml
1. 配置Docker Compose文件
(1)模式一: Halo + PostgreSQL
vi ~/halo/docker-compose.yaml
添加下面内容:
version: "3"
services:
halo:
image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/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:postgresql://halodb/halo
- --spring.r2dbc.username=halo
# PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
- --spring.r2dbc.password=openpostgresql
- --spring.sql.init.platform=postgresql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@88w0rd
halodb:
image: postgres:latest
container_name: halodb
restart: on-failure:3
networks:
halo_network:
volumes:
- ./db:/var/lib/postgresql/data
ports:
- "5432:5432"
healthcheck:
test: [ "CMD", "pg_isready" ]
interval: 10s
timeout: 5s
retries: 5
environment:
- POSTGRES_PASSWORD=openpostgresql
- POSTGRES_USER=halo
- POSTGRES_DB=halo
- PGUSER=halo
networks:
halo_network:
(2)模式二: Halo + MySQL
vi ~/halo/docker-compose.yaml
添加下面内容:
version: "3"
services:
halo:
image: halohub/halo:2.5.2
container_name: halo
restart: on-failure:3
depends_on:
halodb:
condition: service_healthy
networks:
halo_network:
volumes:
- ./:/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://localhost:8090/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@88w0rd
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:
- "3307: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:
(3)模式三: 仅创建 Halo 实例(使用已有外部数据库,MySQL 为例)
vi ~/halo/docker-compose.yaml
添加下面内容:
version: "3"
services:
halo:
image: halohub/halo:2.5
container_name: halo
restart: on-failure:3
network_mode: "host"
volumes:
- ./:/root/.halo2
command:
# 修改为自己已有的 MySQL 配置
- --spring.r2dbc.url=r2dbc:pool:mysql://localhost:3306/halo
- --spring.r2dbc.username=root
- --spring.r2dbc.password=
- --spring.sql.init.platform=mysql
# 外部访问地址,请根据实际需要修改
- --halo.external-url=http://localhost:8090/
# 初始化的超级管理员用户名
- --halo.security.initializer.superadminusername=admin
# 初始化的超级管理员密码
- --halo.security.initializer.superadminpassword=P@88w0rd
# 端口号 默认8090
- --server.port=8090
2. 启动Docker Compose文件
# 启动 Halo 服务
docker-compose up -d
# 实时查看日志
docker-compose logs -f
3. 更新容器组
# 停止运行中的容器组
cd ~/halo && docker-compose down
# 备份数据(重要)
cp -r ~/halo ~/halo.archive
更新Halo 服务,修改 docker-compose.yaml 中配置的镜像版本:
services:
halo:
image: halohub/halo:2.5
container_name: halo
docker-compose pull halo
docker-compose up -d
4. 反向代理
在您的 Ubuntu 服务器上安装 Nginx:
sudo apt-get update
sudo apt-get install nginx
然后,打开 Nginx 配置文件:
sudo vi /etc/nginx/sites-available/default
将以下配置复制并粘贴到文件末尾:
upstream halo {
server 127.0.0.1:8090;
}
server {
listen 80;
listen [::]:80;
server_name www.yourdomain.com;
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;
}
}
将 www.yourdomain.com
替换为您的域名或 IP 地址。
保存并关闭文件,然后使用以下命令启用配置:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
最后,重新启动 Nginx:
sudo service nginx restart
5. 说明
(1)参数详解:
参数名 | 描述 |
---|---|
spring.r2dbc.url | 数据库连接地址,详细可查阅下方的 数据库配置 |
spring.r2dbc.username | 数据库用户名 |
spring.r2dbc.password | 数据库密码 |
spring.sql.init.platform | 数据库平台名称,支持 postgresql、mysql、h2 |
halo.external-url | 外部访问链接,如果需要在公网访问,需要配置为实际访问地址 |
halo.security.initializer.superadminusername | 初始超级管理员用户名 |
halo.security.initializer.superadminpassword | 初始超级管理员密码 |
(2)数据库配置:
链接方式 | 链接地址格式 | spring.sql.init.platform |
---|---|---|
PostgreSQL | r2dbc:pool:postgresql://{HOST}:{PORT}/ | postgresql |
MySQL | r2dbc:pool:mysql://{HOST}:{PORT}/ | mysql |
MariaDB | r2dbc:pool:mariadb://{HOST}:{PORT}/ | mysql |
H2 Database | r2dbc:h2:file:///${halo.work-dir}/db/halo-next?MODE=MySQL&DB_CLOSE_ON_EXIT=FALSE | h2 |
二、Docker方式
1. 创建容器
docker run \
-it -d \
--name halo \
--restart=always \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
halohub/halo:2.5 \
--halo.external-url=http://localhost:8090/ \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd
-it:开启输入功能并连接伪终端
-d:后台运行容器
–name:为容器指定一个名称
-p:端口映射,格式为 主机(宿主)端口:容器端口 ,可在 application.yaml 配置。
-v:工作目录映射。形式为:-v 宿主机路径:/root/.halo2,后者不能修改。
2. 升级版本
# 拉取新版本镜像
docker pull halohub/halo:2.5
# 停止运行中的容器
docker stop halo
docker rm halo
# 备份数据(重要)
cp -r ~/.halo2 ~/halo2.archive
3. 更新 Halo
docker run \
-it -d \
--name halo \
-p 8090:8090 \
-v ~/.halo2:/root/.halo2 \
halohub/halo:2.5 \
--halo.external-url=http://localhost:8090/ \
--halo.security.initializer.superadminusername=admin \
--halo.security.initializer.superadminpassword=P@88w0rd
三、 源码搭建
步骤 1:安装必要的软件包
在开始之前,确保您的 Ubuntu 系统已经安装了必要的软件包。您可以使用以下命令来安装:
sudo apt update
sudo apt install default-jdk nginx
这将安装 OpenJDK 和 Nginx 软件包。
步骤 2:下载并配置 Halo 博客
接下来,您需要下载并配置 Halo 博客。使用以下命令下载最新版本的 Halo:
wget https://github.com/halo-dev/halo/releases/download/v1.6.2/halo-1.6.2.jar
然后,使用以下命令创建 Halo 的配置文件:
mkdir ~/.halo
nano ~/.halo/application.yml
将以下配置复制并粘贴到 application.yml 文件中:
server:
port: 8080
servlet:
context-path: /halo
spring:
datasource:
url: jdbc:h2:file:~/halo_db/halo
username: sa
password: halo
driver-class-name: org.h2.Driver
thymeleaf:
cache: false
jackson:
date-format: yyyy-MM-dd HH:mm:ss
time-zone: GMT+8
servlet:
multipart:
max-file-size: 10MB
max-request-size: 20MB
halo:
path:
upload: /data/upload
avatar: /data/avatar
attachment: /data/attachment
admin:
username: admin
password: admin
email: admin@example.com
nickname: Admin
cache:
maximum-size: 10000
expire-time: 3600
auto-remove: true
mail:
host: smtp.example.com
username: example@example.com
password: password
port: 25
protocol: smtp
properties:
mail:
smtp:
auth: true
starttls:
enable: true
security:
csrf:
enable: false
remember-me-key: halo
其中,您需要将 admin 的用户名、密码、电子邮件和昵称更改为您自己的。
步骤 3:配置 Nginx
在您的 Ubuntu 服务器上安装 Nginx:
sudo apt-get update
sudo apt-get install nginx
然后,打开 Nginx 配置文件:
sudo vi /etc/nginx/sites-available/default
将以下配置复制并粘贴到文件末尾:
server {
listen 80;
server_name example.com; # 您的域名或 IP 地址
location /halo/ {
proxy_pass http://127.0.0.1:8080/halo/;
proxy_set_header Host $host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
}
}
将 example.com
替换为您的域名或 IP 地址。
保存并关闭文件,然后使用以下命令启用配置:
sudo ln -s /etc/nginx/sites-available/default /etc/nginx/sites-enabled/
最后,重新启动 Nginx:
sudo service nginx restart
步骤 4:启动 Halo 博客
现在,您已经完成了 Halo 博客的配置。使用以下命令启动 Halo:
java -jar halo-1.6.2.jar
Halo 将在 8080
端口上启动。
步骤 5:完成安装
现在,您可以在浏览器中访问 http://example.com/halo
(将 example.com 替换为您的域名或 IP 地址)来完成 Halo 博客的安装。
在安装界面中,您需要输入数据库连接信息、管理员账户信息和站点信息。确保您已经填写了正确的信息并单击“完成安装”按钮。
安装完成后,您可以在浏览器中访问您的博客站点,即可开始使用 Halo 博客。
评论区