CentOS Python项目部署完整流程
首先确保系统已安装Python 3和pip(Python包管理工具),这是部署的基础:
sudo yum install -y python3 python3-pip
验证安装结果:
python3 --version # 查看Python版本(建议3.6+)
pip3 --version # 查看pip版本
若未安装python3-venv(Python 3虚拟环境工具),需额外安装:
sudo yum install -y python3-venv
虚拟环境可隔离项目依赖,避免全局环境污染:
# 进入项目目录
mkdir my_python_project && cd my_python_project
# 创建虚拟环境(Python 3自带venv模块)
python3 -m venv venv
# 激活虚拟环境(激活后命令行前会显示(venv))
source venv/bin/activate
激活后,后续所有pip安装的包都会存放在venv目录中。
将项目依赖列表(requirements.txt)复制到项目目录,通过pip安装所有依赖:
# 生成requirements.txt(若已有则跳过)
pip freeze > requirements.txt
# 安装依赖(从requirements.txt读取)
pip install -r requirements.txt
requirements.txt示例(包含常见Python包及版本):
Flask==2.3.3
gunicorn==21.2.0
requests==2.31.0
根据项目类型选择合适的启动工具(以Flask为例):
直接运行(仅测试用):
python app.py # 替换为你的主程序文件(如main.py、app.py)
默认监听127.0.0.1:5000,仅本地可访问。
使用Gunicorn(生产推荐):
Gunicorn是Python WSGI HTTP服务器,性能优于直接运行:
pip install gunicorn # 若未在requirements.txt中
gunicorn -w 4 -b 127.0.0.1:8000 app:app # -w指定工作进程数,-b指定绑定地址
其中app:app表示app.py文件中的app对象(Flask应用实例)。
让应用随系统启动,并在崩溃后自动重启:
# 创建服务文件
sudo vim /etc/systemd/system/my_python_app.service
写入以下内容(根据实际情况修改路径和用户):
[Unit]
Description=My Python Application
After=network.target
[Service]
User=your_username # 替换为你的系统用户名(如centos)
Group=your_group # 替换为用户组(如centos)
WorkingDirectory=/path/to/my_python_project # 项目绝对路径
ExecStart=/path/to/my_python_project/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always # 崩溃后自动重启
[Install]
WantedBy=multi-user.target
保存后执行以下命令启用并启动服务:
sudo systemctl daemon-reload # 重新加载systemd配置
sudo systemctl start my_python_app # 启动服务
sudo systemctl enable my_python_app # 设置开机自启
查看服务状态:
sudo systemctl status my_python_app
允许外部访问应用端口(如8000),若使用Nginx反向代理则只需放行80/443端口:
# 开放8000端口(TCP)
sudo firewall-cmd --permanent --add-port=8000/tcp
sudo firewall-cmd --reload # 重新加载防火墙规则
验证端口是否开放:
sudo firewall-cmd --list-ports
使用Nginx作为反向代理,提升安全性(隐藏应用端口)、支持HTTPS和负载均衡:
# 安装Nginx
sudo yum install -y nginx
# 启动Nginx并设置开机自启
sudo systemctl start nginx
sudo systemctl enable nginx
编辑Nginx配置文件(如/etc/nginx/conf.d/my_python_app.conf):
server {
listen 80;
server_name your_domain.com; # 替换为你的域名或IP
location / {
proxy_pass http://127.0.0.1:8000; # 转发到Gunicorn监听的地址
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配置语法并重载:
sudo nginx -t # 测试配置是否正确
sudo systemctl reload nginx # 重载Nginx
此时可通过http://your_domain.com访问应用。
http://your_domain.com(或服务器IP),查看应用是否正常响应。sudo journalctl -u my_python_app -f # 查看Systemd服务日志
tail -f /path/to/my_python_project/logs/app.log # 若应用有自己的日志文件
若需要更便捷的环境隔离和扩展性,可使用Docker:
Dockerfile:FROM python:3.9-slim
WORKDIR /app
COPY . .
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8000
CMD ["gunicorn", "-w 4", "-b 0.0.0.0:8000", "app:app"]
docker build -t my_python_app .
docker run -d -p 8000:8000 --name my_app_container my_python_app
127.0.0.1:8000(同上)。