目 录CONTENT

文章目录

Ubuntu上安装和配置Halo博客的完整指南

GrantLi
2023-04-27 / 0 评论 / 0 点赞 / 782 阅读 / 14655 字 / 正在检测是否收录...

在 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 博客。

参考链接

1. 使用 Docker Compose 部署

0

评论区