杰瑞科技汇

Ubuntu如何搭建Python服务器?

  1. 原生 Python http.server (适用于快速测试和静态文件)
  2. 使用 Flask 框架 (适用于构建小型 Web 应用)
  3. 使用 Gunicorn + Nginx (适用于生产环境,高性能)

准备工作:安装 Python 和 Pip

在开始之前,请确保你的 Ubuntu 系统已经安装了 Python 和包管理工具 pip

Ubuntu如何搭建Python服务器?-图1
(图片来源网络,侵删)
  1. 更新软件包列表

    sudo apt update
  2. 安装 Python 和 pip Ubuntu 22.04 及更高版本默认安装了 Python 3,我们直接安装 pipvenv (虚拟环境工具)。

    sudo apt install python3-pip python3-venv -y
  3. 验证安装

    python3 --version  # 应该显示 Python 3.x.x
    pip3 --version     # 应该显示 pip 的版本

使用 Python 内置 http.server

这是最简单的方法,无需安装任何第三方库,适合临时分享文件、测试静态网站或快速启动一个简单的服务器。

Ubuntu如何搭建Python服务器?-图2
(图片来源网络,侵删)

优点

  • 开箱即用,无需额外安装。
  • 非常适合快速验证代码或共享目录。

缺点

  • 功能非常有限,不适合处理动态请求。
  • 性能较差,不适合生产环境。
  • 不安全,直接暴露在公网上有风险。

步骤:

  1. 创建一个测试目录和文件

    mkdir my_test_server
    cd my_test_server
    echo "<h1>Hello from Python Server!</h1>" > index.html
  2. 启动服务器my_test_server 目录下,运行以下命令,这会在 8000 端口启动一个服务器,监听所有网络接口 (0.0.0)。

    Ubuntu如何搭建Python服务器?-图3
    (图片来源网络,侵删)
    python3 -m http.server 8000 --bind 0.0.0.0

    你会看到类似下面的输出:

    Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...
  3. 访问服务器

    • 在同一台机器上:打开浏览器,访问 http://localhost:8000http://127.0.0.1:8000
    • 在同一局域网内:找到你 Ubuntu 的 IP 地址 (ip a 命令查看),然后用其他设备访问 http://<你的Ubuntu_IP地址>:8000
  4. 停止服务器 在终端按 Ctrl + C 即可停止。


使用 Flask 框架

Flask 是一个轻量级的 Python Web 框架,非常适合构建中小型的 Web 应用和 API。

优点

  • 简单易学,文档清晰。
  • 灵活,可以从小项目扩展到大项目。
  • 功能强大,支持路由、模板、请求处理等。

缺点

  • 默认的开发服务器(flask run)性能不高,不适合生产环境。

步骤:

  1. 创建项目目录和虚拟环境 虚拟环境可以隔离项目依赖,避免包冲突。

    mkdir my_flask_app
    cd my_flask_app
    python3 -m venv venv
    source venv/bin/activate  # 激活虚拟环境
    # 你的命令提示符前面会出现 (venv)
  2. 安装 Flask

    pip install Flask
  3. 编写 Flask 应用 创建一个名为 app.py 的文件:

    # app.py
    from flask import Flask
    app = Flask(__name__)
    @app.route('/')
    def home():
        return "<h1>Hello from Flask Server!</h1><p>This is a running web app.</p>"
    if __name__ == '__main__':
        # 生产环境不要使用这个 debug 模式
        app.run(host='0.0.0.0', port=5000, debug=True)
  4. 运行 Flask 应用 确保虚拟环境已激活,然后运行:

    flask run

    你会看到输出:

     * Running on all addresses (0.0.0.0)
     * Running on http://127.0.0.1:5000
     * Running on http://<你的Ubuntu_IP地址>:5000
  5. 访问服务器 在浏览器中访问 http://<你的Ubuntu_IP地址>:5000

  6. 停止服务器Ctrl + C 停止。


生产环境部署 (Gunicorn + Nginx)

当你准备将应用上线时,Flask 自带的服务器就不够用了,这时,我们需要一个更强大的应用服务器(如 Gunicorn)和一个反向代理服务器(如 Nginx)。

  • Gunicorn: 一个 Python WSGI HTTP 服务器,它可以在你的 Flask 应用和客户端之间高效地处理请求。
  • Nginx: 一个高性能的反向代理和 Web 服务器,它接收来自外部的所有请求,然后将它们转发给 Gunicorn,它还可以处理静态文件(CSS, JS, 图片)、负载均衡和提供 HTTPS。

优点

  • 高性能:Gunicorn 和 Nginx 的组合性能远超 Flask 开发服务器。
  • 高并发:能同时处理大量请求。
  • 安全性:Nginx 作为屏障,隐藏了 Gunicorn 的细节。
  • 稳定性:Gunicorn 可以在后台运行,并管理多个工作进程。

步骤:

  1. 安装 Gunicorn 和 Nginx

    # 安装 Gunicorn
    pip install gunicorn
    # 安装 Nginx
    sudo apt install nginx -y
  2. 使用 Gunicorn 运行 Flask 应用 确保你在 my_flask_app 目录下并且虚拟环境已激活,我们告诉 Gunicorn 去运行 app.py 文件中的 app 这个应用实例。

    gunicorn --bind 0.0.0.0:8000 app:app

    --bind 0.0.0.0:8000 指定监听所有网络接口的 8000 端口。 app:app 第一个 appapp.py 文件名,第二个 app 是文件中的 Flask 实例名。

    你的应用已经在 8000 端口上运行,但直接暴露在外,我们需要 Nginx 来做代理。

  3. 配置 Nginx Nginx 的配置文件在 /etc/nginx/sites-available/ 目录下,我们创建一个新的配置文件。

    sudo nano /etc/nginx/sites-available/my_flask_app

    粘贴进去,请将 server_name 替换为你的域名或公网 IP。

    server {
        listen 80;
        server_name your_domain.com; # 替换成你的域名或公网IP
        location / {
            # 将所有请求转发给 Gunicorn
            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;
        }
    }
  4. 启用 Nginx 配置 创建一个符号链接来启用这个站点配置。

    sudo ln -s /etc/nginx/sites-available/my_flask_app /etc/nginx/sites-enabled/
  5. 测试并重启 Nginx 测试配置文件是否有语法错误,然后重启 Nginx 服务。

    sudo nginx -t
    # 如果显示 syntax is ok 和 test is successful,则继续
    sudo systemctl restart nginx
  6. 访问服务器 你可以直接通过浏览器访问 http://your_domain.comhttp://<你的Ubuntu_IP地址>,Nginx 会在幕后将你的请求转发给在 8000 端口运行的 Gunicorn。

  7. 让 Gunicorn 在后台运行 (使用 Systemd) 手动运行 Gunicorn 会在终端关闭后停止,我们使用 systemd 来让它作为服务在后台运行。

    • 创建一个 systemd 服务文件:

      sudo nano /etc/systemd/system/my_flask_app.service
    • 粘贴以下内容。请务必修改 User, Group, WorkingDirectory, 和 ExecStart 的路径为你自己的实际路径。

      [Unit]
      Description=Gunicorn instance to serve my_flask_app
      After=network.target
      [Service]
      User=your_username  # 替换成你的用户名
      Group=www-data
      WorkingDirectory=/home/your_username/my_flask_app # 替换成你的项目绝对路径
      Environment="PATH=/home/your_username/my_flask_app/venv/bin" # 替换成你的虚拟环境路径
      ExecStart=/home/your_username/my_flask_app/venv/bin/gunicorn --workers 3 --bind 127.0.0.1:8000 app:app
      [Install]
      WantedBy=multi-user.target
    • 启动并启用服务:

      sudo systemctl start my_flask_app
      sudo systemctl enable my_flask_app # 开机自启
    • 检查服务状态:

      sudo systemctl status my_flask_app

你的 Flask 应用已经作为一个稳定的服务在后台运行了!

方法 适用场景 优点 缺点
Python http.server 快速测试、共享文件 极简,无需安装 功能弱,性能差,不安全
Flask 开发服务器 本地开发、小型项目 开发便捷,功能完整 不适合生产环境,性能低
Gunicorn + Nginx 生产环境部署 高性能,高并发,安全稳定 配置相对复杂

对于任何正式的项目,强烈推荐使用 方法三 (Gunicorn + Nginx) 的部署方式,它遵循了现代 Web 应用的最佳实践,能够保证你的服务稳定、高效地运行。

分享:
扫描分享到社交APP
上一篇
下一篇