心睿
发布于 2025-09-04 / 4 阅读
0
0

飞牛OS使用halo搭建个人博客并使用域名访问

解决思路

对于想搭建个人博客的,使用云服务器的话,比如我在阿里云注册的一台基础版99元/年的服务器配置是2 核(vCPU)2 GiB,公网带宽3Mbps,好的是有公网IP,性能显然是不够用的。如果使用自己家里的飞牛NAS建站,性能应该是能够满足,但是又苦于没有公网IP,即使使用DDNS穿透,也只限于能够IPv6能够访问。如果使用飞牛OS建站,在云服务器、家里的飞牛OS上安装Zerotier组建虚拟局域网,然后在云服务器上搭建Nginx Proxy Manager (NPM),配置NPM作为反向代理,将不同的域名请求转发到Halo服务,并设置HTTP到HTTPS的重定向。

这是我搭建好的博客效果:https://www.weixr.cn

一、在飞牛OS上部署halo博客系统

Halo是一个现代化的开源博客系统,使用Java开发。以下是使用Docker Compose部署Halo的步骤:

创建halo服务并启动

  1. 在飞牛OS的文件管理创建一个专门用于Halo的文件夹,例如 halo

  2. 在飞牛OS的Docker应用中,选择 Compose > 新增项目

  3. 项目名称填写为 halo路径选择你刚才创建的 halo 目录。

  4. 选择创建docker-compose.yml,复制下面的代码,勾选创建项目后立即启动

22afd704-dc56-435f-b2a6-dfd688be49b5.png

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.21
    restart: on-failure:3
    container_name: halo
    depends_on:
      halo_db:
        condition: service_healthy
    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
    environment:
      # JVM 参数,默认为 -Xmx256m -Xms256m,可以根据实际情况做调整,置空表示不添加 JVM 参数
      - JVM_OPTS=-Xmx256m -Xms256m
    command:
      - --spring.r2dbc.url=r2dbc:pool:postgresql://halo_db/halo
      - --spring.r2dbc.username=halo
      # PostgreSQL 的密码,请保证与下方 POSTGRES_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=YourStrongPassword123!
      - --spring.sql.init.platform=postgresql
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/
  halo_db:
    image: postgres:15.4
    restart: on-failure:3
    container_name: halo_db
    volumes:
      - ./halosql:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=YourStrongPassword123!
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo
  • 重要提示:请务必将 YourStrongPassword123! 替换为你自己的强密码(同时修改两处),并妥善保管。

然后点击 确定,等待片刻,Docker会开始拉取镜像并创建容器。你可以在Compose项目的日志中查看启动状态。

初始化Halo

  1. 在浏览器中访问 http://你的飞牛OS IP地址:8090

  2. 你将看到Halo的初始化界面,根据提示设置管理员账号博客标题等基本信息。

  3. 初始化完成后,你就可以通过 http://你的飞牛OS IP地址:8090/console 登录到Halo的管理后台了。

二、准备域名和服务器

  1. 到云服务商,注册域名,购买云服务器。我是在阿里云(https://www.aliyun.com/)注册的,域名15元/年,云服务器99元/年。

  2. 域名购买之后域名备案,申请之后可能需要几天时间。域名备案后将域名解释到你的云服务器的公网IP地址。

  3. 你注册的域名通常是二级域名,你也可以解析三级域名到各种设置,比如你家里的宽带有IPv6的话,也可以通过在飞牛OS上配置DDNS,将域名解析到你飞牛OS,然后在有IPv6的网络环境中,直接使用域名访问你nas。我的域名是weixr.cn,我将weixr.cn、www.weixr.cn解析到了我的个人博客,另外还配置了fn.weixr.cn就解析到了我的飞牛。

  4. 在云服务器安全组配置放开80,81,443端口允许访问。

三、安装并配置Nginx Proxy Manager (NPM)

Nginx Proxy Manager (NPM) 提供了一个友好的Web界面来管理Nginx反向代理和SSL证书,比直接配置Nginx配置文件更简单。

在云服务器上安装docker以及docker compose。

部署Nginx Proxy Manager

在云服务器中,部署Nginx Proxy Manager服务。 docker-compose.yml 文件内容如下:

version: "3"
services:
  app:
    image: 'jc21/nginx-proxy-manager:latest'
    restart: unless-stopped
    ports:
      - '80:80'    # HTTP端口
      - '443:443'  # HTTPS端口
      - '81:81'    # NPM管理界面端口
    volumes:
      - ./data:/data
      - ./letsencrypt:/etc/letsencrypt
    environment:
      DB_SQLITE_FILE: "/data/database.sqlite"
  1. 启动成功后,如果你配置好了域名解析的话,在浏览器中访问 http://你的域名:81 打开NPM的管理界面,也可以使用http://云服务器公网IP:81来打开NPM的管理界面。

  2. 首次登录使用默认账号:

    • 邮箱: admin@example.com

    • 密码: changeme

  3. 登录后,系统会立即要求你修改管理员邮箱和密码,请务必进行修改。

申请并配置SSL证书

NPM内置了SSL证书申请功能,推荐在NPM中配置SSL证书。

  1. 在NPM管理界面(:81端口),点击 SSL Certificates > Add SSL Certificate > Let's Encrypt

  2. 填写你的域名:

    • Domain Names 中填写 weixr.cnwww.weixr.cn (每行一个或用英文逗号分隔,将域名改为你的域名)。

  3. 勾选 Use a DNS challengeI agree to the Let's Encrypt Terms of Service

    • DNS挑战验证:对于家庭宽带通常封锁80端口的情况,DNS验证是最可靠的方式。你需要根据你的域名注册商(阿里云)在NPM中配置相应的API凭证,以便Certbot自动添加TXT记录。

    • 由于阿里云API的配置较为复杂,如果遇到困难,你可以选择在NPM中手动验证,然后根据提示到阿里云DNS解析设置中手动添加指定的TXT记录值。

  4. 点击 Save,NPM会自动尝试申请证书。成功后,你会在证书列表中看到它。

配置反向代理与域名访问

现在,你需要将域名指向Halo服务,并强制使用HTTPS。

  1. 在NPM管理界面,点击 Hosts > Proxy Hosts > Add Proxy Host

  2. 进行如下配置:

    • Domain Names: 输入 weixr.cnwww.weixr.cn

    • Scheme: http

    • Forward Hostname / IP: 填写你的飞牛OS主机在Docker网络内的IP地址(通常是172.x.x.x)或主机名。如果Halo和NPM在同一个Docker Compose项目中,你可以使用服务名halo;否则,可能需要填写Halo容器的实际IP。一个简单的方法是填写飞牛OS的内网IPv4地址或localhost

    • Forward Port: 8090 (Halo的服务端口)。

  3. SSL标签页:

    • SSL Certificate: 选择你刚才申请的SSL证书(例如 weixr.cn)。

    • 开启 Force SSLHTTP/2 Support

  4. 点击 Save,配置即刻生效。


评论