esp8266时钟+天气+提醒(四)云服务篇一
六、服务器配置
1. 导论
前面我们通过联网获得了对时和获取天气的功能,接下来我们要实现的是提醒功能,但这一次,为了充分感受开发的乐趣,我们选择自己来做服务端——购买一个云服务器,然后让ESP8266连接我们的服务器。
阿里云最近推出了99一年的垃圾货处理活动:链接地址为云服务器ECS_阿里云,在产品规格部分可以看到99一年的配置。特别说明,参考知乎等各平台的评价,据说性能极差,容易宕机,使用条件和场景很有限,单纯图便宜外加抱着试一试的心理选择购买,不建议盲目从众(我不打广告)。
控制台选择配置(我都选择的默认)并购买后进入控制台(链接地址:控制台)查看配置、设置密码等。
可以看到操作系统很独特...是阿里自家的Linux:
点击实例名进入实例,点击重置密码后,输入新密码即可,因为还未登录,所以先设置一下。
设置好后就可以远程连接服务器了(SSH的22端口是默认开放的)。
2. 远程连接服务器
2.1 SSH
刚才说到SSH,现在先简要介绍一下它是什么东西。
SSH(Secure Shell)是一种网络协议,用于安全地在网络上进行数据通信、远程命令行登录以及远程命令执行。SSH提供了强加密和认证机制,以防止传输过程中的数据被截获和篡改,保护通信安全。
SSH工作在应用层,通常用于远程管理服务器或进行安全的数据传输。具体原理可以参看《计算机网络》。
我们远程连接服务器,就是通过SSH客户端连接到SSH服务器(服务器的22端口,这是SSH协议的默认端口)。
我们可以使用cmd或者powershell连接,直接在命令行中输入:
ssh root@服务器地址
服务器地址在控制台中可以看到,注意是公有地址。
然后需要输入密码,第一次连接可能还需要验证服务器的指纹,确认无误后继续。
此外,还可以通过密钥认证连接,但这里就先不使用了。
2.2 Xshell7
我使用Xshell7来连接服务器,Xshell是一款功能强大的终端仿真软件,广泛用于Windows操作系统环境下。它支持SSH、TELNET、SFTP、SERIAL等多种协议,能够让用户方便地远程管理Unix/Linux服务器、路由器、交换机等网络设备。
可以看到,窗口左侧有一个绘画管理器,在其中右键,然后点击新建,如下图:
在主机处输入服务器的公网IP,然后点击左栏的用户身份验证,输入用户名和密码:
确认密码无误后,就可以点击连接了。第一次连接的话如2.1中所述需要指纹密钥,如下图:
点击接受并保存即可。
3. 安装Nginx
连接成功后,就会进入到一个命令行页面,我们可以直接在其中输入命令,这些命令都会在远程主机上被执行。
初始状态下工作目录是/root,接下来,如下图所示,我们要安装Nginx了。
Nginx是一种高性能的HTTP和反向代理服务器,是一种服务器软件,与Apache、Tomcat以及现在比较火的Caddy是同类,我们要做HTTP服务,需要下载安装Nginx。
3.1 源码下载
在上图中,使用到的指令共3个:
- ls:显示当前目录下的所有文件
- pwd:显示当前路径
- wget xxx:下载xxx
wget是一个广泛使用的命令行工具,它用于从网络上下载文件。它支持HTTP、HTTPS和FTP协议,能够在失去连接或者程序被中断时继续之前的下载(断点续传)。
我们使用的是:
wget https://nginx.org/download/nginx-1.25.4.tar.gz
这行命令的意思是下载Nginx1.25.4的源码包,至于这个链接怎么来的,可以点击官网查看:
Nginx
https://nginx.org/en/download.html这里有各个版本的Nginx,点击即可获取下载链接,粘贴在wget后面即可,注意空格。3.2 解压缩
在上图中,又出现了四个新命令:
- mkdir:在当前目录下新建文件夹
- mv:把文件移动到指定位置
- cd:进入某文件夹
- tar:解打包解压缩
观察到我们下载下来了一个nginx-1.25.4.tar.gz,“.gz”格式是Linux中最常用的压缩格式,而“.tar”格式是打包格式。打包和压缩是不同的。
我们使用了命令:
tar -zxf nginx-1.25.4.tar.gz
其中使用了三个参数:
- -z:指定压缩格式为.gz
- -x:解打包
- -f:指定压缩包的文件名
这样就把这个压缩包解开了,之后就可以配置和安装了。
3.3 配置
配置操作其实顾名思义,我们可以看到在解压后的文件夹内有一个configure,它是绿色的(XShell中),这代表着它是一个可执行文件。
直接输入./configure就可以执行它。
不过,我们可以看到结果如下图:
出现了错误,上面说需要PCRE模块但没有找到,所以我们需要先安装一下它。
阿里云的这个Linux内置yum,它是一个在基于RPM的Linux系统(红帽系列常见,CentOS、Fedora等都有)中广泛使用的包管理器和命令行工具。它用于安装、更新、删除软件包及其依赖关系。
我们使用yum来安装这个pcre包:
yum install pcre
结果如上图所示,出人意料地,结果是pcre已经被安装了。
事实上,我们还需要额外安装pcre-devel,如下图所示:
yum install pcre-devel
pcre-devel是pcre的开发库包,不过我们不需要纠结它是什么能做什么,我们只需要安装就好了。不要忘记输入y,这表示同意安装。
事实上,nginx不只需要安装这一个,如果现在再回去./configure,我们会发现它仍然缺少某个库比如zlib等等。
yum install -y gcc-c++ pcre pcre-devel zlib zlib-devel openssl openssl-devel
这里提供一个一站式解决方案——一次安装所有依赖。
都安装完成后,我们再回去./configure,会看到:
很好,已经配置成功了。接下来就可以编译安装了。
3.4 编译安装
顾名思义,先编译后安装,我们先输入
make
它的意思是编译,如下图所示:
编译结束后,就可以安装了:
make install
如果你的结果与我的一样或类似,说明操作无误。
3.5 包管理器安装
实际上,我们刚才的安装方式被称为源码包编译安装,或简称为源码包安装或编译安装,而还有一种安装方式也很常用,即包管理器直接安装,例如:
yum install nginx
至于为什么使用源码包安装,则是因为源码包安装更加灵活,而且配置可调,这是其相较于包管理器安装的优势。
4. 启动Nginx
4.1 启动Nginx
安装好了,接下来我们来启动Nginx。
Nginx安装在/usr/local/nginx处,我们先cd到这个目录:
cd /usr/local/nginx
然后,输入以下命令启动Nginx:
sbin/nginx
当前目录是/usr/local/nginx,在其下有个目录sbin,其中有可执行文件nginx,这样就可以启动了。
我们再输入
netstat -tnl
如果能看到0.0.0.0:80(80端口是HTTP协议的默认端口,被监听了),说明Nginx已经启动了,如下图所示:
4.2 安全组放行
接下来,我们打开浏览器,在地址栏中输入我们服务器的公网IP,尝试访问。
但一般来说,我们是无法访问的,这是因为安全组中可能未放行80端口。
解决方案如下:
在控制台中点击安全组:
进入安全组后,点击快速添加,注意是入方向(意思是外部访问服务器),结果如图所示:
勾选HTTP(80)和HTTPS(443)即可,点击确定保存设置。
之后我们再去浏览器尝试访问一下,如果效果与下图相同,说明成功:
这是Nginx的默认界面,是可以修改和调整的。
5. 配置Python
5.1 安装Python
Python是一种高级编程语言。它是一种解释型、交互式、面向对象的语言。Python和Linux之间有着密切且互补的关系,绝大多数Linux发行版中都预装了Python,当然也包括我们的阿里版。
Python的安装与Nginx类似:
在/root目录下新建文件夹python(此外还有一个文件夹是我们刚才新建的nginx,装着它的源码包),在其中下载源码包:
mkdir python
cd python
wget https://www.python.org/ftp/python/3.10.14/Python-3.10.14.tgz
我们选择的Python版本是3.10.14,当然也可以下载其它版本,在Python官网上寻找即可,链接地址:Python下载
下载完成后进入文件夹,执行configure:
cd Python-3.10.14/
./configure --prefix=/usr/local/python3
值得注意的是,对于configure,我们附加了--prefix=/usr/local/python3,这样子我们就指定python要安装到/usr/local/python3。
接下来编译并安装,与前面nginx一样。
最终结果如下图所示:
可以看到有非常醒目的警告,大意是当前安装的python没有被添加到环境变量里。
我们尝试运行一下Python,如上图下面几行
python3
可以看到进入了Python 3.6.8的环境,但是,我们安装的好像是3.10.14,这是怎么回事?
先Ctrl+Z退出Python环境,接下来回答刚才的问题。
这是因为前面所说绝大多数Linux发行版都预装了Python,这里的Python3.6.8就是预装好的,当我们输入python3,都会被导向这个预装好的python3.6.8。
那么怎么使用我们安装好的python3.10.14呢,解决方案包括:
- 直接去寻找安装好的python3.10.14,直接用,不修改其他配置
- 建立软链接,这样以后输入python3都会被导向python3.10.14
5.2 使用Python
我们采用第一种方案:
cd /usr/local/python3
通过ls命令,我们可以看到这个文件夹下有什么:
四个蓝色的(XShell中),可知它们都是文件夹。
我们cd到bin里面:
cd bin
再使用ls,得到下图的结果:
我们在这里执行一下python3,注意前面加上./,表示特指当前目录下:
./python3
可以看到,我们进入了Python3.10.14的环境,很完美。如下图所示(python3和python3.10效果一样):
5.3 虚拟环境
在创建Python工程的时候,我们通常都需要虚拟环境。
虚拟环境是一种自包含的目录树,其中安装了特定版本的Python解释器以及一系列附加包。虚拟环境的主要目的是为不同的项目创建隔离的Python运行环境,每个项目可以拥有自己的依赖,互不干扰,使各个工程之间低耦合高内聚。
在创建虚拟环境之前,我们先找一个合适的地方存放工程:
cd ~
mkdir www
mkdir clock
cd clock
~表示用户目录,我们是root用户,~即/root,在这里新建文件夹www(延续宝塔的传统😀),在其下又新建一个文件夹clock,这个就是工程的名称了,任取即可。
在进入工程文件夹clock后,我们先新建虚拟环境:
/usr/local/python3/bin/python3 -m venv venv
如上图所示,可以看到出现了一个目录venv,这就是前面所说的虚拟环境目录树。
激活虚拟环境的方法为:
source venv/bin/activate
如下图所示,区别很明显:
进入虚拟环境后,会看到前面出现了一个(venv),这表示我们进入了虚拟环境,并且虚拟环境的名称是venv(名称是在创建时指定的,我们起名为venv)。
在虚拟环境中,我们之间输入python3就可以进入一个python3.10.14的环境了。
此外,通过deactivate可以退出虚拟环境。
未完待续
下一篇是服务端具体代码实现,我们使用Python的fastapi做后端服务框架,为提醒功能提供支持。同时设置Nginx反向代理,把fastapi转接到HTTP的80端口上。