下面是详细讲解 "CentOS7部署Flask(Apache、mod_wsgi、Python36、venv)" 的完整攻略。
环境准备
- CentOS7 服务器系统;
- 安装 Apache Web 服务器;
- 安装 Python3.6 版本;
- 安装 mod_wsgi Apache 模块;
- 在系统上创建一个 Python3 的虚拟环境;
Flask 应用程序开发
- 在虚拟环境中安装 Flask 模块及其他必须的 Python 库;
- 编写 Flask 应用程序代码;
- 测试应用程序是否能在本地机器上运行;
部署应用程序到生产环境
- 在 Apache Web 服务器中创建一个虚拟主机;
- 使用 mod_wsgi 连接 Flask 应用程序和 Apache 服务器;
- 在 Apache 中配置虚拟主机;
- 测试应用程序是否能够在生产环境中运行;
示例 1:使用 Flask 的 Hello World 应用程序
环境准备
为了环境搭建请参考上面的环境准备部分。
Flask 应用程序开发
Flask 的 Hello World 应用程序可以在官方文档中找到示例代码。可以在虚拟环境中使用 pip 安装 Flask 模块:
$ source /path/to/venv/bin/activate # 激活虚拟环境
$ pip install flask
在虚拟环境中编写一个名为 "app.py" 的文件,将下面的代码粘贴到文件中:
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello, World!'
部署应用程序到生产环境
在上面所述的环境准备阶段安装好 Apache 和 mod_wsgi 后,可以开始部署应用程序。
以下是将 Flask 应用程序和 Apache 服务器连接的 mod_wsgi 配置文件示例。在 /etc/httpd/conf.d/ 目录下创建一个名为 "myapp.conf" 的文件,将下面的代码粘贴到文件中:
<VirtualHost *:80>
ServerName myapp.lan
DocumentRoot /path/to/myapp/
LogLevel info
ErrorLog /path/to/myapp/logs/error.log
CustomLog /path/to/myapp/logs/access.log combined
WSGIDaemonProcess myapp user=user group=group threads=5 python-path=/path/to/venv/lib/python3.6/site-packages/
WSGIProcessGroup myapp
WSGIScriptAlias / /path/to/myapp/app.wsgi
<Directory /path/to/myapp/>
Require all granted
</Directory>
</VirtualHost>
注意修改 ServerName 和 DocumentRoot 为你的虚拟主机信息,并确认 "WSGIProcessGroup" 的进程组名和 "WSGIScriptAlias" 文件路径与 "app.wsgi" 的文件名一致。
在 /path/to/myapp/ 目录下创建一个名为 "app.wsgi" 的文件,将下面的代码粘贴到文件中:
#!/usr/bin/env python
activate_this = '/path/to/venv/bin/activate_this.py'
with open(activate_this) as file_:
exec(file_.read(), dict(__file__=activate_this))
import sys
sys.path.insert(0, '/path/to/myapp/')
from app import app as application
此文件的作用是用 Python3 环境运行 Flask 应用程序。注意修改 "activate_this","sys.path" 和 "from app" 语句为你的虚拟环境和应用程序的路径。
最后重新启动 Apache 服务器:
$ sudo systemctl restart httpd
现在可以通过浏览器访问你的 Flask 应用程序,使用 "http://myapp.lan/" 的 URL。您应该能够看到 "Hello, World!" 消息。
示例 2:使用 Flask 的数据库应用程序
环境准备
同样,先按照上面的环境准备部分准备好环境。
Flask 应用程序开发
在虚拟环境中使用 pip 安装 Flask 模块和 SQLAlchemy 模块:
$ source /path/to/venv/bin/activate # 激活虚拟环境
$ pip install flask sqlalchemy
在虚拟环境中创建一个名为 "app.py" 的文件,将下面的代码粘贴到文件中:
from flask import Flask, render_template, request
from flask_sqlalchemy import SQLAlchemy
app = Flask(__name__)
# 数据库配置
app.config['SQLALCHEMY_DATABASE_URI'] = 'sqlite:////path/to/mydatabase.db'
app.config['SQLALCHEMY_TRACK_MODIFICATIONS'] = False
db = SQLAlchemy(app)
# 用户模型
class User(db.Model):
id = db.Column(db.Integer, primary_key=True)
name = db.Column(db.String(80), unique=True, nullable=False)
email = db.Column(db.String(120), unique=True, nullable=False)
def __repr__(self):
return '<User %r>' % self.name
@app.route('/')
def index():
return render_template('index.html')
@app.route('/users')
def users():
users = User.query.all()
return render_template('users.html', users=users)
@app.route('/add_user', methods=['POST'])
def add_user():
name = request.form['name']
email = request.form['email']
user = User(name=name, email=email)
db.session.add(user)
db.session.commit()
return 'New user added!'
if __name__ == '__main__':
app.run()
在虚拟环境的应用程序目录下创建两个名为 "index.html" 和 "users.html" 的模板文件。
index.html:
<!doctype html>
<html>
<head>
<title>Flask SQL Alchemy Demo</title>
</head>
<body>
<h1>Welcome!</h1>
<p>Please click the link below to view the users in the database.</p>
<p><a href="/users">View Users</a></p>
<hr>
<form action="/add_user" method="post">
<p>Name: <input type="text" name="name"></p>
<p>Email: <input type="text" name="email"></p>
<p><input type="submit" value="Add User"></p>
</form>
</body>
</html>
users.html:
<!doctype html>
<html>
<head>
<title>Flask SQL Alchemy Demo</title>
</head>
<body>
<h1>Users</h1>
<p><a href="/">Home</a></p>
<hr>
<table>
{% for user in users %}
<tr>
<td>{{ user.name }}</td>
<td>{{ user.email }}</td>
</tr>
{% endfor %}
</table>
</body>
</html>
部署应用程序到生产环境
同样,按照上面所述的部署应用程序到生产环境的步骤,将该应用程序部署到生产环境中。
最后重新启动 Apache 服务器:
$ sudo systemctl restart httpd
现在可以通过浏览器访问你的 Flask 数据库应用程序,使用 "http://myapp.lan/" 的 URL。您应该能够看到站点主页,并使用表单添加新用户到数据库中。
以上为 "CentOS7部署Flask(Apache、mod_wsgi、Python36、venv)" 的完整攻略,希望对你有所帮助。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:CentOS7部署Flask(Apache、mod_wsgi、Python36、venv) - Python技术站