Halo2.0 博客搭建
felicx 化神

前言

之前在 Halo 1.0 时,是直接使用 jar 部署的,每次更新啥都还是有点麻烦,这次直接使用 Docker Compose 部署,省时省事,建站必备。

环境搭建

因为是使用 Docker Compose 部署,所以需要安装 Docker 和 Docker Compose 。

Docker 安装

主要是参考官方文档安装。

  • Uninstall old versions
    1
    for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done
  • Set up Docker’s apt repository
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    # Add Docker's official GPG key:
    sudo apt-get update
    sudo apt-get install ca-certificates curl gnupg
    sudo install -m 0755 -d /etc/apt/keyrings
    curl -fsSL https://download.docker.com/linux/ubuntu/gpg | sudo gpg --dearmor -o /etc/apt/keyrings/docker.gpg
    sudo chmod a+r /etc/apt/keyrings/docker.gpg

    # Add the repository to Apt sources:
    echo \
    "deb [arch="$(dpkg --print-architecture)" signed-by=/etc/apt/keyrings/docker.gpg] https://download.docker.com/linux/ubuntu \
    "$(. /etc/os-release && echo "$VERSION_CODENAME")" stable" | \
    sudo tee /etc/apt/sources.list.d/docker.list > /dev/null
    sudo apt-get update
  • Install the latest version Docker packages
    1
    sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin
  • Verify that the Docker Engine installation
    1
    sudo docker --version
  • Use docker without sudo
    1
    2
    3
    sudo groupadd docker
    sudo usermod -aG docker $USER
    grep docker /etc/group

Docker Compose 安装

主要是参考官方文档安装。

  • download and install the Compose CLI plugin
    1
    curl -SL https://github.com/docker/compose/releases/download/v2.23.0/docker-compose-linux-x86_64 -o /usr/local/lib/docker/cli-plugins/docker-compose
    可能服务器没法下载github的链接,可以本地下载 docker-compose-linux-x86_64 这个文件,改名字成 docker-compose ,然后 scp 传到服务器/usr/local/lib/docker/cli-plugins/这个路径下
  • Apply executable permissions to the binary
    1
    sudo chmod +x /usr/local/lib/docker/cli-plugins/docker-compose
  • Test the installation
    1
    2
    docker compose version
    Docker Compose version v2.23.0

创建容器组

  • 在系统任意位置创建一个文件夹,我用的是之前 1.0 时候的 ~/halo
    1
    mkdir ~/halo && cd ~/halo
  • 创建 docker-compose.yaml
    这里创建 Halo + MySQL 的实例
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    version: "3"

    services:
    halo:
    image: halohub/halo:2.10
    container_name: halo
    restart: on-failure:3
    depends_on:
    halodb:
    condition: service_healthy
    networks:
    halo_network:
    volumes:
    - ./halo2:/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
    # 外部访问地址,如果设置了域名反代直接写https://xxx.com,没有就先把localhost替换成服务器ip,后面设置了域名反代再修改
    - --halo.external-url=http://localhost:8090/

    halodb:
    image: mysql:8.1.0
    container_name: halodb
    restart: on-failure:3
    networks:
    halo_network:
    command:
    - --default-authentication-plugin=caching_sha2_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=o#DwN&JSa56
    - MYSQL_DATABASE=halo

    networks:
    halo_network:
  • 启动 Halo 服务
    第一次会自动下载 halo 和 halodb 镜像
    1
    2
    3
    4
    5
    6
    # 进入 ~/halo 目录下,启动 halo
    docker compose up -d
    # 关闭 halo
    docker compose down
    # 实时查看日志
    docker compose logs -f
  • 用浏览器访问http://ip:端口号/console即可进入 Halo 管理页面,首次启动会进入初始化页面,可以设置密码、导入文件这些

Halo 1.0数据迁移

安装插件

因为 Halo 2.0 的底层架构变动,无法兼容 1.x 的数据,导致无法平滑升级。所以需要使用官方给的迁移插件,才能进行数据迁移。

点击侧边栏应用市场,搜索安装一下几个插件:

导出 Halo 1.0 数据

在 Halo 1.0 后台,依次点击系统-小工具-博客备份-数据导出,将json格式数据下载。

数据导入 Halo 2.0

  • 安装完插件后,点击左侧菜单的迁移进入迁移页面。
  • 点击选择文件按钮,选择在 Halo 1.0 导出的数据文件(JSON 格式)。
  • 如果在 1.0 中使用了云存储,会弹出选择云存储的对话框,选择之前创建的存储策略即可。
  • 最后点击页面下方的执行导入即可。

反向代理

做完上面的操作,你就可以通过http://ip:端口号/来访问你的博客了,和之前 Halo 1.0 内容应该差别不大。但是你肯定不想暴露自己的ip和端口到公网,那就需要用到反代神器 Nginx Proxy Manager(NPM) 了。

NPM 介绍

顾名思义,Nginx Proxy Manager 就是一个 Nginx 的代理管理器,它最大的特点是简单方便。

即使是没有 Nginx 基础的小伙伴,也能轻松地用它来完成反向代理的操作,而且因为自带面板,操作极其简单,非常适合配合 docker 搭建的应用使用。

Nginx Proxy Manager 后台还可以一键申请 SSL 证书,并且会自动续期,方便省心。

下面我们就来介绍如何用 Nginx Proxy Manger 来配合 Halo,实现反向代理和 HTTPS 访问。

NPM 安装

  • 停止 nginx、apache2、halo 1.0,不然会占用端口
    1
    2
    3
    4
    5
    6
    7
    8
    # 关闭进程
    sudo service nginx stop
    sudo service apache2 stop
    sudo service halo stop
    # 禁止开机自启动
    sudo systemctl disable nginx.service
    sudo systemctl disable apache2.service
    sudo systemctl disable halo.service
  • 创建一个文件夹来存放 NPM 的数据和证书
    1
    mkdir -p ~/data/docker_data/nginxproxymanager
  • 修改上面 ~/halo/docker-compose.yaml 文件,将 NPM 和 Halo 部署放在同一个文件
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    # 参考原来的布局,在services子类下添加
    app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
    - '80:80' # 不建议修改端口
    - '81:81' # 可以把冒号左边的 81 端口修改成你服务器上没有被占用的端口
    - '443:443' # 不建议修改端口
    volumes:
    - ~/data/docker_data/nginxproxymanager/data:/data # 冒号左边是创建一个 data 目录,用于存放数据,如果不存在的话,会自动>创建
    - ~/data/docker_data/nginxproxymanager/letsencrypt:/etc/letsencrypt # 创建一个 letsencrypt 目录,用于存放证书,如果不存在的话>,会自动创建
  • 这样就可以通过docker compose up -d来启动 NPM 了

NPM 访问

浏览器输入ip:81就可以访问 NPM 的网页端了。

默认登陆的用户名:admin@example.com,密码:changeme

第一次登陆会提示更改用户名和密码,建议修改一个复杂一点的密码。

至此,我们已经完成了 Nginx Proxy Manager 的搭建,之后就可以用它给我们的 Halo 或者其他 Web 应用做反向代理了。

NPM 配置

依次点击Dashboard - Proxy Hosts - Add Proxy Host - Details,分别填入以下信息

  • Domain Names:填我们 Halo 网站的域名,首先记得做好 DNS 解析,把域名绑定到我们的服务器的 IP 上
  • Scheme:默认 http 即可,除非你有自签名证书
  • Forward Hostname/IP:填入服务器的 IP,或者 Docker 容器内部的 IP(如果 NPM 和 Halo 搭建在同一台服务器上的话)
    • 通过ip addr show docker0查看,inet 后面跟着的就是 Docker 容器内部的 IP
  • Forward Port:填入 Halo 映射出的端口,这边默认是 8090
  • Cache Assets:缓存,可以选择打开
  • Block Common Exploits:阻止常见的漏洞,可以选择打开
  • Websockets Support:WS 支持,可以选择打开

然后就是申请 SSL 证书。参考这篇文章进行申请,这里只讲怎么使用证书。

点击SSLSSL Certificate选择上面申请的证书,打开Force SSL,点击Save即可。

至此,你已经成功完成了 Halo 的反向代理,快尝试使用域名访问一下看看吧!

参考

 评论
评论插件加载失败
正在加载评论插件
由 Hexo 驱动 & 主题 Keep
访客数 访问量