在树莓派4B上安装操作系统,本地内网连接树莓派,以及树莓派内网暴露,搭建Web服务器
1. 树莓派安装操作系统官网下载网址:https://www.raspberrypi.org/downloads/1.1 下载树莓派系统烧入软件官网为不同的电脑操作系统提供了烧录软件,大家可以根据不同的操作系统下载对应软件。而且Raspberry Pi Imager文件不大,下载很快。树莓派官方提供的 Raspberry Pi imager 系统写入程序:Imager烧入程序:链接:https:/
更新说明:本博客部分百度网盘链接都失效,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.txt
和ssh
的区别,这边是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.txt
中 hdmi_mode=x
的 x
值。
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,同代理服务器打交道,代理服务器要求用户提供其要访问的远程主机名。
当用户答复并提供了正确的用户身份及认证信息后,代理服务器连通远程主机,为两个通信点充当中继。整个过程可以对用户完全透明。用户提供的用户身份及认证信息可用于用户级的认证。
防火墙从诞生开始,已经历了四个发展阶段:
- 基于路由器的防火墙
- 用户化的防火墙工具套
- 建立在通用操作系统上的防火墙
- 具有安全操作系统的防火墙
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外网地址,展示如下:
当然大家如果前端页面写的漂亮,就可以制作自己的网站,感谢你的阅读,谢谢支持!
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)