树莓派,初听起来有些像某种水果派,但实际上是一块巴掌一般大的计算机。除了没有鼠标、键盘、显示器外,一个计算机该有的功能它都有。
第一代树莓派诞生于2012年2月29日,发明者是英国工程师Eben Upton。在当时,学校里使用的“BBC Micro model B”计算机高达350英镑,费用十分高昂,学校难以为所有学生都购买一台作为教学使用。这也间接导致计算机专业报名学生人数较少且计算机基础一般。因此,Eben Upton希望研发一款价格亲民、耐用且便携的电脑,让所有学生都能用得起。
第一代树莓派价格仅35美元,一经推出便爆火,发布在网上的树莓派操作系统就被下载了50000次,远远超过树莓派计划投入生产的数量。
2013年,树莓派获得了INDEX设计奖;2017年,又获得英国历史最悠久的工程创新奖——英国皇家工程院MacRobert奖。
有宅男调侃称,考虑到成本、适配性、易理解度、能耗、多任务处理性能,树莓派的所有指标都胜出女友。
最近准备转正答辩压力很大,突发奇想入了一台树莓派5,在休息的空隙折腾了一番。
我买的是官方套件,包含主板、外壳、电源适配器、散热风扇、HDMI转接线、32GB内存卡、读卡器。
按照 说明书 第六感,直接上手组装,不过在装好外壳后插拔SD卡时还是需要小心一点。
Step 1、安装系统
第1步、下载Raspberry Pi Imager
前往树莓派官网下载Raspberry Pi Imager,它可以理解为系统安装工具,官网提供了Windows、Mac和Ubuntu系统的版本。
第2步、下载树莓派操作系统
树莓派操作系统分为带桌面版和无桌面版,作为懒人直接选择带桌面和推荐软件的版本。
第3步、安装操作系统
将SD卡插入读卡器,然后将读卡器插入到电脑接口,启动Raspberry Pi Imager,点击“选择需要写入的操作系统”后,选择 “Use Custom”,勾选第一步下载的镜像,然后按照引导的流程一步步配置,开启SSH,设置热点名称和密码、设置树莓派用户名和密码、语言和时区。
Step 2、使用SSH登录后台
第1步、树莓派开机
将SD卡从读卡器上取下,然后插入到树莓派主板,连接上电源。登录家里路由器后台,查看树莓派的本地IP。
第2步、使用SSH工具连接树莓派
在SSH工具中填写树莓派本地IP、用户名、密码后直接连接,连接成功后即可进入。
Windows系统可以使用“远程桌面连接”工具,输入树莓派IP、用户名和密码后即可登录树莓派桌面。
树莓派会自动适配屏幕分辨率,如果显示不正常可以前往手动设置,详细设置步骤可在网上搜索教程。
此外,可以检查下树莓派系统时间是否正确,如果系统时间不准确会导致后续无法正常下载文件
#查看当前时间
date
# 校准时间
sudo ntpd -s -d
Step 3、内网穿透
现在我们的树莓派已经可以实现本地访问,但要想被互联网上的其他用户访问就需要做内网穿透。
我自己有一台轻量云服务器,所以内网穿透的方案选择了比较主流的frp项目,项目地址见:https://github.com/fatedier/frp。
frp 是一个专注于内网穿透
的高性能的反向代理
应用,支持 TCP、UDP、HTTP、HTTPS 等多种协议,可以将内网服务以安全、便捷的方式通过具有公网 IP 节点的中转暴露到公网。
frp由客户端frpc
和服务端frps
组成,客户端部署在本地树莓派,服务端部署在公网服务器。
第1步、配置frp客户端
需要根据树莓派CPU下载对应版本的frp软件:
# 查看树莓派cpu配置
lscpu
在release中选择合适的版本下载,下载链接见https://github.com/fatedier/frp/releases/tag/v0.61.1
# 下载frp
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_arm_hf.tar.gz
# 解压文件
tar -xzvf frp_0.61.1_linux_arm_hf.tar.gz
# 删除文件夹下的frps相关文件
sudo rm frps.toml
sudo rm frps
接下来修改客户端配置文件frpc.toml
# 进入frp文件夹
cd frp_0.61.0_linux_arm_hf
# 修改frpc.toml文件
sudo nano frpc.toml
# 在frpc.toml中写入下列内容
serverAddr = "XXX.XX.XX.XX" #公网服务器ip
serverPort = 7000 #公网服务器端口
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "192.168.2.69" #树莓派本地ip
localPort = 22
remotePort = 6000
# 保存文件后退出
前往公网服务器,放行6000、7000端口
# 进入frp文件夹
cd frp_0.61.0_linux_arm_hf
# 启动frpc
./frpc -c frpc.toml
第2步、配置frp服务端
# 查看公网服务器cpu信息
lscpu
在release中选择合适的版本下载,下载链接见https://github.com/fatedier/frp/releases/tag/v0.61.1
# 下载frp
wget https://github.com/fatedier/frp/releases/download/v0.61.1/frp_0.61.1_linux_arm64.tar.gz
# 解压文件
tar -xzvf frp_0.61.1_linux_arm64.tar.gz
# 删除文件夹下的frpc相关文件
sudo rm frpc.toml
sudo rm frpc
# 修改frps配置文件
sudo nano frps.toml
# 在frps.toml写入以下信息
[common]
bind_port = 7000
# 保存后退出,启动frps
./frps -c frps.toml
配置公网服务器的frps.toml
# 进入frps.toml
cd /etc/frp
sudo vim frps.toml
在配置中添加下面内容后保存
bindPort = 7000 # 通过frps服务端7000端口的请求都会被转发到树莓派SSH服务
vhostHTTPPort = 8082 # 来自互联网的访问都通过8082
以上流程完成后,服务端和客户端就连接起来了。
在外网,可以在命令行中输入下面内容访问树莓派
ssh -oPort=6000 pi@xxx.xxx.xx.xxx
pi是树莓派的用户名,如果你在烧录系统时使用了其他的用户名,需要修改对应的用户名
@xxx.xxx.xx.xxx是公网服务器ip
Step 4、配置frp开机自启
由于断电、断网、公网服务器故障等各种因素,可能会导致frp异常断开,需要手动重新启动。但这样非常不方便,为了能让服务器恢复后frp也恢复正常,因此配置frp自启动。
开机自启动主要就是运用 systemd 功能,要把 service文件创建在/lib/systemd/system
目录下。
第1步、配置frps自启动
# 复制frps文件到 /usr/bin/ 目录下
sudo cp frps /usr/bin/frps
# 复制frps.toml文件到 /etc/frp 目录下,不存在该目录就先创建
sudo mkdir /etc/frp
sudo cp frps.toml /etc/frp/frps.toml
# 创建一个frps.service文件
sudo nano frps.service
# 在frps.service文件中写入下面内容
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
Restart=always
RestartSec=1min
ExecStart=/usr/bin/frps -c /etc/frp/frps.toml
[Install]
WantedBy=multi-user.target
# 复制frps.service文件到 /lib/systemd/system 目录下
sudo cp frps.service /lib/systemd/system/frps.service
# 使用systemctl的命令启动并设置自启
sudo systemctl start frps # 启动frps
sudo systemctl status frps # 查看目前的运行状态
sudo systemctl stop frps # 停止frps
sudo systemctl enable frps # 设置开机自启动
# 设置好后重启服务器看下效果
sudo reboot
sudo systemctl status frps
第2步、配置frpc自启动
# 复制frpc文件到 /usr/bin/ 目录下
sudo cp frpc /usr/bin/frpc
# 复制frpc.toml文件到 /etc/frp 目录下,不存在该目录就先创建
sudo mkdir /etc/frp
sudo cp frpc.toml /etc/frp/frpc.toml
# 创建一个 frpc.service 文件
sudo nano frpc.service
# 在frpc.service文件中写入下面内容
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
TimeoutStartSec=30
Restart=always
RestartSec=1min
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.toml
[Install]
WantedBy=multi-user.target
# 复制frpc.service文件到 /lib/systemd/system 目录下
sudo cp frpc.service /lib/systemd/system/frpc.service
使用systemctl的命令启动并设置自启
sudo systemctl start frpc # 启动frpc
sudo systemctl status frpc # 查看目前的运行状态
sudo systemctl stop frpc # 停止frpc
sudo systemctl enable frpc # 设置开机自启动
设置好后重启树莓派看下效果
sudo reboot
sudo systemctl status frpc
Step 5、通过域名访问树莓派网站
在本地部署网站后,只能通过公网ip+端口访问网站,这样不便于用户记忆,因此为网站绑定域名
第1步、安装网站运行时依赖的软件:nginx、php、MariaDB
第2步、创建一个网页文件
网页文件名称设置为域名,例如www.example.com
# 进入root权限
sudo -i
# 在www文件夹下创建一个网站文件夹
cd /var/www
mkdir www.example.com
在网站文件夹www.example.com下创建index.php
nano index.php
# 文件中写入下面内容并保存
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>PHP Environment Test Page</title>
</head>
<body>
<h1>PHP Environment Test Page by Bruce</h1>
<p>This page is generated by PHP to test the environment.</p>
<h2>Current Date and Time</h2>
<p><?php echo date('Y-m-d H:i:s'); ?></p>
<h2>PHP Version</h2>
<p><?php echo phpversion(); ?></p>
<h2>Server Information</h2>
<ul>
<li>Server Software: <?php echo $_SERVER['SERVER_SOFTWARE']; ?></li>
<li>Server Name: <?php echo $_SERVER['SERVER_NAME']; ?></li>
<li>Server Address: <?php echo $_SERVER['SERVER_ADDR']; ?></li>
<li>Server Port: <?php echo $_SERVER['SERVER_PORT']; ?></li>
<li>Remote Address: <?php echo $_SERVER['REMOTE_ADDR']; ?></li>
</ul>
</body>
第3步、配置树莓派nginx
# 在树莓派nginx上配置sites-available和sites-enable文件
#在nginx的sites-available文件夹下创建一个名称为该网页的文件
sudo nano /etc/nginx/sites-available/www.example.com
# 在文件中写入下面配置,监听8081端口
server {
listen 8081;
server_name www.example.com;
root /var/www/www.example.com;
index index.php index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
location ~ \.php$ {
include snippets/fastcgi-php.conf;
fastcgi_pass unix:/var/run/php/php8.2-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
include fastcgi_params;
}
# 创建一个指向新配置文件的符号链接,以便Nginx能够识别并启用它
sudo ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/
# 修改nginx配置后,测试Nginx的配置以确保没有语法错误
sudo nginx -t
# 如果配置测试成功,重启Nginx服务以使更改生效
sudo systemctl restart nginx
备注: 如果在树莓派上部署的网站已经默认选择了端口,则无需再次配置树莓派的nginx。例如通过一个脚本直接在树莓派部署了一个网站,这个网站有默认端口,可以通过内网ip+端口访问到,那这种情况就不用配置nginx。
第4步、配置frp客户端配置文件
在frpc.toml
文件中添加下面的配置,目的是为了让外部用户能够通过访问www.example.com
这个域名,间接访问到运行在树莓派8081端口的网站
# 在etc文件夹下的frpc.toml中添加配置
cd /etc/frp
sudo nano frpc.toml
# 在frpc.toml文件尾部添加下面内容
[[proxies]]
name = "Raspberry Pi"
type = "http"
localPort = 8081
customDomains = ["www.example.com"]
第5步、域名解析配置
将www.example.com解析到公网服务器ip
第6步、配置公网服务器的nginx或添加反向代理
由于我的公网服务器使用了宝塔面板,因此直接使用宝塔面板的反代服务
网站名称自定义,8082端口是固定的。最后建议在宝塔面板中申请SSL证书,实现加密连接。
一些常用的命令
#修改frpc.toml
cd /etc/frp
sudo nano frpc.toml
sudo systemctl restart frpc.service
sudo systemctl status frpc.service
# 修改frps.toml
cd /etc/frp
sudo vim frps.toml
sudo systemctl restart frps.service
sudo systemctl status frps.service
## 修改nginx配置文件(部署网站时要记得修改哦)
cd /etc/nginx/sites-available/
cd /etc/nginx/sites-enabled/
# 创建一个指向新配置文件的符号链接,以便Nginx能够识别并启用它
sudo ln -s /etc/nginx/sites-available/www.example.com /etc/nginx/sites-enabled/
# 检查nginx语法后重启
sudo nginx -t
sudo systemctl restart nginx
写在最后
以上便是整个折腾过程,使用frp项目,借助公网服务器为树莓派做内网穿透,然后解析域名实现域名访问内网网站。
作为小白,对linux命令和服务器通信原理一窍不通,所以在折腾的过程中遇到的问题很多,但通过GPT查询和搜索一个个都还是解决了。这里主要记录了思路和主要操作步骤,作为备忘未来查询,或者供感兴趣的朋友们参考。
主要参考来源
- The Epic Story of the Raspberry Pi,https://raspberrytips.com/raspberry-pi-history/
- 树莓派的前世今生:10年,售出4600万台!https://shumeipai.nxez.com/2022/03/01/raspberry-pis-tenth-birthday.html
- 使用frp内网穿透,实现远程访问树莓派,https://blog.csdn.net/weixin_44614230/article/details/127611454
- 树莓派(Raspberry Pi)日期时间不准的修正方法,https://blog.csdn.net/weixin_37706204/article/details/130078414
评论 (0)