LINUX开发板部署GIT服务内网透传

0. 项目背景
在公司撸代码的时候,没有git服务简直无法写代码,因为我工作流就是需要git的帮助,所以自己部署一个git服务自己使用。
还有因为是开发板没有公网的,但是需要日常的后台维护,所以部署一个代理网络可以SSH到远程作一个运维工作。
1. 系统安装与配置
1.1 安装Ubuntu镜像

1.2 配置ssh
#查看ssh状态
systemctl status ssh
#查看ip
ifconfig
#ssh登录
ssh user@ip
#生成密钥
ssh-keygen -t ed25519
ssh-copy-id user@ip
#检查公钥
cat ./.ssh/authorized_keys
1.3 FinalShell 导入密钥SSH连接

2. 安装docker容器
2.1 拉取镜像+SCP传输
由于docker源访问不了,需要借助外网的服务器完成镜像下载+scp传输到目标机器上进行安装
#查看机器架构,一般为aarch64
uname -m
# 拉取指定 ARM 平台的镜像
docker pull --platform linux/arm64 6053537/portainer-ce:latest
docker pull --platform linux/arm64 gitea/gitea:latest
# 导出为 tar 文件
docker save 6053537/portainer-ce:latest -o portainer-ce.tar
docker save gitea/gitea:latest -o gitea.tar
使用scp 传输文件在局域网服务器上
scp portainer-ce.tar [email protected]:~/
scp gitea.tar [email protected]:~/
导入镜像
# 导入镜像
sudo docker load -i ~/portainer-ce.tar
sudo docker load -i ~/gitea.tar
sudo docker images #本地查看镜像

2.2 运行容器
# 创建持久化卷
sudo docker volume create portainer_data
# 启动容器
sudo docker run -d
--name portainer
--restart always
-p 9000:9000
-v /var/run/docker.sock:/var/run/docker.sock
-v portainer_data:/data
6053537/portainer-ce:latest
# 创建宿主机数据目录
sudo mkdir -p /home/kickpi/gitea_data
# 启动容器
sudo docker run -d
--name gitea
--restart always
-p 3000:3000
-p 2222:22
-v /home/kickpi/gitea_data:/data
gitea/gitea:latest
sudo docker ps #查看状态
#防火墙放行
sudo ufw allow 9000
sudo ufw allow 3000
sudo ufw allow 2222
3. 配置内网透传
3.1 配置隧道
sudo curl -L 'https://github.com/cloudflare/cloudflared/releases/latest/download/cloudflared-linux-arm64' -o /usr/local/bin/cloudflared
sudo mv cloudflared-linux-arm* /usr/local/bin/cloudflared
sudo chmod +x /usr/bin/cloudflared #下载后赋予权限
cloudflared --version
cloudflared tunnel login #认证授权
cloudflared tunnel create arm-dev-board #创建隧道后输出隧道的UUID
sudo cloudflared --config /home/your-username/.cloudflared/config.yml service install
sudo systemctl start cloudflared
sudo systemctl enable cloudflared


nano ~/.cloudflared/config.yml #配置隧道
# 替换为您刚才创建的隧道UUID
tunnel: xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx
# 替换为您的凭证文件路径
credentials-file: /home/your-username/.cloudflared/xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx.json
# 入口规则配置
ingress:
# 1. SSH服务配置
- hostname: ssh.yourdomain.com
service: ssh://localhost:22
# 2. Web服务配置
- hostname: app.yourdomain.com
service: http://localhost:8899
# 3. 默认规则 - 所有未匹配的请求返回404
- service: http_status:404
3.2 登录控制台
登录控制台,添加两条解析记录ssh和web的解析,域名前缀自定义,选择CNAME,目标指向 xxxx-xxxx-xxxx-xxxxxxxxxxxx.cfargotunnel.com
添加路由应用:

4. ssh登录
目前我使用代理网络登录目标ssh.mydomain.com域名的机器,所以不能使用FinalShell终端,FinalShell终端不会读取~/.ssh/config
只能使用系统终端,系统终端会读取本地的~/.ssh/config 文件, 该文件里定义了 ProxyCommand 的代理设置
4.1 配置ssh代理
winget install --id Cloudflare.cloudflared #安装windows cloudflare
nano ~/.ssh/config
#添加以下代理设置
Host arm-dev
HostName ssh.yourdomain.com
User your-username
ProxyCommand cloudflared access ssh --hostname %h
ServerAliveInterval 15
ServerAliveCountMax 3
ssh arm-dev #测试
ssh-keygen -t ed25519 #免密登录
ssh-copy-id arm-dev
config是ssh的参数文件,ssh host_dev 就能读取config文件调用参数建立连接 ,参数proxyCommand 是执行代理程序的命令
ssh-copy-id arm-dev 命令会自动验证并复制公钥到 追加到开发板的 ~/.ssh/authorized_keys
~/.ssh/authorized_keys是 ssh授权文件,该文件存储了多个公钥,与密钥进行匹配


5. 配置无线
#查看无线网卡
ip link
#新建一个配置
sudo nano /etc/netplan/00-installer-config.yaml
network:
version: 2
renderer: networkd
wifis:
wlan0: # 你的网卡名
dhcp4: true
access-points:
"你的WiFi名称":
password: "你的WiFi密码"
sudo chmod 600 /etc/netplan/00-installer-config.yaml #修复权限
sudo chmod 600 /etc/netplan/default.yaml #只能读写
sudo netplan apply # sudo netplan try
ifconfig #查看无线连接状态
ip addr show wlan0 #查看状态
5.1 固定ip
编辑/etc/netplan/00-installer-config.yaml 再使能生效 sudo netplan try ,正式应用 sudo netplan apply


5.2 增加ssh/config连接参数
我们可以使用eth0或者wlan0代理的ssh连接到开发板


6. 最后
目前局域网内访问git服务和远程ssh 已经部署完成。
它可以提高写代码工程的效率,最重要的是可以更好管理自己的项目代码。
最后提醒的是系统的存储卡一定购买高耐用的,不能购买便宜的普通存储卡。

文章评论