在 CentOS 7 这款稳定且广泛使用的服务器操作系统上部署 Python Web 应用是一个常见的需求,Flask,作为一个轻量级且功能强大的 Web 框架,因其灵活性和易上手性而备受青睐,本文将详细介绍如何在 CentOS 7 系统上,遵循最佳实践,一步步安装并配置 Flask 开发环境。
环境准备与系统更新
在开始任何安装之前,首先确保我们的系统是最新的,这可以修复已知的安全漏洞并确保所有软件包的兼容性,通过 SSH 连接到您的 CentOS 7 服务器,执行以下命令来更新系统:
sudo yum update -y
CentOS 7 默认自带的是 Python 2.7,该版本已于 2020 年停止官方支持,为了获得更好的性能、安全性和对新库的支持,我们强烈推荐使用 Python 3,接下来的步骤将围绕 Python 3 展开。
安装 Python 3 与 pip
CentOS 7 的官方软件源中包含了 Python 3,我们可以通过 yum
直接安装,我们还需要安装 pip
,这是 Python 的包管理工具,用于安装和管理第三方库,包括 Flask。
sudo yum install python3 python3-pip -y
安装完成后,可以通过以下命令验证 Python 3 和 pip3 的版本,以确保它们已正确安装:
python3 --version pip3 --version
您应该会看到类似 Python 3.6.x
和 pip 9.x.x from /usr/lib/python3.6/site-packages (python 3.6)
的输出,这表明 Python 3 环境已经准备就绪。
创建并激活虚拟环境
在 Python 开发中,使用虚拟环境是一个至关重要的最佳实践,它可以为每个项目创建一个隔离的、独立的 Python 环境,这样做的好处是,不同项目的依赖包(项目 A 需要 Flask 1.0,项目 B 需要 Flask 2.0)不会相互冲突,同时也不会污染系统的全局 Python 环境。
为我们的 Flask 项目创建一个专门的目录,并进入该目录:
mkdir my_flask_project cd my_flask_project
使用 venv
模块创建一个名为 venv
的虚拟环境:
python3 -m venv venv
这个命令会在当前目录下创建一个名为 venv
的文件夹,其中包含了 Python 解释器、pip 等工具的副本。
激活这个虚拟环境:
source venv/bin/activate
激活后,您会注意到命令行提示符的前面出现了 (venv)
字样,这表明您当前正处于虚拟环境中,在此环境中,所有通过 pip
安装的包都将被限制在 venv
文件夹内,不会影响系统。
安装 Flask
在激活的虚拟环境中,安装 Flask 变得非常简单,只需使用 pip
命令即可:
pip install Flask
pip
会自动从 Python 包索引下载并安装最新版本的 Flask 及其依赖项,安装完成后,可以通过 pip list
或 pip freeze
查看已安装的包,确认 Flask 是否在列表中。
pip list | grep Flask
创建并运行第一个 Flask 应用
环境配置完毕,现在让我们创建一个简单的 “Hello, World” 应用来验证一切是否正常工作。
在 my_flask_project
目录下,创建一个名为 app.py
的文件,并使用您喜欢的文本编辑器(如 vi
或 nano
)添加以下内容:
from flask import Flask # 创建 Flask 应用实例 app = Flask(__name__) # 定义路由及视图函数 @app.route('/') def hello_world(): return '<h1>Hello, Flask on CentOS 7!</h1>' # 确保在直接运行此脚本时启动开发服务器 if __name__ == '__main__': # host='0.0.0.0' 使服务器可以从外部网络访问 app.run(host='0.0.0.0', port=5000)
保存并退出文件,在终端中运行这个应用:
python app.py
如果一切顺利,您将看到类似以下的输出,表示 Flask 开发服务器已经启动:
* Serving Flask app 'app'
* Running on http://0.0.0.0:5000/ (Press CTRL+C to quit)
配置防火墙
Flask 应用正在服务器的 5000 端口上运行,CentOS 7 默认的防火墙可能阻止了外部访问,为了让您的客户端机器(例如您自己的电脑)能够通过浏览器访问这个应用,我们需要在防火墙中开放 5000 端口。
CentOS 7 使用 firewalld
作为防火墙管理工具,执行以下命令来永久开放 TCP 5000 端口:
sudo firewall-cmd --zone=public --add-port=5000/tcp --permanent
重新加载防火墙配置使更改生效:
sudo firewall-cmd --reload
您可以使用以下命令验证端口是否已成功开放:
sudo firewall-cmd --list-ports
如果输出中包含 5000/tcp
,那么配置就成功了,打开您的浏览器,访问 http://<您的服务器IP地址>:5000
,您应该能看到页面上显示着 “Hello, Flask on CentOS 7!”。
至此,您已经成功在 CentOS 7 上搭建了一个功能完整的 Flask 开发环境,虽然这适用于开发和测试,但在生产环境中,建议使用更强大的 WSGI 服务器(如 Gunicorn 或 uWSGI)配合反向代理(如 Nginx)来部署您的 Flask 应用,以获得更高的性能和稳定性。
相关问答FAQs
问题 1:为什么我必须使用虚拟环境?直接用 sudo pip3 install flask
安装到系统全局不行吗?
解答: 虽然技术上可以这样做,但强烈不推荐,原因主要有三点:
- 依赖冲突:如果您未来要开发另一个需要不同版本 Flask(或其他库)的项目,全局安装会导致版本冲突,使得两个项目无法在同一台服务器上正常运行。
- 系统污染:将项目依赖安装到系统全局的 Python 环境中,会污染系统环境,可能干扰系统工具的正常运行,并且难以管理和清理。
- 权限与安全:使用
sudo
安装包需要管理员权限,这增加了误操作破坏系统的风险,虚拟环境在用户主目录下操作,无需sudo
,更加安全。
虚拟环境为每个项目提供了一个干净、隔离的“沙盒”,是 Python 社区公认的最佳实践。
问题 2:我运行了 python app.py
,但在自己的电脑上无法访问,只能在服务器上用 localhost
或 0.0.1
访问,这是为什么?
解答: 这个问题通常由两个原因之一导致:
- Flask 应用绑定地址错误:默认情况下,一些 Flask 的启动方式可能只会绑定到
0.0.1
,这意味着它只接受来自服务器本地的连接,为了让外部网络可以访问,您必须在app.run()
中明确指定host='0.0.0.0'
。0.0.0
是一个特殊的地址,它告诉服务器监听所有可用的网络接口。 - 服务器防火墙未开放:即使 Flask 应用监听了所有接口,CentOS 7 的
firewalld
防火墙默认会阻止所有未明确允许的入站连接,您必须按照本文中的步骤,使用firewall-cmd
命令开放 Flask 应用所使用的端口(如 5000 端口),否则外部请求会被防火墙拦截。
请依次检查这两点,通常就能解决无法从外部访问的问题。
【版权声明】:本站所有内容均来自网络,若无意侵犯到您的权利,请及时与我们联系将尽快删除相关内容!
发表回复