侧边栏壁纸
  • 累计撰写 1 篇文章
  • 累计创建 3 个标签
  • 累计收到 0 条评论

目 录CONTENT

文章目录

Halo搭建

tt
tt
2025-01-04 / 0 评论 / 1 点赞 / 29 阅读 / 0 字

既然是建站第一篇文章,就记录一下本博客网站搭建的过程吧。其实官方文档已经十分丰富全面了:https://docs.halo.run/

1. 模板选择

市面上有很多建站工具可以选择(halo,typecho,wordpress等),看了YouTube评测做了攻略(https://blog.laoda.de/)后出于主题较为丰富和好看选择了halo。

2. 服务器安装docker及compose

vps是ubuntu 20.04,docker安装官方文档:https://docs.docker.com/engine/install/ubuntu/

指令如下:

2.1移除旧版本(若是全新vps,可忽略)
for pkg in docker.io docker-doc docker-compose docker-compose-v2 podman-docker containerd runc; do sudo apt-get remove $pkg; done

该指令删除内容为:

  • docker.io

  • docker-compose

  • docker-compose-v2

  • docker-doc

  • podman-docker

2.2添加docker源
# Add Docker's official GPG key:
sudo apt-get update
sudo apt-get install ca-certificates curl
sudo install -m 0755 -d /etc/apt/keyrings
sudo curl -fsSL https://download.docker.com/linux/ubuntu/gpg -o /etc/apt/keyrings/docker.asc
sudo chmod a+r /etc/apt/keyrings/docker.asc
​
# Add the repository to Apt sources:
echo \
  "deb [arch=$(dpkg --print-architecture) signed-by=/etc/apt/keyrings/docker.asc] 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
2.3 安装docker
sudo apt-get install docker-ce docker-ce-cli containerd.io docker-buildx-plugin docker-compose-plugin

该命令包括了docker及docker compose

3.搭建准备

  • 安装nginx proxy manager容器来进行反代访问博客,所以涉及到容器之间访问,需要对docker网络做调整

docker network create personal_net #创建一个自定义docker网络personal_net
  • ufw防火墙开放指定端口(80,443)

ufw allow http #放行80
ufw allow https #放行443

4.配置halo compose

我直接使用的是root用户,在/root/目录下,新建halo文件夹

cd #到root家目录
mkdir -p compose/halo #创建compose目录及目录下halo目录
cd compose/halo #进入目录
vi docker-compose.yaml #挑一个会用的编辑器(vi,vim,nano等等)

将下面compose配置粘贴进docker-compose.yaml,与官方文档给的配置不同的地方在于

  1. networks改为和上面对应的personal_net

  2. 数据库mysql端口做了映射"13306:3306"以备后续使用

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.20
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      - personal_net
    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
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    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/
​
  halodb:
    image: mysql:8.1.0
    restart: on-failure:3
    networks:
      - personal_net
    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:
      - "13306: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:
  personal_net:
  external: true

5.配置npm compose

官方文档:https://nginxproxymanager.com/guide/

同第四步写配置的方式:

cd #到root家目录
mkdir -p compose/npm
cd compose/npm #进入目录
vi docker-compose.yaml #挑一个会用的编辑器(vi,vim,nano等等)

将下面npm compose配置粘贴进docker-compose.yaml中

services:
  npm:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    networks:
      - personal_net
    container_name: npm
    ports:
      - '80:80'
      - '81:81'
      - '443:443'
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      - TZ=Asia/Shanghai
networks:
  personal_net:
    external: true

6.启动容器

到各自服务的compose目录下执行docker compose up -d

cd /root/compose/halo
docker compose up -d
cd /root/compose/npm
docker compose up -d

7.npm反代halo

7.1防火墙放行npm web页面

npm web端口默认为81

ufw allow 81/tcp

然后地址栏输入ip:81访问npm web设置页面

7.2设置halo反向代理

这里痛点(反代ip填写)已经在前面docker 网络配置解决。

7.2.1 Forward Hostname / IP

查看所有使用容器网络personal_net的容器ip,指令如下:

docker network inspect personal

输入信息中找到halo容器ip信息:

"IPv4Address": "172.18.0.4/16"

故halo博客容器ip为:172.18.0.4

进入web,默认用户名密码如下,登录,创建用户名密码等

Email: [email protected] Password: changeme

  1. 依次点击dashboard->proxy hosts->Add Proxy Host

  2. domain names填写博客域名

  3. Forward Hostname / IP填写:172.18.0.4

  4. 端口填写halo compose配置中映射端口:8090

7.3npm反代主机服务

有些服务可能不是用docker搭建,依然可以用npm反代,但是Forward Hostname / IP就不能简单的填写localhost了,此时localhost代表的是npm容器内部主机。

解决办法:

7.3.1使用网关ip

获取 Docker 网络网关 IP:

docker network inspect personal_net

找到 Gateway 字段,例如 172.18.0.1

7.3.2防火墙放行网关ip

在 NPM 中配置反向代理时,将 IP 地址设置为该网关 IP,端口为宿主机上服务的端口。当然,还需要配置一下防火墙:

ufw allow from 172.18.0.0/16

1

评论区