使用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试试:

显然,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

此时会出现以下界面:

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

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

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

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

posted @ 2018-03-05 15:04  Thyiad  阅读(22394)  评论(13编辑  收藏  举报