在开始之前,请确保你具备以下条件:
Ubuntu 20.04 和更高版本默认安装了 Python 3,但如果你的系统上没有安装,可以手动安装它:
1 2 |
sudo apt update sudo apt install python3 python3-pip python3-venv -y |
安装完成后,可以通过以下命令验证 Python 和 pip 是否正确安装:
1 2 |
python3 --version pip3 --version |
你应该看到类似下面的输出:
1 2 |
Python 3.8.10 pip 21.1.2 |
1 |
sudo apt install mysql-server -y |
1 2 |
sudo systemctl start mysql sudo systemctl enable mysql |
登录MySQL以确认安装成功。
1 |
sudo mysql -u root -p |
MySQL默认密码是root,直接登录即可。
1 |
ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'new_password'; |
这里我们用SQL语句把项目需要的数据库建好即可。
为了避免全局安装 Python 包和依赖,可以使用 Python 的虚拟环境来管理项目的依赖。
在应用程序的目录中,运行以下命令创建虚拟环境:
1 |
python3 -m venv myenv |
这将创建一个名为 myenv 的虚拟环境。
在创建完虚拟环境后,需要激活它:
1 |
source myenv/bin/activate |
激活虚拟环境后,你会看到终端提示符前缀变为 (myenv),表示虚拟环境已激活。
将应用程序文件上传到生产服务器,确保所有的源代码文件和 requirements.txt 文件都已上传。
通过 requirements.txt 文件安装依赖。
1 |
pip install -r requirements.txt |
进入到应用程序目录,并运行 Python 应用,确保它能够正常启动:
1 |
python3 app.py |
如果应用运行正常,会显示应用访问地址以及端口号。
为了将外部请求转发到 Python 应用,通常使用 Nginx 作为反向代理。
如果 Nginx 尚未安装,使用以下命令安装:
1 2 |
sudo apt update sudo apt install nginx -y |
打开 Nginx 配置文件并编辑反向代理设置:
1 |
sudo nano /etc/nginx/sites-available/default |
在 server 块中,配置反向代理,将请求转发到 Python 应用所在的端口(假设 Python 应用运行在 8000 端口):
1 2 3 4 5 6 7 8 9 10 11 12 |
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; } } |
保存并退出编辑器。
执行以下命令测试 Nginx 配置是否正确:
1 |
sudo nginx -t |
如果配置正确,输出应该显示 syntax is okay 和 test is successful。
重新加载 Nginx 以应用配置:
1 |
sudo systemctl reload nginx |
为了确保 Python 应用在系统重启后自动启动,你可以创建一个 systemd 服务文件。
创建一个新的服务文件:
1 |
sudo nano /etc/systemd/system/python-app.service |
添加以下内容:
1 2 3 4 5 6 7 8 9 10 11 12 13 |
[Unit] Description=Python Application After=network.target
[Service] User=your_user Group=your_group WorkingDirectory=/path/to/your/app ExecStart=/path/to/your/app/myenv/bin/python3 /path/to/your/app/app.py Restart=always
[Install] WantedBy=multi-user.target |
1 2 3 |
sudo systemctl daemon-reload sudo systemctl start python-app.service sudo systemctl enable python-app.service |
1 |
sudo systemctl status python-app.service |
确认应用程序是否在后台运行并监听正确的端口。
如果你的服务器启用了防火墙(例如 UFW),确保允许 HTTP(80 端口)和你的应用程序使用的端口(例如 8000)通过防火墙:
1 2 |
sudo ufw allow 80 sudo ufw allow 8000 |
在部署完成后,访问你配置的服务器域名或 IP 地址,检查 Python 应用是否通过 Nginx 正常提供服务。
通过本教程,我们成功地在 Ubuntu 上部署了一个 Python 应用,包括环境准备、依赖管理、配置反向代理、设置系统服务以及日志管理等步骤。这种部署方式非常适合生产环境,能够确保应用程序在系统重启后自动启动,并且能够通过 Nginx 处理高并发的外部请求。