【IT工具】Ubuntu 环境下使用 Flask

本文详细介绍在 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 的优势:

  1. 稳定性好:Ubuntu LTS 版本提供长期支持
  2. 社区支持:丰富的文档和社区资源
  3. 易于部署:成熟的部署方案(Nginx + Gunicorn)
  4. 安全性:完善的安全更新机制
  5. 可扩展性:轻松添加缓存、队列等组件

通过遵循上述指南,你可以在 Ubuntu 上快速搭建稳定、高效的 Flask 应用环境。

相关推荐
xqhoj2 小时前
Linux学习指南(二)——进程
linux·运维·服务器
小二·2 小时前
Python Web 开发进阶实战:边缘智能网关 —— 在 Flask + MicroPython 中构建轻量级 IoT 边缘推理平台
前端·python·flask
猫猫的小茶馆2 小时前
【Linux 驱动开发】三. 应用程序调用驱动过程分析
linux·arm开发·驱动开发·stm32·单片机·嵌入式硬件·pcb工艺
yangSnowy2 小时前
Linux实用命令分析nginx系统日志文件
linux·运维·服务器
无级程序员2 小时前
clickhouse创建用户,登录出错的问题,code 516
linux·服务器·clickhouse
wkd_0072 小时前
【交叉编译 | arm版Ubuntu】arm版Ubuntu(飞腾平台)开发环境、交叉编译工具安装
linux·arm开发·ubuntu·aarch64-linux·arm交叉编译工具
菜鸟厚非3 小时前
如何在 Nginx 中配置 HTTPS - Linux
linux·nginx·https
biter00883 小时前
Ubuntu 上搜狗输入法突然“消失 / 只能英文”的排查与修复教程
linux·数据库·ubuntu
WinyQ03 小时前
【DeepStream】整合出现的问题
linux·运维·网络