将 Flask 项目发布到公共网络,部署到云服务器
使用的是阿里云的学生机
简要说明一下针对本文的环境情况:
系统:Ubuntu18.04 Server
Python:Python3.6.7
pip:pip 19.1.1
uwsgi:2.0.18
Flask:1.0.3
1.安装nginx和uwsgi
安装uwsgi
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple uwsgi
uwsgi通过uwsgi --version输出相应版本号则安装成功
uwsgi --version
安装nginx
apt install nginx
启动nginx
service nginx start
然后再浏览器地址栏输入IP:80
然后显示Welcome to nginx!
,代表成功。
2.安装Flask
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple flask
创建测试项目及文件
from flask import Flask
app = Flask(__name__)
@app.route('/')
def index():
return "<h1 style='color:red'>hello world!</h1>"
if __name__ == '__main__':
app.run(host='0.0.0.0', debug=True)
测试运行demo
python3 main.py
文件结构:
root@ltmshing:~# cd /root/flaskdemo/
root@ltmshing:~/flaskdemo# ls
main.py myapp.log restart templates uwsgi.ini
main.py.cp nohup.out static top
root@ltmshing:~/flaskdemo#
3.配置uwsgi和nginx
创建一个uwsgi.ini
文件
cd /root/flaskdemo/
vim uwsgi.ini
写入以下信息
[uwsgi]
master = true
wsgi-file = main.py
callable = app
socket = 127.0.0.1:8001
processes = 4
threads = 2
buffer-size = 32768
wsgi-file = xxx.py
xxx对应flask项目的启动文件。
配置Nginx
修改nginx的配置文件/etc/nginx/sites-available/default
server {
listen 80; # 监听端口,http默认80
server_name _; # 因为我是在本地虚拟机的测试所以这样写,如果是远程服务则填写域名或者公网IP
location / {
include uwsgi_params; # 使用nginx内置的uwsgi配置参数文件
uwsgi_pass 127.0.0.1:8001; # 转发请求到该地址端口
uwsgi_param UWSGI_SCRIPT main:app; # 调用的脚本名称和application变量名
}
# 如果网站有静态文件夹,则放在这里。
# location /static {
# alias /static; # 项目的static文件夹
# }
}
ps:注意更改静态文件路径
还有一种配置如下图:
检查nginx配置文件是否有错误nginx -t
结束uwsgi服务sudo pkill -f uwsgi -9
重启nginx服务sudo service nginx restart
重新启动uwsgi服务uwsgi uwsgi.ini
在浏览器输入IP:80
或IP
即可访问到之前的helloworld页面
ps: 让程序在后台运行,关闭终端仍然运行 nohup uwsgi uwsgi.ini &
4.遇到的问题
nginx静态资源文件无法访问,403 forbidden错误
解决办法:
网上查询后说是权限问题,更改nginx.conf
的第一行
将#user nobody;
改为 user root;
保存,再次重启 nginx 服务,访问成功
ps:nginx.conf的地址为
vim /etc/nginx/nginx.conf
修改为重启nginx即可。
上一篇: C++:买鸡的问题