在 Rocky Linux 9 上使用 Gunicorn 和 Nginx 安装 Flask |
欢迎阅读本指南,了解如何在 Rocky Linux 9 上使用 Gunicorn 和 Nginx 安装 Flask。但在深入讨论这个问题的核心之前,我们需要了解一些事情。
编程是当今科技世界的一个基本概念。它可以定义为用计算机可以理解和执行的一组指令编写代码。 Python 是最常用的编程语言之一。它用于自动化、机器学习、软件和网站开发、数据科学等
Flask 是一个 Python 模块,有助于简化 Python 的 Web 开发。它之所以受到青睐,是因为它的灵活性和可扩展性提供了无数的内置模块,使开发过程变得非常容易。开发人员能够使用单个文件开发 Web 应用程序。 Flask 基于Jinja 模板引擎,它使用熟悉的 Python 概念(例如循环、列表、变量等)构建 HTML 页面。
Flask 可用于国内和企业公司。这些公司包括 LinkedIn、Reddit、Uber、Netflix、Pinterest、Uber、Airbnb、Mailgun、PythonAnyWhere 等。 Flask 广泛用于:
- 天气应用
- 反馈表
- 休息API应用程序
- 博客应用程序
- 部署机器学习模型
- 投资组合网站
- 社交网络网络应用程序
让我们深入了解一下!
#1.安装所需的组件
此设置需要多个软件包。其中一些在 EPEL 存储库中提供,需要使用以下命令启用:
sudo dnf install epel-release
在 Ropcky Linux 9 上启用 EPEL 存储库后,安装 Python 包管理器 (PIP)、编译器以及 Gunicorn 所需的 Python 开发包。
sudo yum install python3-pip python3-devel gcc
代理还需要 Nginx Web 服务器:
sudo dnf install nginx -y
#2.创建Python环境
这里需要 Python 环境来保护我们的 python 项目。首先,使用 PIP 安装 virtualenv
软件包。
sudo pip3 install virtualenv
接下来,创建项目目录:
sudo mkdir /sample_project && cd /sample_project
sudo chmod 777 /sample_project
现在创建项目环境并激活它:
virtualenv projectenv
source projectenv/bin/activate
#3。创建 Flask 应用程序
在创建应用程序之前,我们需要安装 Flask 和 Gunicorn。这可以通过执行命令来实现:
pip3 install gunicorn flask
现在创建应用程序:
vim /sample_project/hello.py
下面是一个简单的应用程序代码,其中 Flask 已作为 Python 模块导入以初始化 Web 应用程序。
from flask import Flask
application = Flask(__name__)
@application.route("/")
def hello():
return "<h1 style='color:chocolate'>Hello World! Flask is stupefying!</h1>"
if __name__ == "__main__":
application.run(host='0.0.0.0')
当在端口 5000 上查询根域时,将提供此 Web 应用程序。允许此端口通过防火墙:
sudo firewall-cmd --add-port=5000/tcp --permanent
sudo firewall-cmd --reload
使用以下命令测试应用程序:
$ python hello.py
WARNING: This is a development server. Do not use it in a production deployment. Use a production WSGI server instead.
* Serving Flask app 'hello'
* Debug mode: off
* Running on all addresses (0.0.0.0)
WARNING: This is a development server. Do not use it in a production deployment.
* Running on http://127.0.0.1:5000
* Running on http://192.168.205.12:5000 (Press CTRL+C to quit)
使用提供的 URL 在浏览器上访问应用程序,验证该应用程序是否正常工作
#4。为 Flask 配置 Gunicorn
为了让 Gunicorn 与应用程序交互,我们需要创建一个 WSGI 入口点。
vim /sample_project/wsgi.py
从创建的应用程序导入 Flask 实例。
from hello import application
if __name__ == "__main__":
application.run()
保存文件并允许端口 8080 通过防火墙:
sudo firewall-cmd --add-port=8080/tcp --permanent
sudo firewall-cmd --reload
现在测试 Gunicorn 在所需端口 (8080) 上为应用程序提供服务的能力。
cd /sample_project
gunicorn --bind 0.0.0.0:8080 wsgi
使用提供的端口访问网络上的应用程序:
使用CTRL+C 关闭实例并停用虚拟环境。
deactivate
#5。管理 Flask 应用程序
我们需要创建一个 systemd 服务文件,它将在每次系统启动时自动启动 Gunicorn 并为 Flask 应用程序提供服务。
sudo vim /etc/systemd/system/web-app.service
该文件将包含以下行:
[Unit]
Description=The Gunicorn instance to serve Flask Project
After=network.target
[Service]
User=nginx
Group=nginx
WorkingDirectory=/sample_project
Environment="PATH=/sample_project/projectenv/bin"
ExecStart=/sample_project/projectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock -m 007 wsgi
[Install]
WantedBy=multi-user.target
在上述文件中,将 /sample_project 替换为项目的正确路径。我们还设置 Gunicorn 创建一个名为 myproject.sock 的 Unix 套接字,umask 值为 007,允许 Nginx 组 t 访问它。
设置文件并配置 SELinux 以使路径可访问。
sudo chcon -R -t bin_t /sample_project/projectenv/bin/
重新加载系统守护进程
sudo systemctl daemon-reload
启动并启用应用程序在启动时自动启动:
sudo systemctl start web-app
sudo systemctl enable web-app
确认服务是否按需要运行:
$ systemctl status web-app
● web-app.service - The Gunicorn instance to serve Flask Project
Loaded: loaded (/etc/systemd/system/web-app.service; enabled; vendor preset: disabled)
Active: active (running) since Thu 2022-08-04 15:05:51 CEST; 7s ago
Main PID: 31603 (gunicorn)
Tasks: 4 (limit: 23441)
Memory: 61.0M
CPU: 370ms
CGroup: /system.slice/web-app.service
├─31603 /sample_project/projectenv/bin/python /sample_project/projectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock ->
├─31604 /sample_project/projectenv/bin/python /sample_project/projectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock ->
├─31605 /sample_project/projectenv/bin/python /sample_project/projectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock ->
└─31606 /sample_project/projectenv/bin/python /sample_project/projectenv/bin/gunicorn --workers 3 --bind unix:myproject.sock
#6。配置 Nginx Web 服务器
我们需要配置 Nginx 来代理传递 HTTP 请求,并指示 Gunicorn 捕获有关客户端的一些信息。
sudo vim /etc/nginx/conf.d/sampleapp.conf
在文件中,添加以下行;
server {
listen 80;
server_name server_domain_or_IP;
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:/sample_project/myproject.sock;
}
}
在该文件中,替换 server_domain_or_IP 和 Unix 套接字路径 /sample_project/myproject.sock。
现在允许 Nginx 访问 Gunicorn sock:
sudo semanage permissive -a httpd_t
另外,允许 Nginx 访问项目目录:
sudo chgrp -R nginx /sample_project/
验证配置的语法:
$ 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
允许 HTTP 端口通过防火墙:
sudo firewall-cmd --add-port=80/tcp --permanent
sudo firewall-cmd --reload
现在访问 URL http://IP_Address 或 http://domain_name
判决
我们系统地介绍了如何在 Rocky Linux 9 上安装带有 Gunicorn 和 Nginx 的 Flask。此处收集的知识可用于创建和使用带有 Gunicorn 和 Nginx 的任何其他 Flask 应用程序。我希望这很重要。
查看更多:
学习面向对象编程的最佳书籍
如何在 Rocky Linux 8/CentOS 8 上安装 NetBox IPAM
在 CentOS 8/CentOS 7 上安装 Python 3.9