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