写点什么

Python 进阶 - 在 Ubuntu 上部署 Flask 应用

作者:Damon小智
  • 2025-01-19
    江苏
  • 本文字数:2177 字

    阅读完需:约 7 分钟

Python进阶-在Ubuntu上部署Flask应用

随着云计算和容器化技术的普及,Linux 服务器已成为部署 Web 应用程序的主流平台之一。Python 作为一种简单易用的编程语言,适用于开发各种应用程序。本文将详细介绍如何在 Ubuntu 服务器上部署 Python 应用,包括环境准备、应用发布、配置反向代理(Nginx)、设置系统服务以及日志管理等步骤。



一、部署准备

在开始之前,请确保你具备以下条件:


  • 一台运行 Ubuntu(如 Ubuntu 20.04 或 22.04)的服务器,具有 SSH 访问权限。

  • Python 应用程序的代码,确保在本地能够正常运行。



二、安装 Python 环境

1. 安装 Python 3

Ubuntu 20.04 和更高版本默认安装了 Python 3,但如果你的系统上没有安装,可以手动安装它:


sudo apt updatesudo apt install python3 python3-pip python3-venv -y
复制代码


  • python3:安装 Python 3 解释器。

  • python3-pip:安装 Python 包管理工具。

  • python3-venv:安装虚拟环境支持。

2. 验证 Python 安装

安装完成后,可以通过以下命令验证 Python 和 pip 是否正确安装:


python3 --versionpip3 --version
复制代码


你应该看到类似下面的输出:


Python 3.8.10pip 21.1.2
复制代码



三、安装 MySQL(如需)

1. 安装 MySQL 服务器

sudo apt install mysql-server -y
复制代码

2. 启动并设置 MySQL 开机自启

sudo systemctl start mysqlsudo systemctl enable mysql
复制代码

3. 验证 MySQL 安装

登录 MySQL 以确认安装成功。


sudo mysql -u root -p
复制代码


MySQL 默认密码是 root,直接登录即可。

4. 修改初始密码

ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password';
复制代码

5. 创建库和表

这里我们用 SQL 语句把项目需要的数据库建好即可。



四、创建虚拟环境

为了避免全局安装 Python 包和依赖,可以使用 Python 的虚拟环境来管理项目的依赖。

1. 创建虚拟环境

在应用程序的目录中,运行以下命令创建虚拟环境:


python3 -m venv myenv
复制代码


这将创建一个名为 myenv 的虚拟环境。

2. 激活虚拟环境

在创建完虚拟环境后,需要激活它:


source myenv/bin/activate
复制代码


激活虚拟环境后,你会看到终端提示符前缀变为 (myenv),表示虚拟环境已激活。



五、发布 Python 应用

1. 上传项目文件

将应用程序文件上传到生产服务器,确保所有的源代码文件和 requirements.txt 文件都已上传。

2. 安装项目依赖

通过 requirements.txt 文件安装依赖。


pip install -r requirements.txt
复制代码

3. 启动项目

进入到应用程序目录,并运行 Python 应用,确保它能够正常启动:


python3 app.py
复制代码


如果应用运行正常,会显示应用访问地址以及端口号。



六、配置 Nginx 作为反向代理(可选)

为了将外部请求转发到 Python 应用,通常使用 Nginx 作为反向代理。

1. 安装 Nginx

如果 Nginx 尚未安装,使用以下命令安装:


sudo apt updatesudo apt install nginx -y
复制代码

2. 配置 Nginx

打开 Nginx 配置文件并编辑反向代理设置:


sudo nano /etc/nginx/sites-available/default
复制代码


server 块中,配置反向代理,将请求转发到 Python 应用所在的端口(假设 Python 应用运行在 8000 端口):


server {    listen 80;    server_name your_domain_or_ip;
location / { proxy_pass http://127.0.0.1:8000; # 将请求转发到 Python 应用 proxy_set_header Host $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; }}
复制代码


保存并退出编辑器。

3. 测试 Nginx 配置

执行以下命令测试 Nginx 配置是否正确:


sudo nginx -t
复制代码


如果配置正确,输出应该显示 syntax is okaytest is successful

4. 重新加载 Nginx

重新加载 Nginx 以应用配置:


sudo systemctl reload nginx
复制代码



七、设置系统服务(可选)

为了确保 Python 应用在系统重启后自动启动,你可以创建一个 systemd 服务文件。

1. 创建 systemd 服务文件

创建一个新的服务文件:


sudo nano /etc/systemd/system/python-app.service
复制代码


添加以下内容:


[Unit]Description=Python ApplicationAfter=network.target
[Service]User=your_userGroup=your_groupWorkingDirectory=/path/to/your/appExecStart=/path/to/your/app/myenv/bin/python3 /path/to/your/app/app.pyRestart=always
[Install]WantedBy=multi-user.target
复制代码


  • UserGroup:设置为运行应用程序的用户和组。

  • WorkingDirectory:指向应用程序的目录。

  • ExecStart:指向 Python 虚拟环境中的 Python 解释器和应用程序入口。

2. 重新加载 systemd 配置并启动服务

sudo systemctl daemon-reloadsudo systemctl start python-app.servicesudo systemctl enable python-app.service
复制代码

3. 检查服务状态

sudo systemctl status python-app.service
复制代码


确认应用程序是否在后台运行并监听正确的端口。



八、配置防火墙

如果你的服务器启用了防火墙(例如 UFW),确保允许 HTTP(80 端口)和你的应用程序使用的端口(例如 8000)通过防火墙:


sudo ufw allow 80sudo ufw allow 8000
复制代码



九、测试部署

在部署完成后,访问你配置的服务器域名或 IP 地址,检查 Python 应用是否通过 Nginx 正常提供服务。



十、总结

通过本教程,我们成功地在 Ubuntu 上部署了一个 Python 应用,包括环境准备、依赖管理、配置反向代理、设置系统服务以及日志管理等步骤。这种部署方式非常适合生产环境,能够确保应用程序在系统重启后自动启动,并且能够通过 Nginx 处理高并发的外部请求。

用户头像

Damon小智

关注

每天进步一点点 2023-07-21 加入

个人开发者

评论

发布
暂无评论
Python进阶-在Ubuntu上部署Flask应用_Python_Damon小智_InfoQ写作社区