zensyra
发布于 2025-04-14 / 31 阅读
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):

version: "3"

services:
  halo:
    image: registry.fit2cloud.com/halo/halo:2.21
    container_name: halo
    restart: always
    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:mariadb://halodb:3306/halo
      - --spring.r2dbc.username=root
      # MySQL 的密码,请保证与下方 MYSQL_ROOT_PASSWORD 的变量值一致。
      - --spring.r2dbc.password=xxxxxxxxxxx
      - --spring.sql.init.platform=mariadb
      # 外部访问地址,请根据实际需要修改
      - --halo.external-url=http://localhost:8090/

  halodb:
    image: mariadb:11.7
    container_name: halo-db
    restart: unless-stopped
    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:
      - /volume4/docker/halo/db:/var/lib/mysql
      - /volume4/docker/halo/dbbackup:/data/mysqlBackup
    healthcheck:
      test: ["CMD", "mariadb-admin", "ping", "-h", "127.0.0.1", "--silent"]
      interval: 3s
      retries: 5
      start_period: 60s
    environment:
      # 请修改此密码,并对应修改上方 Halo 服务的 SPRING_R2DBC_PASSWORD 变量值
      - MYSQL_ROOT_PASSWORD=xxxxxxxxxxxx
      - MYSQL_DATABASE=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):

networks:
  piwigo-network:
    external: false

services:
  piwigo:
    image: lscr.io/linuxserver/piwigo:latest
    container_name: piwigo
    restart: unless-stopped
    environment:
      - PUID=1000
      - PGID=10
      - TZ=Asia/Shanghai
    volumes:
      - ./config:/config
      - ./gallery:/gallery
    ports:
      - 8070:80
    networks:
      - piwigo-network
    depends_on:
      - piwigo-db

  piwigo-db:
    image: docker.io/library/mariadb:lts
    restart: always
    environment:
      - MARIADB_RANDOM_ROOT_PASSWORD=true
      - MARIADB_USER=piwigodb_user
      - MARIADB_DATABASE=piwigodb
      # Defined in .env
      - MARIADB_PASSWORD=xxxxxxxx
      - TZ=Asia/Shanghai
    networks:
      - piwigo-network
    volumes:
      - ./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