凌峰创科服务平台

Ubuntu如何搭建Python服务器?

我们将使用以下技术栈,这是一个非常流行和强大的组合:

Ubuntu如何搭建Python服务器?-图1
(图片来源网络,侵删)
  • 操作系统: Ubuntu Server (以 22.04 LTS 为例)
  • Python 版本管理: pyenv (推荐,用于管理多个 Python 版本)
  • Web 服务器: Gunicorn (一个 Python WSGI HTTP 服务器)
  • 反向代理: Nginx (用于处理静态文件、SSL 终止和请求转发)
  • WSGI 应用: Flask (一个轻量级的 Python Web 框架,示例用)
  • 进程管理: Systemd (让应用在后台作为服务运行)

第 0 步:准备工作

  1. 购买/准备一台 Ubuntu 服务器:你可以从阿里云、腾讯云、AWS、Vultr 或 DigitalOcean 等服务商购买一台 VPS。
  2. 连接服务器:使用 SSH 连接到你的服务器。
    ssh your_username@your_server_ip
  3. 更新系统:这是良好习惯,确保所有软件包都是最新的。
    sudo apt update && sudo apt upgrade -y

第 1 步:安装基础工具和 Python 环境

1 安装编译工具和依赖

pyenv 需要从源码编译 Python,所以需要先安装编译所需的工具和 Python 的一些依赖库。

sudo apt install -y make build-essential libssl-dev zlib1g-dev \
libbz2-dev libreadline-dev libsqlite3-dev wget curl llvm \
libncursesw5-dev xz-utils tk-dev libxml2-dev libxmlsec1-dev libffi-dev liblzma-dev

2 安装 pyenv

pyenv 是一个极其方便的工具,可以让你在同一台机器上轻松安装和管理多个 Python 版本。

# 克隆 pyenv 仓库
curl https://pyenv.run | bash
# 配置环境变量
echo 'export PYENV_ROOT="$HOME/.pyenv"' >> ~/.bashrc
echo 'command -v pyenv >/dev/null || export PATH="$PYENV_ROOT/bin:$PATH"' >> ~/.bashrc
echo 'eval "$(pyenv init -)"' >> ~/.bashrc
# 重新加载 shell 配置
exec "$SHELL"

3 使用 pyenv 安装 Python

现在我们可以安装一个稳定且最新的 Python 版本,Python 3.11。

# 查找可安装的版本
pyenv install --list
# 安装指定版本 (3.11.4)
pyenv install 3.11.4
# 设置全局默认 Python 版本
pyenv global 3.11.4
# 验证安装
python --version
# 应该输出: Python 3.11.4

第 2 步:创建和配置 Python 项目

1 创建项目目录和虚拟环境

为你的项目创建一个目录,并在其中创建一个虚拟环境。强烈推荐始终在虚拟环境中工作,以避免包冲突。

Ubuntu如何搭建Python服务器?-图2
(图片来源网络,侵删)
# 创建项目目录
sudo mkdir -p /var/www/my_flask_app
sudo chown -R $USER:$USER /var/www/my_flask_app  # 将所有权给你自己
cd /var/www/my_flask_app
# 创建虚拟环境
python -m venv venv
# 激活虚拟环境
source venv/bin/activate
# 你的终端提示符前面会出现 (venv),表示虚拟环境已激活

2 安装项目依赖

我们将创建一个简单的 Flask 应用,所以需要安装 Flaskgunicorn

# 在虚拟环境中安装
pip install --upgrade pip
pip install flask gunicorn

3 编写 Flask 应用

创建一个名为 app.py 的文件。

nano app.py

将以下代码粘贴进去:

# app.py
from flask import Flask
app = Flask(__name__)
@app.route('/')
def hello():
    return "<h1>Hello from a Python App on Ubuntu!</h1><p>This is served by Gunicorn and Nginx.</p>"
if __name__ == "__main__":
    # 注意:这个 run() 仅用于开发,生产环境用 Gunicorn
    app.run()

4 测试应用(开发模式)

在虚拟环境中运行 Flask 的开发服务器来确保它能工作。

Ubuntu如何搭建Python服务器?-图3
(图片来源网络,侵删)
# 确保虚拟环境已激活
# source venv/bin/activate
# 运行应用
FLASK_APP=app.py flask run --host=0.0.0.0 --port=5000

在你的浏览器中访问 http://your_server_ip:5000,你应该能看到 "Hello from a Python App on Ubuntu!" 的消息。

测试成功后,按 Ctrl+C 停止开发服务器。


第 3 步:使用 Gunicorn 部署应用

Gunicorn 是一个生产级的 WSGI 服务器,它会运行你的 Python 应用并处理 HTTP 请求。

1 用 Gunicorn 运行应用

在项目根目录下(虚拟环境已激活),执行以下命令:

# 格式: gunicorn -w [worker数量] -b [绑定地址:端口] [模块名:应用实例名]
gunicorn -w 4 -b 0.0.0.0:8000 app:app
  • -w 4: 启动 4 个 worker 进程,通常设置为 (2 x CPU核心数) + 1
  • -b 0.0.0.0:8000: 绑定到服务器的所有网络接口的 8000 端口。
  • app:app: 第一个 appapp.py 文件名(不包含 .py),第二个 app 是 Flask 的应用实例名(即 app = Flask(__name__) 中的 app)。

在浏览器中访问 http://your_server_ip:8000,你应该能看到同样的页面,这说明 Gunicorn 已经成功运行了你的应用。

测试成功后,按 Ctrl+C 停止 Gunicorn。


第 4 步:配置 Nginx 作为反向代理

Nginx 将作为前端服务器,接收来自外部的请求(如 80 端口),然后转发给后端的 Gunicorn(8000 端口),它还能高效地处理静态文件。

1 安装 Nginx

sudo apt install nginx -y

2 创建 Nginx 配置文件

为你的应用创建一个新的 Nginx 配置文件。

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

粘贴进去。记得将 your_server_ip 替换成你的实际 IP 地址或域名

server {
    listen 80;
    server_name your_server_ip; # 替换成你的域名或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;
    }
    # 可选:如果应用有静态文件,可以在这里配置
    # location /static {
    #     alias /var/www/my_flask_app/static;
    #     expires 30d;
    # }
}

3 启用配置文件

创建一个符号链接来启用这个站点配置。

sudo ln -s /etc/nginx/sites-available/my_flask_app /etc/nginx/sites-enabled/

4 测试并重启 Nginx

测试 Nginx 配置是否正确,然后重启服务。

# 测试配置
sudo nginx -t
# 如果输出 successful,则重启
sudo systemctl restart nginx

5 配置防火墙

如果启用了 UFW (Uncomplicated Firewall),需要允许 HTTP 流量。

sudo ufw allow 'Nginx Full'

6 最终测试

在浏览器中访问 http://your_server_ip (不再是 8000 了),Nginx 会将你的请求转发给 Gunicorn,你应该能看到应用页面,至此,你的应用已经通过 Nginx + Gunicorn 成功部署了!


第 5 步:使用 Systemd 让应用作为服务运行

Gunicorn 进程在你退出 SSH 会话后就会停止,我们需要使用 systemd 来创建一个系统服务,让它开机自启并在后台持续运行。

1 创建 Systemd 服务文件

sudo nano /etc/systemd/system/my_flask_app
分享:
扫描分享到社交APP
上一篇
下一篇