使用docker搭建frp服务器

前言

  • 把本地的开发环境映射到外网,这是我们经常会碰到的一个要求,比方说展示给别人看啦,临时测试啦。尤其在微信开发中,因为微信必须要求80端口,所以不转发的情况下,我们只能把代码部署到服务器之后才能验证测试,非常麻烦。
  • 最早的时候是花生壳,不过这家公司贼恶心。。后面开始用ngrok,然后现在又有了frp,相比来说frp的配置要更简单一点。
  • 因为没有找到合适的docker镜像,所以在参考很多之后,就有了如下自写的image及compose

准备工作

  • 具有外网ip的服务器
  • 域名

    我这里是准备了一个子域名,*.frp.thyiad.top,把这这个域名解析到服务器,这样可以支持同时映射多个域名到外网,具体的子域名在frp客户端配置,服务端配置前缀域名为frp.thyiad.top

  • docker

    需要注意的是,我这里是基于ngin-proxy镜像来解析域名的,此处不再赘述,可参照之前的文章:使用docker搭建wordpress

docker file

镜像已经上传到docker的hub上了,所以你也可以跳过docker file直接使用compose

创建工作目录:

cd /usr
mkdir frp && cd frp
mkdir frp_image && cd frp_image

先创建一个frp的默认配置文件:

mkdir conf && vim conf/frps.ini

把以下内容填入 frps.ini:

[common]
bind_addr = 0.0.0.0
bind_port = 7000
kcp_bind_port = 7000
vhost_http_port = 80
vhost_https_port = 443
dashboard_addr = 0.0.0.0
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
authentication_timeout = 0
subdomain_host = frp.thyiad.top

创建dockerfile:

vim dockerfile

把以下内容填入dockerfile:

FROM ubuntu
MAINTAINER thyiad <1520583107@qq.com>

ARG FRP_VERSION=0.16.0

RUN apt update \
    && apt install -y wget

WORKDIR /tmp
RUN set -x \
    && wget https://github.com/fatedier/frp/releases/download/v${FRP_VERSION}/frp_${FRP_VERSION}_linux_amd64.tar.gz \
    && tar -zxf frp_${FRP_VERSION}_linux_amd64.tar.gz \
    && mv frp_${FRP_VERSION}_linux_amd64 /var/frp \
    && mkdir -p /var/frp/conf \
    && apt remove -y wget \
    && apt autoremove -y \
    && rm -rf /var/lib/apt/lists/*

COPY conf/frps.ini /var/frp/conf/frps.ini

VOLUME /var/frp/conf    # conf被配置成了卷,方便以后修改frps.ini

WORKDIR /var/frp
ENTRYPOINT ./frps -c ./conf/frps.ini

这个dockerfile执行了以下操作:

  • 从github上下载frp的release版本
  • 解压
  • 从conf目录中读取替换默认的frps.ini

此时就可以使用docker build命令进行编译镜像了,命令为:

docker build -t="thyiad/my-frp" .

docker compose

在镜像编译好后,我们就可以开始compose文件了,毕竟compose比直接docker run要方便的多

创建工作目录:

mkdir /usr/frp/frp_compose && cd /usr/frp/frp_compose
vim docker-compose.yml

把以下内容填入docker-compose.yml:

version: '3'

services:
  frp:
    image: thyiad/my-frp:latest
    container_name: my-frp
    ports:
      - "7000:7000"
      - "7500:7500"
    expose:
      - 80
      - 443
    volumes:
      - frp_conf:/var/frp/conf
    restart: always
    environment:
      VIRTUAL_HOST: '*.frp.thyiad.top,frp.thyiad.top'   # 指定需要绑定的域名

volumes:
    frp_conf:

networks:
  default:
    external:
      name: nginx-proxy # 此处的nginx-proxy为之前创建的docker network

运行我们的compose:

docker-compose up -d

此时,我们的frp服务器就已经OK了。
我们访问一下test.frp.thyiad.top试试:
unvisible-300x138.png
显然,frp已经在运转了,只是该域名并没有绑定转发

frp客户端

服务端搭好之后,我们就可以下载客户端进行使用了。需要前往frp的github上下载对应的版本,我这里是16.0,windows x64。

下载解压后,我们修改frpc.ini为以下内容:

[common]
server_addr = 你的服务器ip
server_port = 7000
# protocol = kcp

[web]
type = http
local_port = 52485
subdomain = test

然后打开cmd,运行frpc:

cd /d d:\frp
frpc

此时会出现以下界面:
frp-running-300x157.png

说明已经连接成功了,我们再来访问test.frp.thyiad.top试试:
frp-visible-300x87.png

此时,我们的frp就已经搭建好了,很简单吧?

ngrok的服务器搭建在这里:
使用docker搭建ngrok服务器

以上文件已经上传到github:
https://github.com/Thyiad/docker

转载于:https://www.cnblogs.com/thyong/p/8509040.html

### 配置 Docker 容器 为了在 MobaXterm 中搭建 Docker 容器,首先需要确保 Docker 已经正确安装并运行。可以通过命令 `systemctl start docker` 来启动 Docker 服务[^2]。 接着,在 MobaXterm 的终端窗口中执行如下操作: #### 创建工作目录 创建一个新的项目文件夹用于存放所有的配置文件和服务定义: ```bash mkdir ~/my-docker-project && cd ~/my-docker-project ``` #### 编写 Docker Compose 文件 编写一个名为 `docker-compose.yml` 的 YAML 文件来描述所需的服务组合。这里提供了一个简单的例子,包含了 MySQL 和 Redis 两个数据库服务以及 Nginx 反向代理服务器: ```yaml version: '3' services: nginx: image: 'nginx:latest' ports: - ./nginx.conf:/etc/nginx/nginx.conf depends_on: - mysql - redis mysql: image: 'mysql:5.7' environment: MYSQL_ROOT_PASSWORD: example volumes: - db_data:/var/lib/mysql redis: image: 'redis:alpine' volumes: db_data: ``` 此配置会拉取官方镜像,并为每项服务分配端口映射和持久化存储空间。对于 Nginx,则指定了自定义配置文件的位置。 #### 自定义 Nginx 配置 在同一目录下新建 `nginx.conf` 文件,编辑其内容以适配实际需求。下面是一个基本模板,它将请求转发给其他内部服务: ```nginx events {} http { upstream backend { server mysql:3306; server redis:6379; } server { listen 80; location / { proxy_pass http://backend; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; } } } ``` 请注意上述示例中的 `upstream` 块仅作示意用途;通常情况下应分别针对不同应用设定独立的路径匹配规则。 --- ### 设置 Frp 进行内网穿透 Frp 是一款轻量级的内网穿透工具,允许外部网络访问位于私有局域网内的资源。以下是具体步骤: 1. 下载适合平台版本的二进制包; 2. 解压后进入解压缩后的文件夹; 3. 修改客户端 (`frpc.ini`) 和服务器端 (`frps.ini`) 的配置文件; 4. 使用 `./frpc -c frpc.ini` 或者 `nohup ./frpc -c frpc.ini &` 启动客户端程序。 假设已经有一个公网 IP 上运行着 FRP Server ,那么可以在本地机器上这样配置 `frpc.ini` : ```ini [common] server_addr = x.x.x.x ; 替换成FRPS所在主机地址 server_port = 7000 ; 默认监听端口号 [tcp_mysql] type = tcp local_ip = 127.0.0.1 local_port = 3306 ; 对应于MySQL容器暴露出来的端口 remote_port = 6001 ; 外部可连接到该端口从而间接访问目标服务 [tcp_redis] type = tcp local_ip = 127.0.0.1 local_port = 6379 ; 对应于Redis容器暴露出来的端口 remote_port = 6002 ; 类似地指定另一个远程可用端口 ``` 完成以上设置之后就可以通过互联网上的任意位置尝试建立 TCP 连接至相应的远端开放端口了。 --- ### 启动所有组件 最后一步是在 MobaXterm 终端里切换回项目的根目录并通过以下指令一次性启动全部已定义好的微服务体系结构: ```bash docker-compose up -d ``` 这将会以后台模式启动各个容器实例,并按照依赖关系自动处理好它们之间的交互逻辑[^1]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值