更新说明:本博客部分百度网盘链接都失效,2024 年 05 月 27 日,博主今天进行更新了,新的百度网盘链接,本博客涉及的资源都整合进去了,谢谢大家支持!链接:https://pan.baidu.com/s/13PvZIJRHOF0bZ2HNVuZiWg?pwd=hyp6 提取码:hyp6 --来自百度网盘超级会员V6的分享

1. 树莓派安装Linux操作系统

官网下载网址:https://www.raspberrypi.org/downloads/

1.1 下载树莓派系统烧入软件

官网为不同的电脑操作系统提供了烧录软件,大家可以根据不同的操作系统下载对应软件。而且Raspberry Pi Imager文件不大,下载很快。树莓派官方提供的 Raspberry Pi imager 系统写入程序:

Imager烧入程序:链接:https://pan.baidu.com/s/1FsHywur3oyea1gXMMQm4uA 提取码:4r7z

安装 Imager 烧入程序成功后,点击启动展示如下所示:
在这里插入图片描述

1.2 下载操作系统镜像文件

下载操作系统的镜像文件,当然树莓派官方网站可以下载到,但是毕竟树莓派官网在国外,下载起来是非常缓慢的,这边我把我下载好的百度网盘分享出来,大家下载我的百度网盘上的Raspberry操作系统IMG镜像文件:

链接:https://pan.baidu.com/s/1fMUTKAWX1gB4GlihrimcyQ 提取码:r6qo

界面也很清晰明了,第一个选项是选择系统,第二个选择相应SD卡,最后确认无误后点击WRITE按钮写入。选择操作系统的镜像文件,选择SD Card的目录,开始进行写入:
在这里插入图片描述
点击第一个按钮Operating System 里边有很多操作系统供大家选择,但因为外网的原因下载速度很慢,在这里推荐大家先在官网上下载操作系统的种子文件,从种子文件得到自己所需的操作系统,之后点击如上页面的最后一项Use custom,即使用本地文件,选中自己下载的操作系统文件(注意是.img文件)。

然后点击WRITE按钮进行开始写入操作系统,时间花费较长,请耐心等待即可。

1.3 cmdline.txt配置文件分配IP

当操作系统写入SD完毕以后,会发现SD卡的内存大小变小了,仅有几百兆了,说明安装是成功的,展示如下所示:
在这里插入图片描述
在系统写入内存卡之后,内存卡的容量会发生变化,然后我们在SD卡目录中,找到cmdline.txt文件,这是树莓派命令行窗口配置文件,展示如下所示:
在这里插入图片描述
然后我们修改 cmdline.txt 文件如下,给系统分配IP,在前面增加:ip=192.168.xxx.xxx,反正192.168开头,后面的随便填就行了,在 0 ~ 255 之间就行,这边举例ip=192.168.137.100

ip=192.168.137.100 console=serial0,115200 console=tty1 root=PARTUUID=7e39db9c-02 rootfstype=ext4 elevator=deadline fsck.repair=yes rootwait quiet init=/usr/lib/raspi-config/init_resize.sh splash plymouth.ignore-serial-consoles

特别注意:ip=192.168.137.100后面与console之间要加空格,否则后期操作会出问题。

1.4 配置ssh远程连接权限

SSH是一种网络协议,用于计算机之间的加密登录。如果一个用户从本地计算机,使用SSH协议登录另一台远程计算机,我们就可以认为,这种登录是安全的,即使被中途截获,密码也不会泄露。最早的时候,互联网通信都是明文通信,一旦被截获,内容就暴露无疑。

1995年,芬兰学者Tatu Ylonen设计了SSH协议,将登录信息全部加密,成为互联网安全的一个基本解决方案,迅速在全世界获得推广,目前已经成为Linux系统的标准配置。

操作非常简单:在SD卡的目录下,增加ssh为文件名的文件(内容为空)

特别注意:没有后缀名称,区分ssh.txtssh的区别,这边是ssh才对。

增加ssh文件后,开放ssh 远程联机服务,展示如下所示:

在这里插入图片描述

2. 本地内网IP连接树莓派

那么有同学可能没有那个外接的显示器,想在本地PC电脑去连接访问树莓派,当然可以借助很多渠道进行访问,接下来我会慢慢介绍。

比如:XShell连接树莓派(不支持图形化界面),当然也可以使用Putty进行连接(不支持图形化界面),VNC-Viewer(支持图形化界面)也可以进行连接。

在上面树莓派安装操作系统结束后,树莓派默认账户是:用户名:pi,密码:raspberry

如果有外接显示器的同学,可以直接启动了,这边对应没有外接显示器,只能借助远程连接访问树莓派的同学,我们具体讲下步骤:

2.1 本地开启以太网网络服务

由于现在树莓派还没有连接你宿舍或者家里的WIFI,这个状态并不能直接进行内网的连接,所以只能先借助以太网有线连接的方式。

我们插入树莓派电源,首先要进行连接,要用网线一头插在本地电脑,另一头插在树莓派上,然后再开启我们电脑上以太网网络服务模式:
在这里插入图片描述
如果你之前没有配置过以太网,那么需要配置,右击以太网的图标,选择属性,然后根据如下图片的步骤进行相应的配置即可。
在这里插入图片描述
配置完成之后,点击确定完成配置,如果没有叉叉就是配置连接完成了。

2.2 ping命令连接测试

之前我们安装操作系统的时候,我们配置完树莓派readline.txt文件,给树莓派分配了ip,接下来就是,在电脑启动cmd窗口进行Ping连接测试,看看连接是否畅通。

ping (Packet Internet Groper),因特网包探索器,用于测试网络连接量的程序。Ping发送一个ICMP;回声请求消息给目的地并报告是否收到所希望的ICMP echo (ICMP回声应答)。

它是用来检查网络是否通畅或者网络连接速度的命令,展示如下:
在这里插入图片描述
如果丢失=0,那么基本上连接是畅通的,成功了!

2.3 ssh以太网连接登录树莓派

以太网连接服务已经打通了,接下来,我们进行连接到树莓派,毕竟是启用ssh连接方式,能进行ssh连接的软件有很多,比如XShell、Putty等。

Putty软件的资源包(百度网盘)

Putty:链接:https://pan.baidu.com/s/16WUrEHTcRrqPDh4sby6VTA 提取码:muf6

我这边采用的是Putty链接方式,如果你有云服务器使用的经验,使用XShell是再好不过的,更加稳定,命令行也不会有乱码的发生,更加稳定。

然后我们点击putty程序,进入如下界面,进行配置,展示如下,配置完成以后,那么我们点击Open开始远程连接树莓派。
在这里插入图片描述
然后我们进行登录,需要输入用户名(默认:pi)与密码(默认:raspberry),有同学在输入密码时候,光标没有发生变化,其实linux底层的保护机制,默认隐藏了,我们只管输入就行,输完按回车即可。
在这里插入图片描述
登录账号成功后展示如下所示,来到了Linux的交互模式,pi@raspberrypi : ~ $
在这里插入图片描述
pi@raspberrypi : ~ $ 解释下:pi 是用户名,raspberrypi是raspberrypi操作系统

常见的还有,例如:root@centos7.6 : ~ $ :root 是根用户,centos7.6是centos操作系统,这只是linux交互模式规范,大家了解即可。

2.4 调整树莓派配置文件

当我们成功ssh登录树莓派以后,开始进行配置文件的调整修改,在raspberrypi操作系统中,raspi-config文件是尤其重要的,必须使用root权限的用户才能进行修改:

pi@raspberrypi:~ $ sudo su
root@raspberrypi:/home/pi# raspi-config

然后我看到如下的界面,那么为了让等下能够进行vnc连接的服务,所以我们现在要开启vnc服务的权限:上下切换选中Interface Options 进入
在这里插入图片描述
配置1:启动VNC服务

然后选择VNC选项,按回车进入,它会提示:Would you like the VNC Server to be enabled? 你选择<确定>,按回车即可确认启动vnc服务。
在这里插入图片描述
然后我们就成功配置启动了VNC服务,为我们接下来VNC操作树莓派图形化界面奠定了基础,那么为了远程VNC连接分辨率能够合理,我们也需要调整下树莓派图形化界面的分辨率。

配置2:调整图形化界面分辨率

首先我们先选择 Display Options 选项,按回车进入:
在这里插入图片描述
选择Resolution去设置一个指定屏幕相应方案:点击回车进入详细分辨率的选择:
在这里插入图片描述
这边推荐使用1024*768的分辨率模式,点击回车确定改变分辨率模式:
在这里插入图片描述
关于外接显示器分辨率调整接下去我会讲的,大家不要紧,这边的分辨率的设置只是为了我们VNC服务的远程连接能够更加稳定,减少出现黑屏的风险才这么去设置的。那么外接显示器,我们会根据显示器分辨率去设置树莓派的分辨率。

特别注意:配置完成之后,需要选中底部的Finish选项(按Tab按键即刻切换到Finish选项),然后按回车键,树莓派需要重新启动才会更新修改后的配置,如果不重启更新无效。

2.5 VNC操作树莓派图形界面

经过我们之前步骤的配置,那么现在开始,我们正式可以进行访问我们树莓派的图形化话界面了,现在就是开始进行借助VNC-Viewer连接我们树莓派:

虚拟网络控制台 VNC (Virtual Network Console)

VNC-Viewer: 百度云盘链接:https://pan.baidu.com/s/1Uwne_sg4Dsa-2VvXjDo4aQ 提取码:h2tf

Tiger VNC(Virtual Network Console)是虚拟网络控制台的缩写。它是一款优秀的远程控制工具软件,由著名的 AT&T 的欧洲研究实验室开发的。VNC 是在基于 UNIX 和 Linux 操作系统的免费的开源软件,远程控制能力强大,高效实用,其性能可以和 Windows 和 MAC 中的任何远程控制软件媲美。

在 Linux 中,VNC 包括以下四个命令:vncserver,vncviewer,vncpasswd,vncconnect,大多数情况下,普通用户的使用只需要其中的两个命令:vncserver 和 vncviewer。

打开VNC-Viewer文件,操作如下所示:进行权限连接树莓派图形化界面
在这里插入图片描述
接下来就是图形化界面的展示了,大家完成初始信息的填写,就开始玩耍吧:
在这里插入图片描述

2.6 树莓派配置内网IP连接

当我们操作树莓派,配置初始化信息填写,连接上家里或者宿舍的WIFI了,那么就可以摆脱网线,进行内网IP的远程连接了,操作如下所示:

我们打开树莓派操作系统命令行模式,输入:ifconfig -a
在这里插入图片描述
查看树莓派分配到WiFi内网的IPv4地址是:192.168.1.106

比如打开我们本地电脑的CMD窗口,输入:ipconfig(区分linux是ifconfig),展示如下:
在这里插入图片描述
很明显的发现:我们电脑本地的以太网IP地址就是我们之前在2.1小节分配到的地址是一模一样的。

那么接下来,我们知道了树莓派的内网IP地址,也知道了电脑本地内网IP地址,就可以干两件事,在电脑上通过内网IP远程连接树莓派,在树莓派上通过内网IP远程连接电脑。

这边举例,用电脑本地内网IP连接树莓派:

那么刚才我们使用的Putty进行连接树莓派的,现在再用Xshell进行连接,我们换个花样,当然无论用Putty和Xshell效果都是一样的,都是基于ssh协议进行连接的。

点击Xshell工具,然后进行配置连接,展示如下:
在这里插入图片描述
然后进行用户密码权限的输入,当然我们在使用putty进行连接时候是命令行输入的,这边是图形化窗口输入的,实质是效果一样的。
在这里插入图片描述
点击确定,成功建立连接后展示如下所示:
在这里插入图片描述
好了,现在你可以把你的网线给丢了,网线已经不需要了,你的树莓派,只需要一个电源线即可,当然你想剪了网线也行,看你心情。

3. 树莓派外接设备注意介绍

3.1 HDMI方式连接电视机

在Windows下,进入已写入树莓派系统的SD卡,找到 config.txt(最好备份一下这个)。建议,不管你是什么显示器,或者高清电视机,最好在没显示的情况,请将 config.txt 中的分辨率调低一些,不要老想着,我的显示设备支持1080p,就非得一步到位,建议从下面的低分辨率尝试开始。
计算机显示器使用的分辨率 :

hdmi_mode=4    640x480   60Hz 
hdmi_mode=9    800x600   60Hz 
hdmi_mode=16   1024x768  60Hz 

CEA规定的电视规格分辨率 :

hdmi_mode=2    480p  60Hz 
hdmi_mode=4    720p  60Hz 

另外:若直接使用的是HDMI线接显示设备,请在config.txt中添加一条:

hdmi_ignore_edid=0xa5000080

这个是命令树莓派不检测HDMI设备的任何信息,只按照我们指定的分辨率输出。 这样就不会自动检测显示设备的分辨率,而避免掉很多可能不显示的造成因素,就会按照你自己设置的分辨率显示。分辨率也按照上面列出的尝试,修改 config.txthdmi_mode=xx 值。

3.2 Pycharm运行Micropython

这边本来是不写的,毕竟是Micropython单片机这块,但是既然B站粉丝的问题,就此也解决下,如果是查看树莓派4B教程的同学,到此就直接跳过吧。

安装MicroPython插件(Plugins)

运行PyCharm IDE,点击插件[Plugins] (见图3)。在”Search”编辑框输入:micropython,点击绿色背景的[Install]按钮安装MicroPython插件,具体操作见图3中的红色椭圆框所示。
在这里插入图片描述
接下来可安装树莓派Pico开发板MicroPython固件(若已在树莓派Pico开发板中事先安装了MicroPython固件,则忽略此步骤)
在这里插入图片描述
配置结果展示如下:接下来Pycharm会帮我们安装MicroPython编程相应的Package库
在这里插入图片描述

4. 树莓派Linux操作系统教程

这边介绍常见的Linux操作系统的指令,以及文件目录的构成,更详细的教程,大家可以百度去搜索,这边只是简单介绍下相关有用的内容。

4.1 Linux操作系统指令介绍

在命令提示符前面,可以看到你当前所处的工作目录。在Linux中,你的主目录会被缩写为波浪线(~)。刚刚打开LX终端( LXTerminal)时,它会把当前的工作目录切换到你的主目录下,命令提示符会显示如下:

pi@raspberrypi:~ $

➊ 你的用户名: pi, 后面加上@符号。

❷ 你的主机名 ( 默认的主机名是raspberrypi )

❸ Shell的当前工作目录。默认是你的主目录 ( ~ )

❹ 这是命令提示符。你输人的一切内容都会出现在它的右侧,按回车键执行你所输入的命令。

Raspberry文件系统中部分重要的目录

linux系统文件的目录都是从斜杠“ / ”根目录开始的,linux系统文件管理共同点。
在这里插入图片描述
操作文件或目录常用命令

指令名称指令介绍
pwd显示当前工作目录(print working directory)
touch创建空文件
mkdir创建目录(make directoriy)
-p父目录不存在情况下先生成父目录 (parents)
cp复制文件或目录(copy)
-r递归处理,将指定目录下的文件与子目录一并拷贝(recursive)
mv移动文件或目录、文件或目录改名(move)
rm删除文件(remove)
-r同时删除该目录下的所有文件(recursive)
-f强制删除文件或目录(force)
rmdir删除空目录(remove directoriy)
cat显示文本文件内容 (catenate)
more、less分页显示文本文件内容
head、tail查看文本中开头或结尾部分的内容
head -n 5 a.log查看a.log文件的前5行
tail -F b.log循环读取(follow)

Linux中zip压缩和unzip解压缩命令详解

在linux系统中,我们经常需要进行解压缩,尤其是下载某些包的时候,学会去解压这些包,它不像windows直接鼠标操作即可,Linux需要调用相应的指令才能进行解压缩。

# 把 /home 目录下面的mydata目录压缩为 mydata.zip
zip -r mydata.zip mydata #压缩mydata目录

# 把 /home 目录下面的 mydata.zip 解压到 mydatabak 目录里面
unzip mydata.zip -d mydatabak

# 把 /home 目录下面的abc文件夹和123.txt压缩成为abc123.zip
zip -r abc123.zip abc 123.txt

# 把 /home 目录下面的 wwwroot.zip 直接解压到 /home 目录里面
unzip wwwroot.zip

# 把 /home 目录下面的 abc12.zip、abc23.zip、abc34.zip 同时解压到 /home 目录里面
unzip abc*.zip

# 查看把/home目录下面的wwwroot.zip里面的内容
unzip -v wwwroot.zip

# 验证/home目录下面的wwwroot.zip是否完整
unzip -t wwwroot.zip

# 把/home目录下面wwwroot.zip里面的所有文件解压到第一级目录
unzip -j wwwroot.zip

查看系统信息:-a --all : print all information, in thefollowing order

[root@VM-4-4-centos ~]# uname -a

Linux VM-4-4-centos 3.10.0-1160.11.1.el7.x86_64 #1 SMP Fri Dec 18 16:34:56 UTC 2020 x86_64 x86_64 x86_64 GNU/Linux

4.2 Linux网络防火墙配置

这边介绍防火墙,主要为我们搭建web服务器打基础,后期服务器端口的开放借助于防火墙。

在互联网上防火墙是一种非常有效的网络安全模型,通过它可以 隔离风险区域 (即Internet或有一定风险的网络)与 安全区域 (局域网)的连接,同时不会妨碍人们对 风险区域的访问 。所以它一般连接在核心交换机与外网之间。

开启防火墙:servicefirewalld start

关闭防火墙:service firewalld stop

查看端口状态:netstat -tunlp
在这里插入图片描述
完整的防火墙系统通常是由 屏蔽路由器 和 代理服务器 组成

屏蔽路由器:

是一个多端口的IP路由器,它通过对每一个到来的IP包依据组规则进行检查来判断是否对之进行转发。屏蔽路由器从包头取得信息,例如协议号、收发报文的IP地址和端口号、连接标志以至另外一些IP选项,对IP包进行过滤。

代理服务器:

是防火墙中的一个服务器进程,它能够代替网络用户完成特定的TCP/TP功能。一个代理服务器本质上是一个 应用层的网关 ,网关我们前天讲到过,它就是一个关口。

一个为特定网络应用而连接两个网络的网关。用户就一项TCP/TP应用,比如Telnet或者FTP,同代理服务器打交道,代理服务器要求用户提供其要访问的远程主机名。

当用户答复并提供了正确的用户身份及认证信息后,代理服务器连通远程主机,为两个通信点充当中继。整个过程可以对用户完全透明。用户提供的用户身份及认证信息可用于用户级的认证。

防火墙从诞生开始,已经历了四个发展阶段:

  1. 基于路由器的防火墙
  2. 用户化的防火墙工具套
  3. 建立在通用操作系统上的防火墙
  4. 具有安全操作系统的防火墙

5. 树莓派搭建Web服务器

接下来就是讲下树莓派如何进行搭建web服务器,那么web应用分为前端与后端,前端就是所说Html网页,后端可以好多种,使用Java的springboot,或者python的django、flask,或者nodejs以js脚本语言开发的后台,或者是Php(世界上最好的语言)

那么liunx默认是安装了python环境,简单处理,这边介绍是以flask框架搭建的。

5.1 编写简单Flask后端代码

Flask诞生于2010年, Armin Ronacher的一个愚人节玩笑。不过现在已经是一个用python语言基于Werkzeug工具箱编写的轻量级web开发框架,它主要面向需求简单,项目周期短的小应用。
在这里插入图片描述
Python最出名的框架要数Django,此外还有Flask、Tornado等框架。虽然Flask不是最出名的框架,但是Flask应该算是最灵活的框架之一,这也是Flask受到广大开发者喜爱的原因。
在这里插入图片描述
首先要下载第三方库:Flask:pip install Flask,树莓派系统上也要安装。

搭建Flask服务器,简单代码展示:默认端口 5000,启动服务器:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    with open('resource/index.html', 'r', encoding='utf-8') as f:
        html = f.read()
    return html

if __name__ == '__main__':
    app.run(port=5000)

前端页面:index.html 简单代码展示:(如果大家有能力可以写更漂亮的页面,这边只是举例)

<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
    <h1 style="text-align: center">raspberry web</h1>
    <center>
        <img width="50%" height="50%" src="https://img2.baidu.com/it/u=212654247,3355393783&fm=253&fmt=auto&app=138&f=PNG">
    </center>
</body>
</html>

5.2 本地ssh传输项目文件

我们现在需要把我们电脑上的项目文件传输到树莓派上,首先需要安装一个支持ssl ftp的 FileZilla FTP Client工具,点击进入官方下载:https://filezilla-project.org/download.php,下载window安装包,下一步即可傻瓜式的完成安装。

在linux下一般用scp这个命令来通过ssh传输文件,但是只能Linux传输给Linux,不支持windows系统传输给liunx操作系统。

1、从服务器上下载文件:把192.168.0.101上的/var/www/test.txt 的文件下载到/var/www/local_dir(本地目录)

# scp username@servername:/path/filename /var/www/local_dir(本地目录)

scp root@192.168.0.101:/var/www/test.txt

2、上传本地文件到服务器:把本机/var/www/目录下的test.php文件上传到192.168.0.101这台服务器上的/var/www/目录中

# scp /path/filename username@servername:/path   

scp /var/www/test.php  root@192.168.0.101:/var/www/

3、从服务器下载整个目录:把服务器目录下的test目录,下载到本地 /var/www/ 目录

# scp -r username@servername:/var/www/remote_dir/(远程目录) /var/www/local_dir(本地目录)

scp -r root@192.168.0.101:/var/www/test  /var/www/  

4、上传目录到服务器:把当前目录下的test目录上传到服务器 /var/www/ 目录

# scp  -r local_dir username@servername:remote_dir

scp -r test  root@192.168.0.101:/var/www/   

在P2章节‘本地IP连接树莓派’中完成了以太网的内网连接,那么现在FileZilla进行传输文件,打开Fillzilla程序,建立与树莓派内网连接,展示如下:(端口:22,图片上忘记填写了,大家不要忘记)

在这里插入图片描述
连接成功之后,在程序的右半框会出现树莓派的文件目录,展示如下:
在这里插入图片描述
接下来你就可以图形化操作,传输文件了,那么接下来,我们把我们的项目文件传输到树莓派的某个目录(自己任意选择,推荐/home/pi下创建一个file目录,地址就是:/home/pi/files)
在这里插入图片描述
那么我们文件传输也完成了,现在树莓派上也有我们的项目文件了,成功!

5.3 树莓派上启动服务器

然后我们还是回到ssh连接树莓派的操作,cd到我们项目文件所在的目录,进行运行我们的项目文件,启动服务器。
在这里插入图片描述
接下来,我们需要在树莓派上安装我们的Flask第三方库,那么还是和刚才在windows上安装的方式一样:调用:pip install Flask,安装成功后,执行 pip list,可以查看到我们下载的第三方库列表中存在了Flask第三方库。

python server.py

接下来,执行上述代码,来执行server.py文件,启动我们服务器:端口为5000
在这里插入图片描述
出现running on http://xxx.xxx.xxx.xxx:5000/ 说明启动成功了!

如果发送端口被占用的报错

假如出现如下的问题,是端口被占用,我们占用5000端口的进程杀死即可,方法如下所示:
在这里插入图片描述
第一步:ps -ef|grep python查看所有python关键词相关的进程

第二步:找到对应的python守护进程进行杀死:kill PID(进程id)
在这里插入图片描述

特别注意:如果 kill PID 没有成功杀死,那么执行:kill -9 PID强制执行杀死进程

5.4 树莓派服务器访问测试

现在我们已经成功启动了我们服务器,那么接下来我们访问测试一下,是否可以成功访问?

我们在我们本地电脑打开浏览器访问:http://树莓派内网地址:5000/,因为我这边树莓派的内网地址是192.168.1.106,那么我应该访问:http://192.168.1.106:5000/

当然我们可以发现访问失败了?

特别提醒:服务器想要被其他主机访问,需要把IP绑定成‘0.0.0.0’才行,其实很容易看出刚才启动时,我们server的地址是 running on http://127.0.01:5000/ 明显只是个本地回环IP地址,肯定不能被内网其他主机访问。

那么重新修改我们的server.py的代码,增加host的IP绑定:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    with open('resource/index.html', 'r', encoding='utf-8') as f:
        html = f.read()
    return html

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000) # IP绑定成‘0.0.0.0’

然后重复刚才传输的操作(记住要把之前server.py进程杀死),重新开启我们的server.py服务器程序:
在这里插入图片描述

然后我们继续在我们本地电脑打开浏览器访问:http://192.168.1.106:5000/,发现可以访问了,但是出现了后台的报错:
在这里插入图片描述
我在本地电脑是启动访问是没有报错的,其实这个就是python版本问题,我们本地电脑是python3,树莓派上是python2,接下会讲解决方案,大家继续往下看。

查看我们的后台,看到了报错的原因:
在这里插入图片描述
encoding根本就不是有效的关键词,其实是因为Python版本导致的,树莓派默认安装了的Python2.7版本。

解决方案:既然不行,索性直接去掉 encoding='utf-8',然后重复刚才传输的操作(记住要把之前server.py进程杀死),重新开启我们的server.py服务器程序,进行访问我们http://192.168.1.106:5000/
在这里插入图片描述
恭喜你,成功访问了,说明我们的服务器搭建成功了,NICE!!!

5.5 下载Natapp内网暴露工具

别高兴的太早,同学!5.4 访问成功其实只是针对内网的,如果不是同一内网的用户,访问你的网站还是访问不到,服务器web明显就是要给全世界人访问的,怎么只局限于内网呢?

怎么办?我又没有云服务器?做不到请求转发!何况还是在学校!那么只能借助内网穿透技术来实现,这边有常见的内网穿透工具:
在这里插入图片描述
当然免费的东西肯定不好用,广告多,我们选择中档的就使用:NATAPP
在这里插入图片描述
NATAPP使用官方教程:https://natapp.cn/article/natapp_newbie

我们下载到电脑的本地,然后采用5.2讲到的FTP方式传输到树莓派/home/pi/files目录下。

然后我们注册NATAPP账号,来到个人中心,选择如下进行购买:
在这里插入图片描述
然后进行填写购买配置项,支付一杯奶茶的钱即可拥有,学习技术是无价的,你少喝一杯奶茶,学到了技术就是收获,如果你实在没钱请私信我,我根据你的家庭状况属实帮你支付。
在这里插入图片描述
购买成功后展示如下:然后接下来就是在树莓派上的操作了。
在这里插入图片描述

5.6 内网暴露实现真正服务器

根据官方的教程:https://natapp.cn/article/natapp_newbie,我们还需要config.ini文件,这边我已经从官网复制了,config.ini文件内容如下:

#将本文件放置于natapp同级目录 程序将读取 [default] 段
#在命令行参数模式如 natapp -authtoken=xxx 等相同参数将会覆盖掉此配置
#命令行参数 -config= 可以指定任意config.ini文件
[default]
authtoken=                      #对应一条隧道的authtoken
clienttoken=                    #对应客户端的clienttoken,将会忽略authtoken,若无请留空,
log=none                        #log 日志文件,可指定本地文件, none=不做记录,stdout=直接屏幕输出 ,默认为none
loglevel=ERROR                  #日志等级 DEBUG, INFO, WARNING, ERROR 默认为 DEBUG
http_proxy=                     #代理设置 如 http://10.123.10.10:3128 非代理上网用户请务必留空

我们在电脑本地进行编辑,新建txt文件进行填写上面的信息,(后缀名也要改,注意config.ini与config.ini.txt)改名为config.ini文件(其实不做日志输出,我们只需要配置第一项authtoken即可),然后放到5.5小节传输natapp完成后,natapp的同级目录下:
在这里插入图片描述

在Linux/Mac操作系统下(我们树莓派就是linux系统)需要先给执行权限:然后再运行 natapp

chmod a+x natapp
./natapp

运行结果展示如下所示:127.0.0.1:5000地址成功暴露映射到http://wrist.natapp1.cc外网地址
在这里插入图片描述
那么刚才服务器的server.py文件,我们是绑定’0.0.0.0’,由于是·内网暴露映射到是本地回环127.0.0.1地址,所以我们还是要把server.py中host指定成’127.0.0.1’地址:

from flask import Flask, request

app = Flask(__name__)

@app.route('/')
def index():
    with open('resource/index.html', 'r', encoding='utf-8') as f:
        html = f.read()
    return html

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)

然后重复传输的操作(记住要把之前server.py进程杀死),重新开启我们新的server.py服务器程序:(为了让其能在后台运行,我们启动守护进程的模式,命令如下)

pi@raspberrypi:~/files/raspiWeb $ nohup python server.py &
[1] 1691
pi@raspberrypi:~/files/raspiWeb $ nohup: 忽略输入并把输出追加到'nohup.out'

为了让natapp内网暴露进程也能在后台运行,同样以守护进程的模式开启:注意一定要加上 -log=stdout

chmod a+x natapp
nohup ./natapp -log=stdout &

然后我们使用手机热点WiFi,保证和树莓派不是一个局域网就行,访问我们http://wrist.natapp1.cc外网地址,展示如下:
在这里插入图片描述
当然大家如果前端页面写的漂亮,就可以制作自己的网站,感谢你的阅读,谢谢支持!

Logo

开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!

更多推荐