树莓派建立个人网站(一):Nginx+uWSGI+Flask实现最简服务器的搭建

本文详细介绍了如何在树莓派3B+上部署Nginx、uWSGI和Flask,以实现高性能的Web服务。首先解释了为何需要Nginx和uWSGI来增强Flask应用的生产环境能力。接着,通过步骤演示了安装Flask、配置uWSGI和启动Nginx的过程。在配置uWSGI时,强调了Python路径设置的重要性以避免库找不到的问题。最后,讨论了两种使服务开机启动的方法,并推荐了简单易行的方案。
摘要由CSDN通过智能技术生成


使用环境介绍:树莓派3B+,Python3.7

一:Nginx、uWSGI、Flask

为什么要使用Nginx+uWSGI+Flask?
  本身来讲使用Flaks就足以算是一个web服务了,即便是没有其他的也并不影响基本的访问,但是Flask本身并不用于生产环境,而是用于开发环境,毕竟你不能让Flask既设计web框架,还要兼顾服务器搭建的完善。而uWSGI就是一个实现了WSGI和uwsgi协议的web服务器,所以使用uWSGI可以实现更强大的功能,负载均衡、处理动态数据等…。而Nginx具备优秀的静态内容处理能力,然后将动态内容转发给uWSGI服务器,这样可以达到很好的客户端响应。
  具体的区别可以看这些:

1. Flask
  • 先下载Flask:
sudo pip3 install flask
  • 接着部署一个简单的Flask的web服务,文件为test.py:(可以host改为0.0.0.0,这样在同一局域网下的其他电脑才可以访问这个网站,主要用于查看网址是否可用,网址本身是否存在问题!使用树莓派的IP:5000访问,参考:Flask解决5000端口远程访问的问题
from flask import Flask
app = Flask(__name__)

@app.route('/')
def hello():
    return 'Hello!'

if __name__ == '__main__':
    app.debug = True
    app.run(host="0.0.0.0")
  • 最后Python3 test.py运行没报错就成功了。

2. uWSGI
  • 下载uWSGI:
sudo apt-get install uwsgi uwsgi-plugin-python3
  • 建立uWSGI的配置文件uwsgi_config.ini,和test.py同一目录下:
[uwsgi]
socket = 127.0.0.1:5000  # 表示和Nginx通信的地址和端口,和Nginx配置里的uwsgi_pass一致。
processes = 4     # 表示开启多少个子进程处理请求。
threads = 2       # 每个进程的线程数。
plugin = python3  # 加载指定插件
master = true     # 启动主进程
pythonpath = /home/pi/.local/lib/python3.7/site-packages  # 你的python版本对应库的路径
module = test   # 加载项目启动模块,刚才我们创建了test.py,这里就为test
callable = app  # Flask项目的实例名称,就是刚才我们创建的实例名
wsgi-file = /home/pi/Code_Statistics_System/manage.py     # 启动程序的绝对路径
daemonize = /home/pi/Code_Statistics_System/server.log    # 把uwsgi服务器作为后台进程启动,项的值指向一个文件表明后台中的所有输出都重定向到这个日志中去。
py-autoreload = 1  # 当Python文件改动的时候自动更新,不再需要手动重启uWSGI
chdir = /home/pi/Code_Statistics_System  # 项目的路径
  • 使用命令启动uWSGI服务:
sudo uwsgi --ini uwsgi_config.ini
  • 不报错就成功!
  • 其实这里面有一个很大的坑在,因为树莓派有Python3和Python2,所以很容易把库安装错了地方导致运行的时候找不到库。并且uWSGI还不太一样,即便你用Python3能正确运行程序不报错,但是你一运行uWSGI就还是报错找不到对应库。这里很关键的地方在于配置文件里的pythonpath属性,使用以下命令可以找到你安装对应Python版本库的地方,把那个地址给pythonpath属性就可以解决问题了! 一般来讲不大用虚拟环境来运行,也有很多坑,除非你很清楚内部的运行逻辑,不然会迷失在文章里!参考:uwsgi no python application found错误的解决(python3+centos6)
pip3 show flask|grep -i location

3. Nginx
  • 下载Nginx:
sudo apt-get install nginx
  • 修改默认的配置文件/etc/nginx/sites-available/default 如下的地方,我只显示了需要改的地方:
server {
    listen 80;              # 一般都是默认端口80,访问网站用的
    server_name raspberry;  # 服务器名称
	location / {
		include /etc/nginx/uwsgi_params;  # 默认填写是这样
		uwsgi_pass 127.0.0.1:5000;        # 表示和uWSGI通信的地址和端口
	}
}
  • 保存后启动Nginx服务:
sudo /etc/init.d/nginx start

如此使用树莓派IP:80来访问网站,没有问题就成功了!

4. 开机启动

方法一:向rc.local文件添加启动代码

  • 修改rc.local文件:
sudo nano /etc/rc.local
  • 在打开的rc.local找到exit 0,在exit 0 之前添加一行代码:
#双引号里面是程序的路径
sudo uwsgi --ini /xxxx绝对路径xxxx/uwsgi_config.ini &
  • 特别注意,如果程序是阻塞的,则须加上 & 符号以在后台运行,否则系统无法启动

  • sudo reboot ,重启系统测试

方法二:将程序作为服务启动

  • 在/etc/init.d/目录下新建一个服务脚本文件:
#start_test是启动服务文件的名称,自定义
sudo nano /etc/init.d/uwsgi.sh
#!/bin/bash -e
### BEGIN INIT INFO
# Provides:  uwsgi_ini
# Required-Start:
# Required-Stop:
# Default-Start:
# Default-Stop:
# Short-Description:
# Description:       Linux ADB
### END INIT INFO

sudo uwsgi --ini /xxxx绝对路径xxxx/uwsgi_config.ini
  • 设置脚本权限:
sudo chmod 777 /etc/init.d/uwsgi.sh
  • 将该脚本作为服务设置开机自动加载:
sudo update-rc.d uwsgi.sh defaults
  • sudo reboot 重启测试.

Nginx也一样,我推荐第一种方案更简单!

二:参考博文

三步在树莓派上部署nginx+uWSGI+flask

【Flask】 利用uWSGI和Nginx发布Flask应用

Nginx快速入门

树莓派上设置程序开机自启动

linux设置uwsgi开机自启

linux下 uwsgi开机自启动设置


BACK:树莓派建立个人网站(二):代码统计系统环境部署
  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值