记一次树莓派搭建git服务器及内网穿透过程

前段时间一直想找点有意思的东西折腾折腾,一时兴起就买了个树莓派。买回来之后我就迷茫了,这个东西能干啥(折腾各种软硬件)?问题是我能用它干啥?放在那里积灰吧。

不行,捡起来。搭个最简单的git服务器来玩玩。当然git服务器有很多,就拿 Gogs 来试水吧,采用 Go 语言开发,支持多平台(包括树莓派),搭建简单,占用资源少。有兴趣的可以去 Gogs 官网 了解。

树莓派系统

首先为我们的树莓派挑选系统,官网罗列了许多树莓派支持的系统。我这里挑选了官方维护的 [RASPBIAN STRETCH LITE]。注意这里使用的 lite 版,它是没有桌面系统的(完全通过命令行交互),意味着你不能通过点点点完成一些操作。

raspberrypi-system

系统烧录

准备一张高速 TF 卡(class 10),高速意味着你的系统运行效率。准备 USB 接口键盘,支持 HDMI 显示器。解压刚才下载的镜像。

$ ls raspberrypi
2017-11-29-raspbian-stretch.img

1、电脑插入你的 TF 卡,执行以下命令查询 TF 的盘符:

$ df -h
Filesystem      Size   Used  Avail Capacity iused               ifree %iused  Mounted on
...
/dev/disk2s4    30Gi  1.6Mi  30Gi    11%       0                   0  100%   /Volumes/Untitle

2、发现新卡的盘符是/dev/disk2s4,执行命令卸载磁盘 diskutil umount /dev/disk2s4。这里是卸载而不是推出(Eject)。

3、执行烧录命令,注意这里的 of=/dev/rdisk2 中的 rdisk2

$ dd bs=512m if=2017-11-29-raspbian-stretch.img of=/dev/rdisk2
1173+0 records in
1173+0 records out
4919918592 bytes transferred in 312.974440 secs (15719873 bytes/sec)

4、写入完成,推出磁盘。

$ diskutil unmountDisk /dev/disk2
Unmount of all volumes on disk2 was successful

键盘设置

用 HDMI 线连接树莓派(注意一定要在树莓派开机之前连接),启动树莓派。初始密码:raspberry。

更改默认键盘布局:sudo dpkg-reconfigure keyboard-configuration -> Generic 104-key PC -> Change Keboard Layout -> Other -> English (US) -> English (US) - English (US, alternative international),之后,一直回车。

无线设置

扫描wifi。

$ sudo iwlist wlan0 scan
wlan0     Scan completed :
          Cell 01 - Address: 12:2A:B3:A8:82:82
                    ESSID:"Raspberry"
                    Protocol:IEEE 802.11bgn
                    Mode:Master
                    Frequency:2.422 GHz (Channel 3)
                    Encryption key:on
                    Bit Rates:72 Mb/s
                    Extra:rsn_ie=30140100000fac040100000fac040100000fac020c00
                    IE: IEEE 802.11i/WPA2 Version 1
                        Group Cipher : CCMP
                        Pairwise Ciphers (1) : CCMP
                        Authentication Suites (1) : PSK
                    IE: Unknown: DD180050F204104A00011010440001021049000600372A000120
                    Quality=48/100  Signal level=87/100

编辑配置文件,在末尾添加

$ sudo vi /etc/wpa_supplicant/wpa_supplicant.conf
network={
    ssid="The_ESSID_from_earlier"
    psk="Your_wifi_password"
}

执行如下命令:

$ sudo wpa_cli reconfigure
Selected interface 'wlan0'
OK

开启 SSH

开启 SSH 服务:sudo /etc/init.d/ssh start

设置开机自启,修改 /etc/rc.local 文件,在 exit 0 之前加入:/etc/init.d/ssh start

Gogs 安装

本次安装采用的是二进制安装的方式。首先到这里下载二进制压缩包:

gogs-package

假设:

树莓派 IP 地址:192.168.1.107
公网 IP 地址:123.123.123.123
域名:example.com

Gogs 一切从简,直接晒配置吧:

APP_NAME = Gogs
RUN_USER = pi
RUN_MODE = prod

[server]
PROTOCOL         = http
DOMAIN           = git.example.com
HTTP_PORT        = 50000
ROOT_URL         = https://git.example.com/
DISABLE_SSH      = false
SSH_PORT         = 50022
START_SSH_SERVER = true
OFFLINE_MODE     = false

[repository]
ROOT = /home/pi/git/gogs-repo

[database]
DB_TYPE  = sqlite3
HOST     = 127.0.0.1:3306
NAME     = gogs
USER     = root
PASSWD   = 
SSL_MODE = disable
PATH     = data/gogs.db

[mailer]
ENABLED = false

[service]
REGISTER_EMAIL_CONFIRM = false
ENABLE_NOTIFY_MAIL     = false
DISABLE_REGISTRATION   = true
ENABLE_CAPTCHA         = true
REQUIRE_SIGNIN_VIEW    = false

[picture]
DISABLE_GRAVATAR        = false
ENABLE_FEDERATED_AVATAR = true

[session]
PROVIDER = file

[log]
MODE      = file
LEVEL     = Info
ROOT_PATH = /home/pi/git/gogs/log

注意,这里使用了 HTTP 协议,端口是 50000。开启了内置 SSH 服务,端口为 50022。

通过 192.168.1.107:50000 就可以访问 gogs 的服务了。

内网穿透

内网穿透通俗的理解是:一个服务端 server,在公网。一个(多个)客户端 client,在内网。服务端与客户端之间建立一个隧道。服务端接收到请求之后,转发给相应的客户端。客户端通过隧道返回结果。这样就完成了一次内网穿透的过程。

国内有许多内网穿透的服务商,就不列举了。开源的世界里有很多著名的内网穿透软件:ngrok,frp等。这里使用 frp,配置非常简单。基本配置可以去 Github 官方主页查看。

服务端配置 frps.ini,注意防火墙端口设置:

[common]
bind_port = 60000

vhost_http_port = 50001

dashboard_user = xxxxxx
dashboard_pwd = xxxxxx

privilege_token = xxxx

树莓派客户端 frpc.ini:

[common]
server_addr = git.deepzz.com
server_port = 60000

privilege_token = xxxxxx

[gogs]
type = http
local_port = 50000
custom_domains = git.deepzz.com

[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 50022
remote_port = 50023

分别启动服务端和客户端。

此时,访问公网 123.123.123.123:50001 就可以访问到 gogs 的服务。如果你公网服务器有使用 nginx 的反向代理,你还可以开启 HTTPS 进行代理。直接使用域名访问。如使用 https://git.example.com。棒棒的!

你还可以参考这篇文章SSH 那些你所知道和不知道的事设置 SSH Config,SSH 克隆仓库,推送,拉取等更加方便。

Host gogs
    HostName git.example.com
    User pi
    IdentityFile ~/.ssh/id_rsa
    Port 50023

首先在 gogs web服务端添加 SSH Key。如你创建了名为 test 的仓库,那么你克隆的时候只需git clone gogs:/$Username/test.git。用户名为你在 gogs 上的用户。

整个过程就酱!

本文链接:参与评论 »

--EOF--

提醒:本文最后更新于 2525 天前,文中所描述的信息可能已发生改变,请谨慎使用。

Comments