Files
frp-panel/docs/deploy-master.md
2025-05-25 11:06:08 +00:00

248 lines
8.4 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# Master 部署
Master 推荐使用 docker 部署!不推荐直接安装到服务器中
会给出三种部署方式,任选一种即可
部署后没有默认用户,注册的第一个用户即为管理员,为了安全,默认不开启多用户注册
程序的默认存储数据路径和程序文件同目录,如需修改请参考配置表格
重要!:如果你想只部署 master同时作为 server 运行,请不要忘记启动 master 后,在 webui 的配置服务端中修改 default 的配置
## 前期准备
### 服务器开放公网端口:
- **WEBUI 端口**: 默认 `TCP 9000`
- **RPC 端口**: 默认 `TCP 9001`
- **frps 的API端口**:没有默认,请随意预留,例子使用 `TCP/UDP 7000`
- **frps 对外开放的服务端口**:没有默认,请随意预留,例子使用 `TCP/UDP 26999-27050`
如果使用反向代理,请忽略 WEBUI 和 RPC 端口,放行 80/443 即可
WEBUI 端口也可以处理 h2c 格式的 RPC 连接
RPC 端口也可以处理自签名 HTTPS 的 API 连接
二者都可使用反向代理服务器连接并提供TLS
如果你想要使用安全的方式,请参考下图设置环境变量「`CLIENT_RPC_URL``CLIENT_API_URL`」。
注意⚠️:请首先使用普通部署的方式部署成功!然后再来调整这两个变量!!!!
橙色是不安全,绿色是安全。你需要保证两个环境变量都有设置,才能正常工作
![](./public/images/frp-panel-platform-connection-env.svg)
> 测试端口是否开放的方法以8080为例在服务器上运行
> ```shell
> python3 -m http.server 8080
> ```
> 然后在另一台电脑/服务器上执行:
> ```shell
> curl http://服务器公网IP/域名:8080 -I
> ```
> 成功的话,输出类似
> ```
> HTTP/1.0 200 OK
> Server: SimpleHTTP/0.6 Python/3.11.0
> Date: Sat, 12 Apr 2025 17:12:15 GMT
> Content-type: text/html; charset=utf-8
> Content-Length: 8225
> ```
## 在 Linux 上部署
### 方式一Docker Compose 部署
服务器需要安装docker和docker compose
首先创建一个`docker-compose.yaml`文件,写入以下内容
```yaml
version: "3"
services:
frpp-master:
image: vaalacat/frp-panel:latest
network_mode: host
environment:
APP_GLOBAL_SECRET: your_secret
MASTER_RPC_HOST: 1.2.3.4 #服务器的外部IP或域名
MASTER_RPC_PORT: 9001
MASTER_API_HOST: 1.2.3.4 #服务器的外部IP或域名
MASTER_API_PORT: 9000
MASTER_API_SCHEME: http
volumes:
- ./data:/data # 数据存储位置
restart: unless-stopped
command: master
```
### 方式二Docker 命令部署
服务器需要安装 docker我们推荐使用 host 网络模式部署 `Master`
```bash
# 推荐
# MASTER_RPC_HOST要改成你服务器的外部IP
# APP_GLOBAL_SECRET注意不要泄漏客户端和服务端的是通过Master生成的
docker run -d \
--network=host \
--restart=unless-stopped \
-v /opt/frp-panel:/data \
-e APP_GLOBAL_SECRET=your_secret \
-e MASTER_RPC_HOST=0.0.0.0 \
vaalacat/frp-panel
```
如果你不想使用 host 网络模式,请参考使用下面的命令修改
```bash
# 或者
# 运行时记得删除命令中的中文
docker run -d -p 9000:9000 \ # API控制台端口
-p 9001:9001 \ # rpc端口
-p 7000:7000 \ # frps 端口
-p 27000-27050:27000-27050 \ # 给frps预留的端口
--restart=unless-stopped \
-v /opt/frp-panel:/data \ # 数据存储位置
-e APP_GLOBAL_SECRET=your_secret \ # Master的secret注意不要泄漏客户端和服务端的是通过Master生成的
-e MASTER_RPC_HOST=0.0.0.0 \ # 这里要改成你服务器的外部IP
vaalacat/frp-panel
```
### 方式三:使用 docker 反向代理 TLS 加密部署
这里我们以 [Traefik](https://traefik.io/traefik/) 为例
> `Traefik` 可以实时自动识别 Docker 容器的端口并热更新配置,非常适合 Docker 服务的反向代理
首先创建一个名为`traefik`的反向代理专用网络
```bash
docker network create traefik
```
然后启动反向代理和 Master 服务
- `docker-compose.yaml`
```yaml
version: '3'
services:
traefk-reverse-proxy:
image: traefik:v3.3
restart: unless-stopped
networks:
- traefik
command:
- --entryPoints.web.address=:80
- --entryPoints.websecure.address=:443
- --entryPoints.websecure.http2.maxConcurrentStreams=250
- --providers.docker
- --providers.docker.network=traefik
- --api.insecure # 在生产环境请删除这一行
# 这下面使用 80 端口做ACME HTTP DNS证书验证
- --certificatesresolvers.le.acme.email=me@example.com
- --certificatesresolvers.le.acme.storage=/etc/traefik/conf/acme.json
- --certificatesresolvers.le.acme.httpchallenge=true
ports:
# 反向代理的 HTTP 端口
- "80:80"
# 反向代理的 HTTPS 端口
- "443:443"
# Traefik 的 Web UI (--api.insecure=true 会使用这个端口)
# 生产环境请删除这个端口
- "8080:8080"
volumes:
# 挂载 docker.sock这样 Traefik 可以自动识别主机上所有 docker 容器反向代理配置
- /var/run/docker.sock:/var/run/docker.sock
# 保存 Traefik 申请的证书
- ./conf:/etc/traefik/conf
frpp-master:
image: vaalacat/frp-panel:latest # 这里换成你想使用的版本
environment:
APP_GLOBAL_SECRET: your_secret
# 因为 api 和 rpc 使用的协议不一样
# 我们需要对 api 和 rpc 使用两个域名
# 以便反向代理正确识别需要转发的协议
MASTER_RPC_HOST: frpp.example.com
MASTER_API_PORT: 443
MASTER_API_HOST: frpp-rpc.example.com
MASTER_API_SCHEME: https
networks:
- traefik
volumes:
- ./data:/data
ports:
# 无需为 master 预留 api 和 rpc 端口
# 预留frps api端口
- 7000:7000
- 7000:7000/udp
# 预留frps的业务端口
# 26999 端口是留给 frps 的http代理端口
- 26999-27050:26999-27050
- 26999-27050:26999-27050/udp
restart: unless-stopped
command: master
labels:
# API
- traefik.http.routers.frp-panel-api.rule=Host(`frpp.example.com`)
- traefik.http.routers.frp-panel-api.tls=true
- traefik.http.routers.frp-panel-api.tls.certresolver=le
- traefik.http.routers.frp-panel-api.entrypoints=websecure
- traefik.http.routers.frp-panel-api.service=frp-panel-api
- traefik.http.services.frp-panel-api.loadbalancer.server.port=9000
- traefik.http.services.frp-panel-api.loadbalancer.server.scheme=http
# RPC
- traefik.http.routers.frp-panel-rpc.rule=Host(`frpp-rpc.example.com`)
- traefik.http.routers.frp-panel-rpc.tls=true
- traefik.http.routers.frp-panel-rpc.tls.certresolver=le
- traefik.http.routers.frp-panel-rpc.entrypoints=websecure
- traefik.http.routers.frp-panel-rpc.service=frp-panel-rpc
- traefik.http.services.frp-panel-rpc.loadbalancer.server.port=9000
- traefik.http.services.frp-panel-rpc.loadbalancer.server.scheme=h2c
# 下方如果你用不到 frps 的http代理可以不要
# 需要配置域名 *.frpp.example.com 泛解析到你服务器的公网IP
# 这样可以实现使用 .frpp.example.com 结束的域名,在 443 端口,转发多个服务到多个 frpc
- traefik.http.routers.frp-panel-tunnel.rule=HostRegexp(`.*.frpp.example.com`)
- traefik.http.routers.frp-panel-tunnel.tls.domains[0].sans=*.frpp.example.com
- traefik.http.routers.frp-panel-tunnel.tls=true
- traefik.http.routers.frp-panel-tunnel.tls.certresolver=le
- traefik.http.routers.frp-panel-tunnel.entrypoints=websecure
- traefik.http.routers.frp-panel-tunnel.service=frp-panel-tunnel
- traefik.http.services.frp-panel-tunnel.loadbalancer.server.port=26999
- traefik.http.services.frp-panel-tunnel.loadbalancer.server.scheme=http
networks:
traefik:
external: true
name: traefik
```
上方的 `docker-compose.yaml` 部署完成后,可以访问 `服务器公网IP/域名:8080` 查看反向代理状态
随后配置 default server 即可实现 frp 子域名转发:
| 配置项 | 值 |
|----|-----|
| FRPs 监听端口 | 7000 |
| FRPs 监听地址 | 0.0.0.0 |
| 代理监听地址 | 0.0.0.0 |
| HTTP 监听端口 | 26999 |
| 域名后缀 | frpp.example.com |
## 在 Windows 上部署
### 直接运行
在下载的可执行文件同名文件夹下创建一个 `.env` 文件(注意不要有后缀名),然后输入以下内容保存后运行对应命令
```
APP_GLOBAL_SECRET=your_secret
MASTER_RPC_HOST=IP
DB_DSN=data.db
```
- master: `frp-panel-amd64.exe master`