温馨提示×

Ubuntu Python如何部署应用

小樊
55
2025-10-04 00:17:43
栏目: 编程语言

1. 准备工作
确保Ubuntu服务器已更新至最新版本,并安装基础工具(如curlgitvim)。若需特定Python版本(如3.8、3.11),可通过sudo apt install python3.8sudo add-apt-repository ppa:deadsnakes/ppa && sudo apt install python3.11安装。

2. 创建并激活虚拟环境
虚拟环境可隔离项目依赖,避免全局污染。在项目目录下执行:

python3 -m venv myenv  # 创建虚拟环境
source myenv/bin/activate  # 激活(终端提示符前缀变为(myenv))

激活后,后续操作均在虚拟环境中进行。

3. 安装项目依赖
将本地项目的requirements.txt(包含Python包列表)上传至服务器,然后在虚拟环境中安装:

pip install -r requirements.txt  # 安装所有依赖(如Flask、Django、Gunicorn)

若未生成requirements.txt,可通过pip freeze > requirements.txt在本地生成。

4. 运行应用(开发/生产环境)

  • 开发环境:直接使用框架内置服务器(仅用于调试,不推荐生产):
    • Flask:python app.py run --host=0.0.0.0 --port=5000
    • Django:python manage.py runserver 0.0.0.0:8000
  • 生产环境:使用Gunicorn(WSGI服务器)提升性能:
    pip install gunicorn  # 安装Gunicorn
    gunicorn --workers 4 --bind 0.0.0.0:8000 app:app  # 示例:4个worker,绑定8000端口(app.py中应用对象为app)
    
    其中--workers根据CPU核心数调整(通常为2*CPU核心数+1),app:app表示app.py文件中的应用对象。

5. 配置Nginx反向代理(可选但推荐)
Nginx可作为反向代理,处理静态文件、负载均衡及SSL加密,提升应用性能与安全性。

  • 安装Nginx:sudo apt install nginx -y
  • 创建配置文件:sudo nano /etc/nginx/sites-available/myapp,添加以下内容(替换your_domain_or_ip和端口):
    server {
        listen 80;
        server_name your_domain_or_ip;  # 替换为域名或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;
        }
        # 可选:处理静态文件(需在应用中设置STATIC_ROOT)
        location /static/ {
            alias /path/to/your/app/static/;
        }
    }
    
  • 启用配置:sudo ln -s /etc/nginx/sites-available/myapp /etc/nginx/sites-enabled/
  • 测试并重启Nginx:sudo nginx -t && sudo systemctl restart nginx

6. 设置Systemd服务(可选但推荐)
Systemd可确保应用在服务器重启后自动启动,并监控进程状态。

  • 创建服务文件:sudo nano /etc/systemd/system/myapp.service,添加以下内容(替换路径、用户及端口):
    [Unit]
    Description=My Python Application
    After=network.target
    
    [Service]
    User=your_username  # 替换为服务器用户名(如ubuntu)
    Group=www-data    # 通常用www-data(Nginx用户)
    WorkingDirectory=/path/to/your/app  # 替换为项目路径
    Environment="PATH=/path/to/your/app/myenv/bin"  # 虚拟环境路径
    ExecStart=/path/to/your/app/myenv/bin/gunicorn --workers 4 --bind unix:/run/myapp.sock app:app  # 使用Unix socket(更安全)
    Restart=always    # 崩溃后自动重启
    
    [Install]
    WantedBy=multi-user.target
    
  • 启动并启用服务:sudo systemctl daemon-reload && sudo systemctl start myapp && sudo systemctl enable myapp
  • 查看状态:sudo systemctl status myapp(若显示active (running)则表示成功)。

7. (可选)使用Docker部署
Docker可将应用及其依赖打包为容器,实现环境一致性。

  • 创建Dockerfile(在项目根目录):
    FROM python:3.9-slim  # 使用轻量级Python镜像
    WORKDIR /app
    COPY . .  # 复制项目文件
    RUN pip install --no-cache-dir -r requirements.txt  # 安装依赖
    CMD ["gunicorn", "--bind", "0.0.0.0:8000", "app:app"]  # 启动Gunicorn
    
  • 构建镜像:docker build -t my-python-app .
  • 运行容器:docker run -d -p 8000:8000 --name myapp my-python-app-d表示后台运行,-p映射端口)。

8. 验证部署

  • 若使用Nginx:在浏览器访问http://your_domain_or_ip,应看到应用页面。
  • 若使用Docker:通过curl http://localhost:8000(服务器本地)或http://your_server_ip:8000(外部)验证。

注意事项

  • 生产环境中,建议开启HTTPS(通过Let’s Encrypt免费证书),配置Nginx的ssl_certificatessl_certificate_key
  • 定期备份项目文件与数据库,避免数据丢失。
  • 监控应用日志(journalctl -u myapp或Nginx的access.log/error.log),及时排查问题。

0