服务器怎么跑Python项目?

在服务器上运行 Python 项目通常涉及 环境配置、依赖安装、项目部署进程管理。以下是详细步骤:


1. 连接服务器

确保你能通过 SSH 访问服务器:

复制代码
ssh username@your_server_ip

(如果是本地测试,可跳过这一步)


2. 安装 Python 环境

2.1 检查 Python 版本

复制代码
python3 --version  # 或 python --version
  • 如果未安装 Python 3(推荐 3.8+),使用包管理器安装:

    • Ubuntu/Debian

      复制代码
      sudo apt update
      sudo apt install python3 python3-pip python3-venv
    • CentOS/RHEL

      复制代码
      sudo yum install python3 python3-pip

2.2 可选:使用 Pyenv 管理多版本

如果需要特定 Python 版本:

复制代码
curl https://pyenv.run | bash  # 安装 Pyenv
echo 'export PATH="$HOME/.pyenv/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init --path)"' >> ~/.bashrc
echo 'eval "$(pyenv virtualenv-init -)"' >> ~/.bashrc
source ~/.bashrc
pyenv install 3.10.6          # 安装指定版本
pyenv global 3.10.6           # 设为默认

3. 配置虚拟环境(推荐)

避免全局依赖冲突:

复制代码
python3 -m venv myprojectenv  # 创建虚拟环境
source myprojectenv/bin/activate  # 激活(Linux/macOS)
# Windows: myprojectenv\Scripts\activate

激活后,终端提示符会显示 (myprojectenv)


4. 安装项目依赖

4.1 使用 requirements.txt

如果项目有 requirements.txt

复制代码
pip install -r requirements.txt

4.2 手动安装依赖

复制代码
pip install flask django pandas  # 示例

5. 运行 Python 项目

5.1 直接运行脚本

复制代码
python3 app.py  # 替换为你的入口文件

5.2 Web 项目(如 Flask/Django)

  • Flask

    复制代码
    export FLASK_APP=app.py  # 设置环境变量
    flask run --host=0.0.0.0 --port=5000  # 允许外部访问
  • Django

    复制代码
    python manage.py runserver 0.0.0.0:8000

⚠️ 注意 :以上方式仅适合开发环境!生产环境需用 Gunicorn/uWSGI + Nginx(见下文)。


6. 生产环境部署(关键步骤)

6.1 使用 Gunicorn(WSGI 服务器)

安装 Gunicorn:

复制代码
pip install gunicorn

运行 Flask/Django 项目:

复制代码
# Flask
gunicorn -w 4 -b 0.0.0.0:8000 app:app  # app:app 表示模块名:应用实例

# Django
gunicorn -w 4 -b 0.0.0.0:8000 myproject.wsgi:application
  • -w 4:4 个工作进程(根据 CPU 核心数调整)。

6.2 配置 Nginx 反向代理

安装 Nginx:

复制代码
sudo apt install nginx

编辑配置文件(/etc/nginx/sites-available/myproject):

nginx

复制代码
server {
    listen 80;
    server_name your_domain.com;

    location / {
        proxy_pass http://127.0.0.1:8000;  # 转发到 Gunicorn
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

启用配置并重启 Nginx:

复制代码
sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled
sudo nginx -t  # 测试语法
sudo systemctl restart nginx

6.3 使用 Systemd 管理进程

创建 Systemd 服务文件(/etc/systemd/system/myproject.service):

ini

复制代码
[Unit]
Description=Gunicorn for my Python project
After=network.target

[Service]
User=ubuntu
WorkingDirectory=/path/to/your/project
ExecStart=/path/to/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
Restart=always

[Install]
WantedBy=multi-user.target

启动服务:

复制代码
sudo systemctl daemon-reload
sudo systemctl start myproject
sudo systemctl enable myproject  # 开机自启

7. 其他优化

7.1 使用 Supervisor(替代 Systemd)

适合管理多个进程:

复制代码
sudo apt install supervisor

配置(/etc/supervisor/conf.d/myproject.conf):

ini

复制代码
[program:myproject]
command=/path/to/venv/bin/gunicorn -w 4 -b 127.0.0.1:8000 app:app
directory=/path/to/project
user=ubuntu
autostart=true
autorestart=true
stderr_logfile=/var/log/myproject.err.log
stdout_logfile=/var/log/myproject.out.log

启动:

bash

复制代码
sudo supervisorctl reread
sudo supervisorctl update
sudo supervisorctl start myproject

7.2 HTTPS 配置(Certbot)

复制代码
sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d your_domain.com

证书会自动续签。


8. 常见问题

Q1:端口被占用?

复制代码
sudo lsof -i :8000  # 查看占用进程
sudo kill -9 <PID>  # 强制结束

Q2:如何查看日志?

  • Gunicorn 日志:journalctl -u myproject.service

  • Nginx 日志:/var/log/nginx/error.log

Q3:静态文件(CSS/JS)不加载?

在 Nginx 配置中添加:

nginx

复制代码
location /static/ {
    alias /path/to/your/static/files/;
}

Django 需运行:

bash

复制代码
python manage.py collectstatic

按照以上步骤,你的 Python 项目应该能在服务器上稳定运行。如果是高流量场景,可进一步优化:

  • 使用 Docker 容器化部署。

  • 配置 Redis 缓存或 Celery 异步任务。

  • 使用 PM2(Node.js 工具)管理 Python 进程(非主流但可行)。

相关推荐
lczllx5 分钟前
从 TCP 90μs 到 SHM 28μs:我的 RPC 框架零拷贝优化历程
linux·后端
phltxy14 分钟前
LangGraph智能租房助手实践
大数据·人工智能·python·深度学习·语言模型·langchain
码银29 分钟前
放弃了豆包,我使用Python做了一个桌面宠物
python·microsoft·宠物
测功机之家38 分钟前
国内口碑好的测功机公司找哪家
python·物联网
xlrqx1 小时前
2026年平顶山家电清洗培训设备是否齐全依据多因素来判断
大数据·python
发量惊人的中年网工1 小时前
AI服务器托管怎么选机房?GPU集群对机柜、电力和网络的硬要求
服务器·网络·人工智能
盐焗鹌鹑蛋1 小时前
【Linux】权限
linux
窝子面1 小时前
认识Docker与启动容器与镜像的关系
运维·docker·容器
summer_du1 小时前
Qdrant
人工智能·python
logomister设计公司阿燕1 小时前
华为商标“减法哲学”:极简主义如何成就全球品牌?
python·华为