1. 首先要明确自己云服务器的内网IP和外网IP
2. 在服务器上建立一个文件夹,此次命名为flask_project。
内建一个flask项目,文件名为main.py(当然,前提是你已经在服务器安装了flask),内容如下:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello_world():
return '<p>hello, world</p>'
if __name__ == '__main__':
app.run(host='0.0.0.0',port=5000)
一定要确保这个flask项目本身没有问题,可以用命令行验证下。没问题就可以ctr-c关掉了。
3. uwsgi部分
安装:
pip3 install uwsgi
可以先用命令行试验下uwsgi是否安装成功。
在项目目录即flask_project目录下,输入以下命令:
uwsgi --socket 0.0.0.0:5000 --protocol=http -w main:app
此时同样可以在浏览器通过访问“外网IP:5000”获得想要的结果。
若要部署,用命令行的方式肯定是不行的。
此时仍然需要在项目同级目录下新建一个ini文件,我取名为uwsgi.ini,这是将命令行参数直接写死到了这个配置文件中,内容如下:
[uwsgi]
socket = **.**.**.**:5000
; http = **.**.**.**:5000
module = main:app
processes = 2
threads = 2
master = true
此处设计的参数很多,重点说三个,其他可到官网自行查阅。
关于socket和http:
如果只是用uwsgi配置web项目,只需填写http参数(外网ip)即可;如果要配合nginx一起使用,则需要填写socket参数(内网ip)。注意:两个参数不能同时存在。
关于module:
冒号的前部分是指flask运行文件名,即main.py的名称;冒号的后半部分是指flask中的实例名,即Flask实例化出来的实例。
此处配置文件书写妥当后(此时配置应为http参数在列),可通过如下命令开启uwsgi服务:
uwsgi --ini uwsgi.ini
同时附上停止和重启的命令行:
uwsgi --stop uwsgi.pid
uwsgi --reload uwsgi.pid
uwsgi.pid是uwsgi服务开启后自动生成的,里面记录的是uwsgi服务在linux中的进程ID
同时生成的还有一个log文件,记录的自然是各项log内容。
启动后返回如下信息,则说明没什么语法错误,同样可以到浏览器验证一下。
[uWSGI] getting INI configuration from uwsgi.ini
没有问题就继续下一步,如果有问题,就看看log文件里报什么错,按方抓药吧。
4. nginx部分
安装:
apt-get install nginx
安装结束后,默认自动开启nginx服务。可以直接到浏览器访问下“公网IP:80”,如果出现“welcome to nginx”之类的字样,说明安装的没问题。(此处默认你对nginx有一定了解了)
下一步,找到nginx自带的配置文件nginx.conf,具体路径应该在“/etc/nginx”下。
vim打开此文件,找到 http{...} 处
http {
##
# Basic Settings
##
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
# server_tokens off;
# server_names_hash_bucket_size 64;
# server_name_in_redirect off;
include /etc/nginx/mime.types;
default_type application/octet-stream;
##
# SSL Settings
##
ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3; # Dropping SSLv3, ref: POODLE
ssl_prefer_server_ciphers on;
##
# Logging Settings
##
.
.
.
}
在这个花括号内(就写在贴近末端花括号的上一行吧),添加如下代码块:
server {
listen 80;
server_name ***.***.***.***; # 外网IP
location / {
include uwsgi_params;
uwsgi_pass **.**.**.**:5000; # 内网IP:程序端口号
}
}
其中server_name 为你的腾讯云外网IP;uwsgi_pass是你的内网IP,并且要与uwsgi.ini中的socket参数保持一致。
然后重启nginx服务:
/etc/init.d/nginx restart
不出意外的话,到浏览器“外网IP:80”,就能看到flask响应的内容了。
同时奉上nginx停止和启动的命令行:
/etc/init.d/nginx stop
/etc/init.d/nginx start
至此,部署完成。
部分内容参考此文章:使用 uWSGI + Nginx 部署 Flask 应用 - 云+社区 - 腾讯云
鸣谢