How to deploy your flask web app to nginx via uWSGI in CentOS?
这是本站第一篇以DevQuickGuide分类的文章。
这一类型的文章将不会解释开发过程中的内部原理,只是提供一个从零开始的操作流程,已达到文章标题的目的。
This is the first article categorized as “DevQuickGuide”.
This kind of articles will not explain how thing works or theories beneath. Build something from the scratch is what this article will help you.
Google translate service will work because I will describe them as basic as possible.
如何在CentOS内安装nginx并通过uWSGI搭载你的flask web app?
操作前准备
- 拥有可以安装操作系统的容器,包括但不限于你的个人电脑,服务器,云实例和虚拟机等;
- 操作系统: CentOS Stream 8。
https://centos.org/centos-stream/
由于笔者使用Intel CPU的主机安装,所以CentOS-Stream-8-x86_64-20210302-dvd1.iso将会被下载用于安装。
开始
1.安装CentOS Stream 8
- 通过操作前准备内下载的操作系统安装盘为第一个启动选项启动容器。
- 屏幕出现安装选项时直接按回车。
- 根据屏幕提供系统安装界面完成系统安装。
非虚拟机或云实例安装请注意:
- root不要启用,但是密码请设置并记住。(root密码在这篇教程不会被使用。)
- 对于新手,请务必创建一个管理员账户。在创建账户的时候请勾选“该账户拥有管理员权限”。
- 如果你不太熟悉直接在Console或者SSH操作,请务必使用GUI(安装默认选项),即使这将导致容器计算资源被浪费。
2.安装需要的依赖包
- 使用你的管理员账户登录系统。
- 点击屏幕左上角的CentOS图标,在上方的搜索框输入”Terminal”,点击“终端”并运行。
- 在“终端”输入以下命令:
sudo yum -y upgrade
请阅读完“sudo使用约法三章”后输入你的管理员账户密码。(root密码在这篇教程不会被使用。)sudo yum -y install gcc gcc-c++ automake autoconf libtool make libffi-devel pcre-devel zlib-devel openssl openssl-devel
上面的命令从”gcc”开始至”openssl-devel”都是依赖包的名称。
3.下载并安装Python 3.9.2
新开“终端”内输入如下命令下载tgz包:
wget https://www.python.org/ftp/python/3.9.2/Python-3.9.2.tgz
输入如下命令解压tgz包:
tar -zxvf Python-3.9.2.tgz
输入如下命令安装Python-3.9.2,在每一条命令输入并执行完成后输入下一条命令:
sudo mkdir /usr/local/python3.9.2
cd Python-3.9.2
./configure --prefix=/usr/local/python3.9.2 --enable-optimizations
make
sudo make install
sudo make clean
sudo ln -s /usr/local/python3.9.2/bin/python3 /usr/bin/python3.9.2
sudo python3.9.2 -m pip install --upgrade pip
请注意:
- 不要试图删除CentOS内置的python3,也不要在软连接时将原有python3替代,这将导致gnome-terminal在下次登录后无法运行且GUI和yum会崩溃。
- make这一步将会花相当长的时间,如果你只是尝试,第三步内的第三条语句可以改成如下命令:
./configure --prefix=/usr/local/python3.9.2
4.下载并安装nginx 1.19.7
新开“终端”内输入如下命令下载tgz包:
wget http://nginx.org/download/nginx-1.19.7.tar.gz
输入如下命令解压tgz包:
tar -zxvf nginx-1.19.7.tar.gz
输入如下命令安装nginx 1.19.7,在每一条命令输入并执行完成后输入下一条命令:
cd nginx-1.19.7
./configure
make
sudo make install
sudo make clean
5.配置Python环境
安装virtualenv。新开“终端”内输入如下命令:
sudo python3 -m pip install --upgrade pip
sudo python3 -m pip install virtualenv
这个操作步骤通过系统的python3安装的。尝试过使用之前安装的Python 3.9.2,但是没有成功。创建一个文件夹来生成自己的环境。新开“终端”内输入如下命令:
mkdir flask_test
cd flask_test
virtualenv -p /usr/bin/python3.9.2 env3.9
进入环境并安装Python依赖包。在上一步的“终端”内输入如下命令:
source env3.9/bin/activate #激活生成的环境
python3.9.2 -m pip install flask
python3.9.2 -m pip install uwsgi
python3.9.2 -m pip install <所有你的flask web app需要的依赖包>
如果你还没有写过flask web app或者你的web app只需要Python基本库和flask就可以,那么请忽略上面这条命令。deactivate #退出生成的环境
写一段示例Python脚本。
CentOS Stream 8内置vim和nano,如果你这两个都不会,请到网上查一下,对于vim和nano的使用方法,这里不赘述。
脚本内容如下:1
2
3
4
5
6
7
8
9
10from flask import Flask
app = Flask(__name__)
def test():
return 'Hello World!'
if __name__ == '__main__':
app.run()保存在上文的flask_test目录内。
写一个uWSGI的配置文件。
配置文件内容如下:1
2
3
4
5
6
7
8
9[uwsgi]
socket = 127.0.0.1:8749
home = /home/<当前登录用户名>/flask_test/env3.9
wsgi-file = /home/<当前登录用户名>/flask_test/<你的脚本文件.py>
callable = app
processes = 1
threads = 1
buffer-size = 32768
master = true保存在上文的flask_test目录内。
请注意:
- socket内的端口请不要设置成80和443,因为nginx将会使用这些端口。
- processes以下的内容均可以自己定义数字以达到性能调优。
6.配置nginx
- nginx的配置文件位置在/usr/local/nginx/conf/nginx.conf,使用sudo 编辑器打开这个配置文件。
修改nginx.conf内涉及到server 80端口的配置,修改内容如下:
1
2
3
4
5
6
7
8server {
listen 80;
server_name localhost;
location / {
include /usr/local/nginx/conf/uwsgi_params;
uwsgi_pass 127.0.0.1:8749;
}
}请注意:
uwsgi_pass内的值应该和上一步uWSGI配置文件内的socket值相同。
7.启动uWSGI和nginx
- 打开两个“终端”窗口。第一个用于启动uWSGI。
- 在第一个终端窗口输入如下命令:
source env3.9/bin/activate
uwsgi <第六步创建的配置文件名>
- 不要关闭第一个终端窗口,在第二个终端窗口输入如下命令:
sudo /usr/local/nginx/sbin/nginx
8.完成!
你可以在CentOS Stream 8内直接用Firefox来查看自己部署的Web App,只要在地址栏输入localhost即可。
如果你需要能够在内网内其他设备尝试,请在CentOS Stream 8内将防火墙设置成允许http和https服务并重新启动防火墙即可。
EOF.