温馨提示×

CentOS Python项目如何构建

小樊
44
2025-12-15 19:10:12
栏目: 编程语言

CentOS 上构建与部署 Python 项目的实用流程

一 环境准备与 Python 安装

  • 更新系统并安装基础工具与编译依赖(适用于 CentOS 7/8):
    • 安装 EPEL 与编译依赖:sudo yum install -y epel-release gcc gcc-c++ make wget zlib-devel bzip2-devel openssl-devel ncurses-devel sqlite-devel readline-devel tk-devel gdbm-devel libpcap-devel xz-devel libffi-devel
  • 安装 Python 3(两种常用方式,二选一或并存):
    • 方式 A(系统仓库):sudo yum install -y python3 python3-pip
    • 方式 B(SCL 获取新版本,如 Python 3.8):sudo yum install -y centos-release-scl && sudo yum install -y rh-python38 && scl enable rh-python38 bash
    • 方式 C(源码编译,指定版本如 3.8.7):
      • wget https://www.python.org/ftp/python/3.8.7/Python-3.8.7.tar.xz
      • tar -xvJf Python-3.8.7.tar.xz && cd Python-3.8.7
      • ./configure --prefix=/usr/local/python3 && make -j$(nproc) && sudo make altinstall
      • 建立软链:sudo ln -sfn /usr/local/python3/bin/python3.8 /usr/bin/python3 && sudo ln -sfn /usr/local/python3/bin/pip3.8 /usr/bin/pip3
  • 验证:python3 -V 与 pip3 -V 应显示对应版本。

二 项目构建与依赖管理

  • 建议使用虚拟环境隔离依赖:
    • python3 -m venv venv && source venv/bin/activate
  • 使用 requirements.txt 管理依赖:
    • pip install -U pip wheel
    • pip install -r requirements.txt
    • 生成锁定文件:pip freeze > requirements.txt
  • 常见问题与处理:
    • 编译/安装包时报错缺少头文件(如 zlib、openssl、libffi):安装对应 -devel 包后重试
    • CentOS 7 自带 SQLite 版本较旧,若 Django 报 “SQLite 3.8.3 or later is required”,可升级系统 SQLite 或使用外部数据库(如 PostgreSQL/MySQL)。

三 以 WSGI 服务器运行与进程守护

  • 选择 Gunicorn(通用 WSGI)或 uWSGI(高并发/与 Nginx 配合佳)运行应用:
    • Gunicorn(示例):pip install gunicorn;gunicorn -w 4 -b 127.0.0.1:8000 your_app:app
    • uWSGI(示例 ini):在项目根目录创建 uwsgi.ini
      • [uwsgi]
        • chdir=/path/to/app
        • module=your_app.wsgi:application
        • master=true
        • processes=4
        • socket=127.0.0.1:8000
        • chmod-socket=666
        • vacuum=true
        • die-on-term=true
        • logto=/var/log/uwsgi/your_app.log
      • 启动:uwsgi --ini uwsgi.ini
  • 使用 systemd 托管进程(示例服务 /etc/systemd/system/your_app.service):
    • [Unit]
      • Description=Your Python App
      • After=network.target
    • [Service]
      • User=your_user
      • Group=www-data
      • WorkingDirectory=/path/to/app
      • Environment=“PATH=/path/to/app/venv/bin”
      • ExecStart=/path/to/app/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 your_app:app
      • Restart=always
    • [Install]
      • WantedBy=multi-user.target
    • 启用:sudo systemctl daemon-reload && sudo systemctl enable --now your_app
    • 如需使用 uWSGI 托管,可将 ExecStart 换为:/path/to/app/venv/bin/uwsgi --ini /path/to/app/uwsgi.ini

四 反向代理与防火墙配置

  • 使用 Nginx 作为反向代理与静态资源服务:
    • 安装:sudo yum install -y nginx && sudo systemctl enable --now nginx
    • 站点配置示例(/etc/nginx/conf.d/your_app.conf):
      • server {
        • listen 80;
        • server_name your_domain_or_ip;
        • 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/app/static/;
        • }
      • }
    • 重载:sudo nginx -s reload
  • 防火墙放行(firewalld):
    • sudo firewall-cmd --permanent --add-service=http --add-service=https
    • 或放行指定端口:sudo firewall-cmd --permanent --add-port=80/tcp --add-port=443/tcp
    • 重载:sudo firewall-cmd --reload
    • 如部署在云厂商,还需在安全组放行对应端口

五 Docker 化构建与运行

  • 在项目根目录创建 Dockerfile(基于 CentOS 7 示例):
    • FROM centos:7
    • RUN yum install -y epel-release && yum install -y python3 python3-pip && yum clean all
    • WORKDIR /app
    • COPY requirements.txt .
    • RUN pip3 install -r requirements.txt
    • COPY . .
    • CMD [“python3”, “app.py”]
  • 构建与运行:
    • docker build -t my-python-app .
    • docker run --name myapp -p 5000:5000 -d my-python-app
  • 生产建议:多阶段构建、非 root 运行、使用 gunicorn/uwsgi 启动、配置 .dockerignore 减少镜像体积。

0