# 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`