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