本文详细介绍在 Ubuntu Linux 系统中安装、配置和使用 Flask 的完整指南。
📋 系统要求
- Ubuntu 18.04 LTS 或更高版本(推荐 20.04/22.04 LTS)
- Python 3.6+(Ubuntu 20.04+ 默认包含 Python 3.8+)
- 终端访问权限
- 基本的 Linux 命令行知识
🚀 安装步骤
1. 更新系统包
bash
# 更新包列表和升级现有包
sudo apt update
sudo apt upgrade -y
# 安装常用工具
sudo apt install -y curl wget git build-essential
2. 安装 Python 和 pip
bash
# 检查Python版本
python3 --version
# Ubuntu 默认已安装Python3,但需要确保pip可用
sudo apt install -y python3-pip python3-venv
# 验证安装
python3 -m pip --version
3. 创建虚拟环境(推荐)
bash
# 创建项目目录
mkdir IT && cd IT
# 创建虚拟环境
python3 -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 终端提示符会显示 (venv),表示虚拟环境已激活
# 要退出虚拟环境:deactivate
4. 安装 Flask
bash
# 在激活的虚拟环境中安装Flask
pip install flask
# 或者安装特定版本
pip install flask==2.3.3
# 验证安装
python3 -c "import flask; print(f'Flask版本: {flask.__version__}')"
🎯 快速开始
基础应用
python
# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
return 'Hello from Ubuntu!'
@app.route('/about')
def about():
return '运行在 Ubuntu 上的 Flask 应用'
if __name__ == '__main__':
# 在 Ubuntu 上,0.0.0.0 允许所有网络接口访问
app.run(host='0.0.0.0', port=5000, debug=True)
运行应用
bash
# 方法1:直接运行
python3 app.py
# 方法2:使用flask命令
export FLASK_APP=app.py
export FLASK_ENV=development
flask run --host=0.0.0.0 --port=5000
# 访问应用:http://localhost:5000 或 http://服务器IP:5000
🔧 Ubuntu 特定配置
1. 配置防火墙(如果启用)
bash
# 检查防火墙状态
sudo ufw status
# 允许5000端口
sudo ufw allow 5000
# 如果需要允许特定IP段
sudo ufw allow from 192.168.1.0/24 to any port 5000
2. 设置环境变量(持久化)
bash
# 编辑 ~/.bashrc 或 ~/.bash_profile
nano ~/.bashrc
# 添加以下行
export FLASK_APP="app.py"
export FLASK_ENV="development"
export PYTHONPATH="/path/to/your/app:$PYTHONPATH"
# 使配置生效
source ~/.bashrc
3. 系统服务配置(生产环境)
bash
# 创建 systemd 服务文件
sudo nano /etc/systemd/system/flaskapp.service
ini
[Unit]
Description=Gunicorn instance to serve Flask App
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/myflaskapp
Environment="PATH=/home/ubuntu/myflaskapp/venv/bin"
Environment="FLASK_ENV=production"
ExecStart=/home/ubuntu/myflaskapp/venv/bin/gunicorn --workers 3 --bind unix:myflaskapp.sock -m 007 wsgi:app
[Install]
WantedBy=multi-user.target
📦 常用扩展安装
1. 数据库相关
bash
# 安装MySQL支持
sudo apt install -y libmysqlclient-dev
pip install flask-sqlalchemy pymysql
# 安装PostgreSQL支持
sudo apt install -y libpq-dev
pip install psycopg2-binary flask-sqlalchemy
# SQLite(Python内置,无需额外安装)
2. 开发工具
bash
# 代码格式化
pip install black flake8
# 自动重载(开发用)
pip install watchdog
# 环境变量管理
pip install python-dotenv
3. 生产环境依赖
bash
# WSGI服务器
pip install gunicorn
# 进程管理
pip install supervisor
# 反向代理配置(需要Nginx)
sudo apt install -y nginx
🏗️ 项目结构示例
bash
# 创建标准Flask项目结构
mkdir -p myflaskapp/{app/{static/{css,js,images},templates},tests,instance}
cd myflaskapp
# 创建基本文件
touch app/__init__.py app/routes.py app/models.py app/forms.py
touch app/templates/{base,index}.html
touch requirements.txt config.py wsgi.py .env .gitignore
项目结构说明
myflaskapp/
├── app/ # 应用包
│ ├── __init__.py # 应用工厂
│ ├── routes.py # 路由定义
│ ├── models.py # 数据库模型
│ ├── forms.py # 表单定义
│ ├── static/ # 静态文件
│ │ ├── css/
│ │ ├── js/
│ │ └── images/
│ └── templates/ # 模板文件
│ ├── base.html
│ └── index.html
├── tests/ # 测试文件
├── instance/ # 实例文件夹(配置文件、数据库)
├── venv/ # 虚拟环境
├── requirements.txt # 依赖列表
├── config.py # 配置类
├── wsgi.py # WSGI入口点
├── .env # 环境变量
└── .gitignore # Git忽略文件
🚀 部署到生产环境
1. 使用 Gunicorn
bash
# 安装gunicorn
pip install gunicorn
# 创建wsgi.py
python
# wsgi.py
from app import create_app
app = create_app()
if __name__ == "__main__":
app.run()
bash
# 运行gunicorn
gunicorn -w 4 -b 0.0.0.0:8000 wsgi:app
# 使用socket文件(配合Nginx)
gunicorn --workers 3 --bind unix:/tmp/myflaskapp.sock wsgi:app
2. 配置 Nginx 反向代理
bash
# 创建Nginx配置文件
sudo nano /etc/nginx/sites-available/myflaskapp
nginx
server {
listen 80;
server_name your_domain.com www.your_domain.com;
location / {
include proxy_params;
proxy_pass http://unix:/tmp/myflaskapp.sock;
}
location /static {
alias /home/ubuntu/myflaskapp/app/static;
expires 30d;
}
# 可选:SSL配置
# listen 443 ssl;
# ssl_certificate /etc/letsencrypt/live/your_domain.com/fullchain.pem;
# ssl_certificate_key /etc/letsencrypt/live/your_domain.com/privkey.pem;
}
bash
# 启用站点
sudo ln -s /etc/nginx/sites-available/myflaskapp /etc/nginx/sites-enabled
# 测试Nginx配置
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx
3. 使用 Supervisor 管理进程
bash
# 安装supervisor
sudo apt install -y supervisor
# 创建配置文件
sudo nano /etc/supervisor/conf.d/myflaskapp.conf
ini
[program:myflaskapp]
command=/home/ubuntu/myflaskapp/venv/bin/gunicorn --workers 3 --bind unix:/tmp/myflaskapp.sock wsgi:app
directory=/home/ubuntu/myflaskapp
user=ubuntu
autostart=true
autorestart=true
stderr_logfile=/var/log/myflaskapp.err.log
stdout_logfile=/var/log/myflaskapp.out.log
environment=FLASK_ENV="production"
bash
# 重新加载配置并启动
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myflaskapp
# 查看状态
sudo supervisorctl status
🔍 故障排除
1. 端口占用
bash
# 检查5000端口是否被占用
sudo lsof -i :5000
# 如果被占用,杀死进程或使用其他端口
kill -9 PID
# 或者修改Flask端口
app.run(port=8080)
2. 权限问题
bash
# 文件权限问题
sudo chown -R $USER:$USER /path/to/your/app
chmod -R 755 /path/to/your/app
# socket文件权限(Nginx需要访问)
sudo chmod 777 /tmp/myflaskapp.sock
# 或者更好的方式:确保Nginx用户组有权限
3. 数据库连接问题
bash
# 检查MySQL服务状态
sudo systemctl status mysql
# 检查PostgreSQL服务状态
sudo systemctl status postgresql
# 测试数据库连接
python3 -c "import pymysql; pymysql.connect(host='localhost', user='root', password='yourpass')"
4. 查看日志
bash
# Flask应用日志
tail -f /var/log/myflaskapp.out.log
# Nginx错误日志
sudo tail -f /var/log/nginx/error.log
# Nginx访问日志
sudo tail -f /var/log/nginx/access.log
# Supervisor日志
sudo tail -f /var/log/supervisor/supervisord.log
💡 Ubuntu 最佳实践
1. 安全性建议
bash
# 创建专用用户运行应用
sudo adduser flaskuser
sudo usermod -aG www-data flaskuser
# 设置文件权限
sudo chown -R flaskuser:www-data /path/to/app
sudo chmod -R 750 /path/to/app
# 使用防火墙
sudo ufw enable
sudo ufw allow ssh
sudo ufw allow http
sudo ufw allow https
2. 性能优化
bash
# 安装性能监控工具
sudo apt install -y htop sysstat
# 使用连接池(数据库)
pip install DBUtils
# 启用缓存
pip install Flask-Caching redis
sudo apt install -y redis-server
3. 备份策略
bash
# 创建备份脚本
nano /home/ubuntu/backup_flaskapp.sh
bash
#!/bin/bash
# backup_flaskapp.sh
BACKUP_DIR="/home/ubuntu/backups"
DATE=$(date +%Y%m%d_%H%M%S)
APP_DIR="/home/ubuntu/myflaskapp"
# 备份代码
tar -czf $BACKUP_DIR/flaskapp_code_$DATE.tar.gz $APP_DIR
# 备份数据库(如果使用SQLite)
if [ -f "$APP_DIR/instance/app.db" ]; then
cp $APP_DIR/instance/app.db $BACKUP_DIR/app_db_$DATE.db
fi
# 保留最近7天的备份
find $BACKUP_DIR -type f -mtime +7 -delete
bash
# 添加定时任务
crontab -e
# 每天凌晨3点备份
0 3 * * * /bin/bash /home/ubuntu/backup_flaskapp.sh
📚 有用的命令速查
| 命令 | 用途 |
|---|---|
source venv/bin/activate |
激活虚拟环境 |
deactivate |
退出虚拟环境 |
pip freeze > requirements.txt |
生成依赖文件 |
pip install -r requirements.txt |
安装所有依赖 |
sudo systemctl restart nginx |
重启Nginx |
sudo supervisorctl restart myflaskapp |
重启Flask应用 |
journalctl -u myflaskapp.service -f |
查看systemd服务日志 |
python3 -m py_compile app.py |
检查Python语法 |
gunicorn --workers 4 --bind 0.0.0.0:8000 wsgi:app |
启动生产服务器 |
🎯 快速验证安装
测试脚本
python
# test_flask.py
from flask import Flask
import platform
import os
app = Flask(__name__)
@app.route('/')
def info():
system_info = {
'system': platform.system(),
'release': platform.release(),
'python_version': platform.python_version(),
'flask_version': '2.3.3',
'user': os.getenv('USER'),
'path': os.getcwd()
}
return system_info
if __name__ == '__main__':
app.run(debug=True)
bash
# 运行测试
python3 test_flask.py
# 访问 http://localhost:5000 查看系统信息
总结
在 Ubuntu 上使用 Flask 的优势:
- 稳定性好:Ubuntu LTS 版本提供长期支持
- 社区支持:丰富的文档和社区资源
- 易于部署:成熟的部署方案(Nginx + Gunicorn)
- 安全性:完善的安全更新机制
- 可扩展性:轻松添加缓存、队列等组件
通过遵循上述指南,你可以在 Ubuntu 上快速搭建稳定、高效的 Flask 应用环境。