更新时间:2023-01-15 15:49:18浏览次数:280+次
本文介绍如何在RockyLinux8/AlmaLinux8系统上安装配置Flask和Gunicorn的方法。
操作步骤
步骤1、安装所需的软件包
我们将首先安装所需的软件包。其中一些软件包在需要启用的EPEL存储库中提供:
sudo dnf -y install epel-release
现在安装所需的包,包括Python包管理器(PIP)、编译器和Gunicorn所需的Python开发包:
sudo dnf install python3-pip python3-devel gcc -y
您还需要安装Nginx,它将用于代理:
sudo dnf install nginx -y
步骤2、创建Python环境
为了将此项目与系统上其他可用的Python项目隔离,需要虚拟Python环境。使用PIP安装virtualenv:
sudo pip3 install virtualenv
为Flask项目创建目录:
sudo su -
mkdir /myproject && cd /myproject
为Python需求创建虚拟环境:
virtualenv projectenv
此命令在projectenv目录中启动PIP和Python的副本。激活环境:
source projectenv/bin/activate
步骤3、配置Flask应用程序
一旦环境被激活,我们将使用Flask创建Python应用程序。首先安装Flask和Gunicorn,如下所示:
pip3 install gunicorn flask
继续使用Flask创建应用程序。作为Python模块存在的Flask可以很容易地导入并用于初始化web应用程序。
例如,在本文中,我们将创建一个应用程序,如下所示:
vim /myproject/hello.py
添加代码并将Flask作为模块导入。例如:
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "<h1 style='color:green'>Hello World, Flask is amazing!</h1>"
if __name__ == "__main__":
application.run(host='0.0.0.0')
这是一个简单的网页,当查询根域时将显示内容。允许端口5000通过防火墙:
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reload
通过发出以下命令测试应用程序:
$ python hello.py
* Serving Flask app 'hello' (lazy loading)
* Environment: production
WARNING: This is a development server. Do not use it in a production deployment.
Use a production WSGI server instead.
* Debug mode: off
* Running on all addresses.
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://192.168.205.2:5000/ (Press CTRL+C to quit)
在web服务器上,使用显示的端口,您应该能够看到:
步骤4、配置Gunicorn
我们将创建一个WSGI入口点,指导Gunicorn如何与我们创建的应用程序交互。此文件将按如下方式创建:
vim /myproject/wsgi.py
我们只需导入Flask实例:
from hello import application
if __name__ == "__main__":
application.run()
保存文件并验证Gunicorn是否能够为应用程序提供服务。允许端口8080通过防火墙:
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
我们将指定要使用的接口和端口。例如:
cd /myproject
gunicorn --bind 0.0.0.0:8080 wsgi
现在使用URL访问页面,地址格式是http://IP_Address:8080,如下图所示:
我们已经验证了Gunicorn的功能。现在按CTRL+C并停用虚拟环境:
deactivate
步骤5、创建系统服务文件
为了能够在系统启动时自动启动Gunicorn并为Flask应用程序提供服务,我们需要创建一个systemd服务文件。
可以按如下所示创建服务文件:
sudo vim /etc/systemd/system/myapp.service
在文件中,定义以下行:
[Unit]
Description=The Gunicorn instance to serve Flask Project
After=network.target
[Service]
WorkingDirectory=/myproject
Environment="PATH=/myproject/projectenv/bin"
ExecStart=/myproject/projectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi
[Install]
WantedBy=multi-user.target
记住用步骤2中创建的项目的实际路径替换/myproject。Gunicorn将创建一个名为myproject.sock的Unix套接字,其umask值为007。保存文件并配置SELinux,以访问上面的路径:
chcon -R -t bin_t /myproject/projectenv/bin/
重新加载系统守护程序:
sudo systemctl daemon-reload
启动并使服务在启动时自动启动:
sudo systemctl start myapp
sudo systemctl enable myapp
验证服务是否正在运行:
$ systemctl status myapp
步骤6、配置Nginx代理
Nginx web服务器用于代理传递HTTP请求。我们还将为Gunicorn捕获额外的HTTP头,以获取有关客户端的一些信息。
由于Nginx已经安装,请为应用程序创建Virtualhost文件:
sudo vim /etc/nginx/conf.d/myapp.conf
在文件中,添加以下行:
server {
listen 80;
server_name myapp.example.com;
location / {
proxy_set_header Host $http_host;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header X-Forwarded-Proto $scheme;
proxy_pass http://unix:/myproject/myproject.sock;
}
}
请记住,在上述步骤中,用创建Unix套接字替换server_domain_or_IP和/myproject/myproject.sock。
保存文件并允许Nginx组在项目目录中执行命令:
sudo chgrp -R nginx /myproject/
现在检查Nginx配置的语法:
$ sudo nginx -t
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful
启动并启用Nginx:
sudo systemctl start nginx
sudo systemctl enable nginx
配置SELinux以避免错误“连接到上游时Nginx权限被拒绝(Nginx Permission denied while connecting to upstream)”。这允许Nginx访问Gunicorn sock:
sudo dnf install policycoreutils-python-utils -y
sudo semanage permissive -a httpd_t
允许端口80通过防火墙:
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload
使用URL访问应用程序,地址格式为http://domain_name,如下图所示:
至此,凭以上内容,现在就可以用于创建使用Gunicorn和Nginx的Flask应用程序。更可贵的是,Flask是一个轻量级且功能强大的Python模块,可用于开发web应用程序,而不必担心结构和设计。
相关资讯