最后编辑于: 2019-08-29 11:03 | 分类: linux | 标签: 树莓派 git | 浏览数: 5902 | 评论数: 0
设备: raspberry pi 3B E14
环境: Raspbian GNU/Linux 9 Stretch
参考文章:
frp官方github readme:https://github.com/fatedier/frp/blob/master/README_zh.md
我的目的是, 将之前在树莓派上安装的git服务器Gogs系统, 能够在外网也能访问! 首先能实现在外网通过ssh进行code的git操作, 其次能在外网访问Gogs的管理页面.
关于安装, 不得不夸一下frp, 太简练了, 做的太好了!
frp_0.28.2_linux_arm.tar.gz
.frp_0.28.2_linux_amd64.tar.gz
.(这里不得不吐槽一下, 从github下载实在是太慢了!!!)
只要2个文件放在相同目录下, 放在什么位置都行, 当然建立个frp目录存放更好.
至此, 安装完成!
配置是通过编辑ini文件实现. 下面分别说明服务器和客户端的配置.
我的frps.ini文件内容如下:
[common]
bind_port = 7000
vhost_http_port = 8080
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
token = xxxxxxx
bind_port
指定了frp服务端端口vhost_http_port
制定了http服务的端口, 通过访问服务器此端口就可访问到内网中提供的web服务dashboard
功能, 可监控frp的工作状态, 挺好用的. 端口号可指定, 登陆用户名和密码也在这里配置. dashboard的配置只出现在服务器端, 和客户端没有关系.token
提供身份验证功能, 服务端和客户端的 common
配置中的 token 参数一致则身份验证通过。我的frpc.ini文件内容如下:
[common]
server_addr = x.x.x.x
server_port = 7000
token = xxxxxxx
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 10022
remote_port = 6000
[web]
type = http
local_port = 10080
custom_domains = www.yourdomain.com
common
中的server_addr
指定了服务器的IP地址.common
中的server_port
必须和 服务器端的bind_port
参数一致.token
也要一致, 就不赘述了.ssh
中的local_port
指定了 客户端本机的ssh服务端口, 本来一般应该是22的. 我这里之所以是10022, 是因为我的树莓派中的Gogs docker容器, 将外部的1022端口映射到了内部的22端口, 所以我要想想访问docker内部的22端口, 就要访问整个树莓派的10022端口. ssh
中的remote_port
, 外网可通过访问服务器的此端口 来 访问客户端的local_port
端口(上一个参数).所以, 整个SSH端口映射过程为: 服务器6000 <---> 树莓派10022 <---> 树莓派内docker容器22
web
中的local_port
, 即内网对外开放的web服务端口. 外网访问服务器的vhost_http_port
端口(见服务器端配置)时, 被映射到内网客户端的此端口, 达到暴漏内网web服务的目的.web
中的custom_domains
指定了服务器的域名.启动运行很简单, 在frps文件所在目录下, 运行如下指令:
./frps -c ./frps.ini
即可!
进一步的, 要不要开机自启动运行?
我的服务器端没搞这个, 反正服务器难得启动一次.
搞个后台运行就行了, 为了达到 '终端退出 程序仍然运行的目的', 使用nohup即可, 如下:
nohup ./frps -c ./frps.ini &
客户端启动运行, 和服务器端类似, 在frpc所在目录下, 运行如下指令:
./frpc -c ./frpc.ini
由于树莓派的掉电不可避免, 还是搞个开机自启动比较好.
编辑/etc/rc.local
文件, 在其最后一行exit 0
之前, 插入如下2行:
/bin/sleep 60
sudo /home/pi/frp/frpc -c /home/pi/frp/frpc.ini &
我的frpc文件所在位置是 pi用户home目录下的frp目录下, 在/etc/rc.local
文件中, 要使用绝对路径, &
也必须带上.
另外, 我在frpc运行前, 加了60秒的延时, 不加这个延时自启动就会失败(实验了2次的教训)!
在外网, 可用浏览器访问 服务器域名:8080
来访问我树莓派上Gogs的web监控网页.
8080
见服务器端配置中vhost_http_port
参数.
git中如下增加个远程仓库:
git remote add origin ssh://git@x.x.x.x:6000/username/xxx.git
6000
见客户端配置中ssh
的remote_port
参数. username
是你在git服务器上的用户名, xxx.git
是你在git服务器上的仓库名.
这样你就可以在外网向树莓派上的这个git服务器 push/pull 代码了!