Jalena Blog

  • 首页
  • 程序开发
    • Java
    • Spring
    • SpringBoot
    • SpringMvc
    • Python
    • Odoo
    • C#
    • SQL
    • Web
    • Linux
  • 移动设备
    • Android
    • Router
  • 杂七杂八
    • 我的废话
    • 音频
    • 视频
    • 常用软件
  • 关于
  1. 首页
  2. 软件开发
  3. Linux
  4. 正文

Deploy Frp with Docker Compose

2019-12-13

项目简介

https://github.com/fatedier/frp

frp 是一个可用于内网穿透的高性能的反向代理应用,支持 tcp, udp 协议,为 http 和 https 应用协议提供了额外的能力,且尝试性支持了点对点穿透。

准备工作

  • 公网ip服务器(阿里云、腾讯云等) - 服务端
  • 内网服务器 - 客户端
  • frp

服务端安装

从 v0.52.0 版本开始,frp 开始支持 TOML、YAML 和 JSON 作为配置文件格式。

请注意,INI 已被弃用,并将在未来的发布中移除。新功能只能在TOML、YAML 或 JSON 中使用。希望使用这些新功能的用户应相应地切换其配置格式。

下载

您可以从 GitHub 的 Release 页面中下载最新版本的客户端和服务器二进制文件。所有文件都打包在一个压缩包中,还包含了一份完整的配置参数说明。

部署

  1. 解压下载的压缩包。
  2. 将 frpc 复制到内网服务所在的机器上。
  3. 将 frps 复制到拥有公网 IP 地址的机器上,并将它们放在任意目录。

开始使用!

  1. 编写配置文件,目前支持的文件格式包括 TOML/YAML/JSON,旧的 INI 格式仍然支持,但已经不再推荐。
  2. 使用以下命令启动服务器:./frps -c ./frps.toml。
  3. 使用以下命令启动客户端:./frpc -c ./frpc.toml。
  4. 如果需要在后台长期运行,建议结合其他工具,如 systemd 和 supervisor。

如果您是 Windows 用户,需要在命令提示符中执行相同的命令。

当然你也可以使用docker来部署,我做了一个frp及vlmcsd的镜像。

git clone https://github.com/jalena/toolkit.git
cd toolkit

# Use docker-compose service 
docker-compose up -d 

使用Docker容器部署客户端

本镜像使用Alpine构建,只包含了 Frpc 客户端,如果你需要自己构建镜像,可以参考 Frpc 客户端 自行修改。

暴露服务

这里继承了docker容器内的自定义网络,从安全角度来讲它并没有将docker母机的网络给暴露出去。

services:
  frp:
    image: jalena/frpc:latest
    container_name: frp
    restart: always
    volumes:
      - ./frpc.toml:/etc/frpc.toml
    networks:
      - frp_network
    deploy:
      resources:
        limits:
          cpus: '0.20'
          memory: 100M
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "10"

networks:                                                                                                                       
  frp_network:
    external: true                                                                                                              
    name: CustomNetWork

frpc参考配置

serverAddr = "frp.baidu.com"
serverPort = 7000
loginFailExit = true

# console or real logFile path like ./frpc.log
log.to = "./frpc.log"
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false

auth.method = "token"
# auth.additionalScopes specifies additional scopes to include authentication information.
# Optional values are HeartBeats, NewWorkConns.
# auth.additionalScopes = ["HeartBeats", "NewWorkConns"]

# auth token
auth.token = "123456789"

# connections will be established in advance, default value is zero
transport.poolCount = 5

[[proxies]]
name = "test1"
type = "stcp"
secretKey = "11111111111111111111"
localIP = "172.16.0.1"
localPort = 8081

[[proxies]]
name = "test_mysql"
type = "stcp"
secretKey = "222222222222222222"
localIP = "10.100.0.10"
localPort = 3306

本地网络代理

这里因为本地可能同时处理多个代理,所以在网络模式采用了host,因此就不需要为每个代理服务单独暴露端口了

services:
  frp:
    image: jalena/frpc:latest
    container_name: frp
    restart: always
    network_mode: host
    volumes:
      - ./frpc.toml:/etc/frpc.toml
    deploy:
      resources:
        limits:
          cpus: '0.20'
          memory: 100M
    logging:
      driver: "json-file"
      options:
        max-size: "10m"
        max-file: "10"

frpc配置

通过docker容器暴露代理服务,bindAddr 参数需要将其绑定在0.0.0.0,否则可能无法使用。

serverAddr = "frp.baidu.com"
serverPort = 7000
loginFailExit = true

# console or real logFile path like ./frpc.log
log.to = "./frpc.log"
# trace, debug, info, warn, error
log.level = "info"
log.maxDays = 3
# disable log colors when log.to is console, default is false
log.disablePrintColor = false

auth.method = "token"
# auth.additionalScopes specifies additional scopes to include authentication information.
# Optional values are HeartBeats, NewWorkConns.
# auth.additionalScopes = ["HeartBeats", "NewWorkConns"]

# auth token
auth.token = "123456789"

# connections will be established in advance, default value is zero
transport.poolCount = 5

[[visitors]]
name = "test_api"
type = "stcp"
serverName = "test1"
secretKey = "11111111111111111111"
bindAddr = "0.0.0.0"
bindPort = 8081

[[visitors]]
name = "test_mysql"
type = "stcp"
serverName = "test_mysql"
secretKey = "222222222222222222"
bindAddr = "0.0.0.0"
bindPort = 13306
标签: frp
最后更新:2025-08-04

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

点赞
< 上一篇
下一篇 >

文章评论

razz evil exclaim smile redface biggrin eek confused idea lol mad twisted rolleyes wink cool arrow neutral cry mrgreen drooling persevering
取消回复

【腾讯云】云服务器特惠热卖中
文章目录
  • 项目简介
  • 准备工作
  • 服务端安装
    • 下载
    • 部署
    • 开始使用!
  • 使用Docker容器部署客户端
    • 暴露服务
    • 本地网络代理
标签聚合
java Centos odoo 其他 生活 wordpress docker MySql
分类
  • Android / 4篇
  • C# / 10篇
  • Codec / 9篇
  • Conversion / 14篇
  • Editing / 16篇
  • Java / 47篇
  • Javascript / 3篇
  • Linux / 30篇
  • Odoo / 25篇
  • Python / 6篇
  • SQL / 30篇
  • Web / 3篇
  • Windows / 4篇
  • 我的日记 / 10篇
  • 杂七杂八 / 93篇
  • 软件开发 / 72篇
  • 非线性编辑 / 1篇

COPYRIGHT © 2026 Jalena Blog. ALL RIGHTS RESERVED.

Theme Kratos Made By Seaton Jiang

蜀ICP备17025376号