zensyra
Published on 2025-04-14 / 14 Visits
0

个人主页搭建《3》

0、整体框架

1、安装FRPC

为了外网能正常访问NAS上的服务,肯定需要先安装FRP客户端建立内网穿透通道。

使用以下配置拉起frp客户端(docker-compose.yaml):

services:
  frpc:
    image: snowdreamtech/frpc:latest
    container_name: frpc
    restart: always
    network_mode: host
    volumes:
      - /etc/localtime:/etc/localtime:ro
      - ./frpc.toml:/etc/frp/frpc.toml:ro
      - ./logs:/frp/logs

客户端配置文件(frpc.toml):

serverAddr = "3.27.x.x"  # 服务端公网IP地址,根据实际情况配置
serverPort = 7000		 # 服务端通信端口,根据实际情况配置

auth.method = "token"
auth.token = "token"  	 # token与服务端保持一直

[[proxies]]
name = "homepage"                  # 需要内网穿透的服务名称
type = "tcp"                       # 穿透类型
localIP = "192.168.3.99"           # 本地监听地址
localPort = 8080                   # 个人主页服务的本地端口号
remotePort = 8080                  # 服务端给个人主页映射的端口号
transport.useEncryption = true     # 打开通道加密

安装好frp客户端后,打开frp服务端监控面板可以看到连接状态。

2、安装homepage服务

使用docker拉起个人主页服务,配置如下(docker-compose.yaml):

version: '3'
services:
  nginx:
    restart: always
    container_name: homepage
    image: nginx:latest
    ports:
      - 8080:80
    volumes:
      - /volume4/docker/homepage/html:/usr/share/nginx/html:ro
    environment:
      - NGINX_PORT=80
      - TZ=Asia/Shanghai

我这里部署的是简单的页面,直接从网上下载的模板挂载到nginx容器中。需要注意的是,容器的应用实际服务端口号是什么,映射到外部的端口号必须是8080(和nginx-proxy-manager中配置的代理端口号一致)。

homepage服务拉起后,就可以通过域名`zensyra.com`访问。

3、安装博客服务

直接使用如下配置拉起服务(docker-compose.yaml):

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.20
    restart: on-failure:3
    depends_on:
      halodb:
        condition: service_healthy
    networks:
      halo_network:
    volumes:
      - /volume4/docker/halo/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: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/
  halodb:
    image: postgres:15.4
    restart: on-failure:3
    networks:
      halo_network:
    volumes:
      - /volume4/docker/halo/db:/var/lib/postgresql/data
    healthcheck:
      test: [ "CMD", "pg_isready" ]
      interval: 10s
      timeout: 5s
      retries: 5
    environment:
      - POSTGRES_PASSWORD=passwd
      - POSTGRES_USER=halo
      - POSTGRES_DB=halo
      - PGUSER=halo

networks:
  halo_network:

卷挂载目录根据自己的实际情况配置;外部端口我这里选择8090.

博客起来后,需要配置域名解析、反向代理和内网穿透:

1、在域名服务商处配置域名解析:blog.zensyra.com --> <VPS PUBLIC IP>

2、打开ngnix-proxy-manager管理界面配置反向代理:blog.zensyra.com --> <VPS IP>:8090

3、编辑客户端配置文件(frpc.toml),加入如下配置后重启frp客户端:

[[proxies]]							
name = "blog"
type = "tcp"			 # 穿透类型
localIP = "192.168.3.99" # 本地监听地址和端口
localPort = 8090
remotePort = 8090
transport.useEncryption = true

配置好后就可以通过`blog.zensyra.com`访问博客服务。

4、配置相册服务

直接使用如下配置拉起服务(docker-compose.yaml):

services:
  piwigo:
    image: linuxserver/piwigo:latest
    container_name: piwigo
    restart: unless-stopped
    volumes:
      - /volume4/docker/piwigo/config:/config
      - /volume4/docker/piwigo/gallery:/gallery
    ports:
      - 8070:80
    environment:
      - PUID=1000
      - PGID=10
      - TZ=Asia/Shanghai
    depends_on:
      - mysql

  mysql:
    image: mysql:5.7
    container_name: piwigo_mysql
    environment:
      MYSQL_DATABASE: piwigo
      MYSQL_USER: gavin
      MYSQL_PASSWORD: passwd
      MYSQL_ROOT_PASSWORD: passwd
    volumes:
      - /volume4/docker/piwigo/mysql:/var/lib/mysql

卷挂载目录根据自己的实际情况配置;外部端口我这里选择8070.

相册服务起来后,需要配置域名解析、反向代理和内网穿透:

1、在域名服务商处配置域名解析:images.zensyra.com --> <VPS PUBLIC IP>

2、打开ngnix-proxy-manager管理界面配置反向代理:images.zensyra.com --> <VPS IP>:8070

3、编辑客户端配置文件(frpc.toml),加入如下配置后重启frp客户端:

[[proxies]]
name = "images"
type = "tcp"
localIP = "192.168.3.99" # 本地监听地址和端口
localPort = 8070
remotePort = 8070
transport.useEncryption = true

配置好后就可以通过images.zensyra.com访问相册服务。

end