部署环境:
1.腾讯云服务器(Ubuntu)
2.Python 3.8.10
3.nginx/1.18.0 (Ubuntu)
一、项目准备
准备一个最简单的Flask项目文件并上传到服务器的/Projects/hello目录下。
import flask
app = flask.Flask(__name__)
@app.route("/hello")
def hello():
return "hello world!"
if __name__ == "__main__":
app.run(host='0.0.0.0')
为了避免后续权限不足,在这里先为hello文件夹提供777权限。
ubuntu@host:/Projects/hello$ cd ..
ubuntu@host:/Projects$ sudo chmod -R 777 hello
二、环境搭建
1.安装Nginx
sudo apt-get update # 更新安装源
sudo apt install nginx # 安装Nginx
2.安装第三方库Flask
pip3 install --upgrade pip # 更新pip
pip install flask
3.安装uWSGI
sudo apt-get install python3-dev
pip install uwsgi # 安装uwsgi
三、配置uWSGI
1.编辑配置文件
在/Projects/hello的目录下创建uwsgi.ini文件。
[uwsgi]
# 用于启动程序名
module = hello:app
# 子进程数量
master = true
processes = 4
# 程序目录
chdir = /Projects/hello
# 配置uWSGI与Nginx通信
socket = /Projects/hello/uwsgi.sock
# 赋予.sock文件权限
chmod-socket = 660
# http地址和端口
vacuum = true
http = 0.0.0.0:8000
# 允许数据包大小
buffer-size = 65536
# 配置pidfile文件
pidfile = /Projects/hello/uwsgi.pid
2.启动uWSGI
3.其他命令
uwsgi --reload uwsgi.ini # 重载uWSGI服务
uwsgi --stop uwsgi.pid # 关闭uWSGI服务
4.查看结果
使用浏览器查看8000端口是否返回预期结果。
注:如果拒绝访问,可在腾讯云控制台的防火墙查看是否打开了8000端口。
四、配置Nginx
1.备份配置文件
由于配置Nginx会多次修改配置文件,所以一定要备份好初始的配置文件。
sudo cp /etc/nginx/sites-enabled/default ~/nginx.backup
2.编辑配置文件
删除default文件,创建新的配置文件hello。并向其中添加如下内容:
server {
listen 80;
server_name _;
location / {
include uwsgi_params;
uwsgi_connect_timeout 30;
uwsgi_pass unix:/Projects/hello/uwsgi.sock;
}
}
注释掉/etc/nginx/nginx.conf的第一行——user www-data;并换成user root;
#user www-data; # 注释掉此行
user root; # 换成此行
worker_processes auto;
pid /run/nginx.pid;
include /etc/nginx/modules-enabled/*.conf;
3.重新启动Nginx
因为我们修改了配置文件,所以必须要重新启动Nginx服务。
sudo nginx -t # 检查语法是否有错
sudo service nginx restart # 重新启动Nginx
4.其他命令
nginx # 启动Nginx服务
nginx -s stop # 停止Nginx服务
ps -ef | grep nginx # 查看Nginx的运行状态
ps -aux | grep nginx # 查看Nginx的运行状态
5.查看结果
此时就可以在80端口查看到/hello路由下的结果,这与8000端口的结果是一致的。
五、参考文献
1.nginx+uwsgi+django部署(动静分离)
2.uWSGi配置使用
3.uWSGI和Gunicorn对比实践笔记
4.uwsgi出现invalid request block size: 21573 (max 4096)
5.nginx权限问题failed(13:Permission denied)
6.详解Nginx 13: Permission denied 解决方案
7.django生产环境搭建(uWSGI+django+nginx+python+MySQL)
8.flask使用80端口
9.Flask部署
10.flask部署