以容器的方式部署frps
准备工作
- 准备目录
[root@k81 ~]# mkdir -p frps/frps-dockerfile
- 上官网下载frp的可执行文件
[root@k81 ~]# cd frps/frps-dockerfile [root@k81 frps-dockerfile]# wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz # 如果下载不下来也可以用这个链接 https://gh.con.sh/https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz 尝试
- 删除不需要的文件并重新打包
[root@k81 frps-dockerfile]# tar -xf frp_0.48.0_linux_amd64.tar.gz [root@k81 frps-dockerfile]# cd frp_0.48.0_linux_amd64 [root@k81 frp_0.48.0_linux_amd64]# rm -f frpc* # 因为是做frps的容器,frpc没用就给删掉了,如果做frpc的镜像可以删除frps* [root@k81 frps-dockerfile]# cd .. [root@k81 frps-dockerfile]# mv frp_0.48.0_linux_amd64 frps && tar czf frps.tgz frps # 重新打包
构建镜像
- 编写dockerfile
[root@k81 frps-dockerfile]# cat > Dockerfile <<EOF FROM alpine:latest MAINTAINER xiaohu ADD ./frps.tgz / # 这里add的源文件一定要和上面的压缩包一致 WORKDIR /frps CMD ["./frps", "-c", "./frps.ini"] EOF
- build镜像
[root@k81 frps-dockerfile]# docker build -t frps_xiaohu:0.1 ERROR: "docker buildx build" requires exactly 1 argument. See 'docker buildx build --help'. Usage: docker buildx build [OPTIONS] PATH | URL | - Start a build ## 第一次build的时候报了一个error ## 因此修改了一下build的命令 [root@k81 frps-dockerfile]# docker buildx build -t frps_xiaohu:0.1 . [+] Building 2.2s (8/8) FINISHED => [internal] load build definition from Dockerfile 0.0s => => transferring dockerfile: 142B 0.0s => [internal] load .dockerignore 0.0s => => transferring context: 2B 0.0s => [internal] load metadata for docker.io/library/alpine:latest 1.6s => [internal] load build context 0.1s => => transferring context: 5.82MB 0.1s => CACHED [1/3] FROM docker.io/library/alpine:latest@sha256:124c7d2707904eea7431fffe91522a01e5a861a624ee31d03372cc1d138a3126 0.0s => [2/3] ADD ./frps.tgz / 0.3s => [3/3] WORKDIR /frp 0.0s => exporting to image 0.1s => => exporting layers 0.1s => => writing image sha256:3f4e30f5ddf0527c23ecf39cfdee714247c5789e46b05571136a5f99f8392ae0 0.0s => => naming to docker.io/library/frps_xiaohu:0.1
- 检查镜像
[root@k81 frps-dockerfile]# docker images |egrep -i "size|^frps" REPOSITORY TAG IMAGE ID CREATED SIZE frps_xiaohu 0.1 7adc9914cd05 25 minutes ago 22.6MB # 可以看到镜像size只有22.6MB,还是比较小巧的 [root@k81 frps-dockerfile]# docker history frps_xiaohu:0.1 IMAGE CREATED CREATED BY SIZE COMMENT 7adc9914cd05 25 minutes ago CMD ["./frps" "-c" "./frps.ini"] 0B buildkit.dockerfile.v0 <missing> 25 minutes ago WORKDIR /frps 0B buildkit.dockerfile.v0 <missing> 29 minutes ago ADD ./frps.tgz / # buildkit 15.5MB buildkit.dockerfile.v0 <missing> 29 minutes ago MAINTAINER xiaohu 0B buildkit.dockerfile.v0 <missing> 3 weeks ago /bin/sh -c #(nop) CMD ["/bin/sh"] 0B <missing> 3 weeks ago /bin/sh -c #(nop) ADD file:9a4f77dfaba7fd2aa… 7.05MB
docker-compose跑起来
- 准备frps.ini
[root@k81 frps]# cd /root/frps [root@k81 frps]# cat > frps.ini <<EOF [common] bind_port = 6000 dashboard_addr = 0.0.0.0 # web页面的登录地址,0.0.0.0表示所有地址 dashboard_port = 6001 # web界面的端口 dashboard_user = xxx # web的user dashboard_pwd = xxx # web的密码 EOF # 具体配置文件写法可以参考官方文档
准备docker-compose.yaml
[root@k81 frps]# cat > docker-compose.yaml <<EOF version: "3" services: frps: image: frps_xiaohu:0.1 container_name: My-frps restart: always ports: - "6000-6040:6000-6040" # 这些端口后面可以用来做穿透 volumes: - './frps.ini:/frps/frps.ini' EOF
- 启动
[root@k81 frps]# docker-compose up -d Creating My-frps ... done [root@i-9d1eq6no frps]# docker-compose top My-frps UID PID PPID C STIME TTY TIME CMD ------------------------------------------------------------------------ root 31619 31600 4 23:14 ? 00:00:00 ./frps -c ./frps.ini
客户端运行frpc
如需要客户端也使用容器运行的话,可以参考服务端的容器构建
考虑到有些客户端没有跑容器,我这边就直接用二进制在客户端跑frpc了
准备工作
- 下载可执行文件
[root@c-2 ~]# wget https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.g # 如果下载不下来也可以用这个链接 https://gh.con.sh/https://github.com/fatedier/frp/releases/download/v0.48.0/frp_0.48.0_linux_amd64.tar.gz 尝试 [root@c-2 ~]# tar -xf frp_0.48.0_linux_amd64.tar.gz -C /opt/ [root@c-2 ~]# cd /opt/ [root@c-2 opt]# mv frp_0.48.0_linux_amd64/ frpc && cd frpc [root@c-2 frpc]# rm -f frps* [root@c-2 frpc]# ls
- 准备frpc.ini
[root@c-2 frpc]# cat > frpc.ini <<EOF [common] server_addr = xxx # frps的公网IP server_port = 6000 [ssh_xgyt_c5] type = tcp local_port = 22 remote_port = 6003 EOF
运行frpc
[root@c-2 frpc]# ./frpc -c ./frpc.ini # 看看是否有错误,没错误的话就可以 CTRL C中断下一步了 [root@c-2 frpc]# cat > /etc/systemd/system/frpc.service <<EOF # 编写一个service文件 [Unit] Description=frpc Wants=network-online.target After=network-online.target [Service] ExecStart=/opt/frpc/frpc -c /opt/frpc/frpc.ini ExecReload=/bin/kill -HUP $MAINPID Restart=always StartLimitInterval=0 [Install] WantedBy=multi-user.target EOF [root@c-2 frpc]# systemctl daemon-reload && systemctl enable --now frpc # 配置fprc开机自启 Created symlink from /etc/systemd/system/multi-user.target.wants/frpc.service to /etc/systemd/system/frpc.service. [root@c-2 frpc]# systemctl status frpc ● frpc.service - frpc Loaded: loaded (/etc/systemd/system/frpc.service; enabled; vendor preset: disabled) Active: active (running) since Sat 2023-04-22 23:55:02 CST; 7s ago # active代表服务已经起来了 Main PID: 2597 (frpc) Tasks: 6 CGroup: /system.slice/frpc.service └─2597 /opt/frpc/frpc -c /opt/frpc/frpc.ini Apr 22 23:55:02 c5 systemd[1]: Started frpc. Apr 22 23:55:02 c5 frpc[2597]: 2023/04/22 23:55:02 [I] [service.go:299] [9fd0677df9f333fd]... [0] Apr 22 23:55:02 c5 frpc[2597]: 2023/04/22 23:55:02 [I] [proxy_manager.go:142] [9fd0677df9f..._c5] Apr 22 23:55:02 c5 frpc[2597]: 2023/04/22 23:55:02 [I] [control.go:172] [9fd0677df9f333fd]...cess 复制成功,转载请保留本站链接: www.chenjiao.cloud
注:
在systemd的Service文件中,Restart=可以有以下几种值可选: no:表示不自动重启服务。 on-success:表示只有在服务正常退出(退出状态码为0)时才会自动重启服务。 on-failure:表示只有在服务异常退出(退出状态码非0)时才会自动重启服务。 on-abnormal:表示只有在服务因信号而异常退出时才会自动重启服务。 on-abort:表示只有在服务因收到SIGABRT信号而退出时才会自动重启服务。 on-watchdog:表示只有在服务因超时未响应而退出时才会自动重启服务。 always:表示无论服务退出状态码为何,都会自动重启服务。 如果想要在服务异常退出时自动重启服务,可以设置Restart=on-failure,这里是直接设置了Restart=always 复制成功,转载请保留本站链接: www.chenjiao.cloud
检查成功与否
登录frps的web管理界面,管理界面配置在frps.ini中有声明