第198集:Python项目服务器部署
课程目标
- 了解服务器部署的基本概念
- 掌握Linux服务器的基本操作
- 学会配置Web服务器(Nginx)
- 掌握应用服务器(Gunicorn/uWSGI)的配置
- 学会部署Python Web应用
- 了解数据库的服务器部署
一、服务器部署基础
1.1 什么是服务器部署?
服务器部署是将开发完成的Python应用程序安装到服务器上,使其能够被用户访问的过程。
1.2 部署的基本流程
- 选择服务器环境
- 配置服务器基础环境
- 部署应用程序
- 配置Web服务器和应用服务器
- 配置数据库
- 测试和监控
1.3 常用的服务器架构
用户 → 防火墙 → Web服务器(Nginx/Apache)→ 应用服务器(Gunicorn/uWSGI)→ Python应用 → 数据库二、Linux服务器基础
2.1 Linux服务器的选择
- Ubuntu Server: 最受欢迎的Linux服务器发行版,易于使用和维护
- CentOS/RHEL: 企业级Linux发行版,稳定性好
- Debian: 稳定、安全的Linux发行版
2.2 连接Linux服务器
# 使用SSH连接服务器
ssh username@server_ip_address2.3 基本Linux命令
# 更新系统包
apt update && apt upgrade -y
# 创建用户
sudo adduser username
# 授予sudo权限
sudo usermod -aG sudo username
# 查看文件和目录
ls -la
# 创建目录
mkdir directory_name
# 查看进程
ps aux
# 查看端口占用
netstat -tuln三、配置Python环境
3.1 安装Python
# Ubuntu 20.04及以上
sudo apt install python3 python3-pip python3-venv
# 检查Python版本
python3 --version
pip3 --version3.2 创建虚拟环境
# 创建虚拟环境
python3 -m venv myenv
# 激活虚拟环境
source myenv/bin/activate
# 退出虚拟环境
deactivate3.3 安装依赖
# 激活虚拟环境后
pip install -r requirements.txt四、Web服务器配置(Nginx)
4.1 安装Nginx
# 安装Nginx
sudo apt install nginx
# 启动Nginx
sudo systemctl start nginx
# 设置开机自启
sudo systemctl enable nginx
# 检查Nginx状态
sudo systemctl status nginx4.2 配置Nginx作为反向代理
# 创建配置文件
sudo nano /etc/nginx/sites-available/myapp配置内容:
server {
listen 80;
server_name your_domain.com;
location / {
proxy_pass http://127.0.0.1:8000;
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;
}
location /static/ {
alias /path/to/your/app/static/;
expires 30d;
}
location /media/ {
alias /path/to/your/app/media/;
expires 30d;
}
}4.3 启用配置
# 启用配置
sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
# 测试配置
sudo nginx -t
# 重启Nginx
sudo systemctl restart nginx五、应用服务器配置
5.1 Gunicorn(推荐用于Flask/Django)
# 安装Gunicorn
pip install gunicorn
# 基本运行
cd /path/to/your/app
gunicorn --bind 0.0.0.0:8000 wsgi:app # Flask应用
# 或
gunicorn --bind 0.0.0.0:8000 myproject.wsgi # Django应用5.2 uWSGI(另一种选择)
# 安装uWSGI
pip install uwsgi
# 基本运行
uwsgi --http :8000 --module wsgi:app # Flask应用5.3 使用systemd管理应用
# 创建服务文件
sudo nano /etc/systemd/system/myapp.service服务文件内容:
[Unit]
Description=My Python Application
After=network.target
[Service]
User=yourusername
Group=www-data
WorkingDirectory=/path/to/your/app
Environment="PATH=/path/to/your/app/myenv/bin"
ExecStart=/path/to/your/app/myenv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 wsgi:app
Restart=always
[Install]
WantedBy=multi-user.target启用服务:
# 启用服务
sudo systemctl enable myapp
# 启动服务
sudo systemctl start myapp
# 查看服务状态
sudo systemctl status myapp六、数据库部署
6.1 MySQL的部署
# 安装MySQL
sudo apt install mysql-server
# 安全配置
sudo mysql_secure_installation
# 登录MySQL
sudo mysql
# 创建数据库和用户
CREATE DATABASE mydatabase CHARACTER SET utf8mb4 COLLATE utf8mb4_unicode_ci;
CREATE USER 'myuser'@'localhost' IDENTIFIED BY 'mypassword';
GRANT ALL PRIVILEGES ON mydatabase.* TO 'myuser'@'localhost';
FLUSH PRIVILEGES;6.2 PostgreSQL的部署
# 安装PostgreSQL
sudo apt install postgresql postgresql-contrib
# 登录PostgreSQL
sudo -u postgres psql
# 创建数据库和用户
CREATE DATABASE mydatabase;
CREATE USER myuser WITH PASSWORD 'mypassword';
ALTER ROLE myuser SET client_encoding TO 'utf8';
ALTER ROLE myuser SET default_transaction_isolation TO 'read committed';
ALTER ROLE myuser SET timezone TO 'Asia/Shanghai';
GRANT ALL PRIVILEGES ON DATABASE mydatabase TO myuser;七、部署Python Web应用
7.1 部署前的准备
- 确保应用能够在本地正常运行
- 创建requirements.txt文件
- 配置环境变量
- 准备静态文件和媒体文件
7.2 部署流程
# 1. 更新系统
sudo apt update && sudo apt upgrade -y
# 2. 安装必要的软件
sudo apt install nginx python3-pip python3-venv git
# 3. 创建项目目录
sudo mkdir -p /var/www/myapp
cd /var/www/myapp
# 4. 克隆项目代码
git clone https://github.com/yourusername/myapp.git .
# 5. 创建虚拟环境
python3 -m venv venv
# 6. 激活虚拟环境并安装依赖
source venv/bin/activate
pip install -r requirements.txt
# 7. 配置环境变量
cp .env.example .env
# 编辑.env文件配置数据库等信息
# 8. 运行数据库迁移(如果需要)
python manage.py migrate # Django
# 或 flask db upgrade # Flask
# 9. 收集静态文件(Django)
python manage.py collectstatic
# 10. 配置Gunicorn/systemd服务
# 参考前面的systemd配置
# 11. 配置Nginx
# 参考前面的Nginx配置
# 12. 重启服务
sudo systemctl restart myapp
sudo systemctl restart nginx八、HTTPS配置
8.1 安装Certbot
# 安装Certbot
sudo apt install certbot python3-certbot-nginx
# 获取SSL证书
sudo certbot --nginx -d your_domain.com
# 自动更新证书
sudo certbot renew --dry-run8.2 配置HTTPS
Certbot会自动更新Nginx配置,启用HTTPS。
九、监控和维护
9.1 日志管理
# 查看Nginx日志
tail -f /var/log/nginx/access.log
tail -f /var/log/nginx/error.log
# 查看应用日志
sudo journalctl -u myapp -f9.2 进程监控
# 查看运行的进程
top
htop
# 查看端口占用
netstat -tuln
ss -tuln9.3 定期备份
# 备份数据库
mysqldump -u myuser -p mydatabase > mydatabase_backup.sql
pg_dump -U myuser mydatabase > mydatabase_backup.sql
# 备份项目文件
tar -czf myapp_backup.tar.gz /var/www/myapp十、常见问题和解决方案
10.1 502 Bad Gateway错误
- 检查应用服务器是否在运行
- 检查应用服务器的监听端口
- 检查防火墙设置
10.2 静态文件无法访问
- 检查Nginx的静态文件配置
- 检查静态文件的权限
- 检查静态文件的路径
10.3 数据库连接错误
- 检查数据库是否在运行
- 检查数据库用户名和密码
- 检查数据库的权限设置
- 检查数据库的监听地址
10.4 应用运行缓慢
- 增加应用服务器的workers数量
- 优化数据库查询
- 使用缓存
- 增加服务器资源
十一、总结
Python项目的服务器部署是一个复杂但重要的过程,通过本节课的学习,您应该掌握了:
- Linux服务器的基本操作
- Nginx Web服务器的配置
- Gunicorn应用服务器的配置
- Python Web应用的部署流程
- 数据库的服务器部署
- 监控和维护的基本方法
下一节课,我们将学习Python项目的持续集成。