15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用
01.11.2024
4 +2

如何在托管上安装Flask:完整分步指南

Flask 是一个轻量级、灵活的 Python 网络框架,使开发人员能够快速高效地构建和部署网络应用程序。无论您是启动个人项目、REST API 还是全面的网络服务,了解如何在托管环境中正确安装和配置 Flask 是一项基本技能。本综合指南将引导您完成每一步 — 从服务器设置到使用 Gunicorn 和 Nginx 的生产部署。

1. 前置条件

在开始安装过程之前,请确保您已准备好以下内容:

支持 Python 的托管环境

您需要一个为您提供对服务器环境完全控制的托管服务。共享托管计划通常会限制 Python 执行,因此对于 Flask 部署,强烈推荐使用 VPS 托管计划或专用服务器。这些选项为您提供 root 访问权限、完整的软件包管理功能以及完全按照您的需求配置堆栈的灵活性。

SSH 访问

您需要 SSH 访问权限来连接到远程服务器并执行命令。大多数基于 Linux 的 VPS 和专用服务器环境默认支持此功能。

已安装 Python

建议使用 Python 3.8 或更高版本。大多数现代托管环境都预装了 Python,但我们将在设置期间验证这一点。

可选:域名

如果您计划通过域名而不是原始 IP 地址使 Flask 应用程序可公开访问,请考虑在开始之前通过域名注册注册一个。

2. 通过 SSH 连接到您的服务器

打开您的终端(Linux/macOS)或 SSH 客户端(如 PuTTY(Windows))并连接到您的服务器:

ssh username@your_server_ip

username 替换为您的实际服务器用户名,将 your_server_ip 替换为您的服务器公共 IP 地址。

连接后,验证 Python 3 是否可用:

python3 --version

您应该看到类似于 Python 3.10.x 的输出。如果未安装 Python,请继续安装它:

sudo apt install python3

3. 更新您的服务器

在安装任何软件包之前,最佳做法是更新系统的软件包列表并将现有软件包升级到最新版本:

sudo apt update
sudo apt upgrade -y

这确保您使用的是所有依赖项的最稳定和最安全的版本。

4. 安装 Flask

步骤 1:安装 pip

pip 是 Python 的软件包管理器,是安装 Flask 和其他 Python 库所必需的。如果尚未安装,请安装它:

sudo apt install python3-pip -y

验证安装:

pip3 --version

步骤 2:创建项目目录

通过创建专用目录来组织您的应用程序:

mkdir my_flaskapp
cd my_flaskapp

步骤 3:设置虚拟环境

使用虚拟环境将您的项目依赖项与全局 Python 安装隔离,防止版本冲突并保持服务器清洁:

sudo apt install python3-venv -y
python3 -m venv venv

激活虚拟环境:

source venv/bin/activate

您的终端提示符将更改以指示虚拟环境处于活动状态,通常在行的开头显示 (venv)

步骤 4:安装 Flask

激活虚拟环境后,使用 pip 安装 Flask:

pip install Flask

确认安装:

flask --version

您应该看到 Flask 版本以及 Python 和 Werkzeug 版本。

5. 创建简单的 Flask 应用程序

步骤 1:创建应用程序文件

在您的项目目录中创建一个名为 app.py 的新文件:

nano app.py

步骤 2:编写您的 Flask 应用程序

添加以下最小 Flask 应用程序代码:

from flask import Flask

app = Flask(__name__)

@app.route('/')
def home():
    return "Hello, World! Flask is running successfully."

if __name__ == '__main__':
    app.run(host='0.0.0.0', port=5000)

代码分解:

  • Flask(__name__) — 创建一个新的 Flask 应用程序实例。
  • @app.route('/') — 为主页定义 URL 路由。
  • app.run(host='0.0.0.0', port=5000) — 启动开发服务器,使其在端口 5000 上的所有网络接口上可访问。

步骤 3:保存并退出

CTRL + X,然后按 Y,并按 Enter 保存文件并退出 nano 编辑器。

6. 在开发模式下运行您的 Flask 应用程序

启动 Flask 开发服务器来测试您的应用程序:

python app.py

您的应用程序现在可以在网络浏览器中访问:

http://your_server_ip:5000

> 重要:内置的 Flask 开发服务器不适合生产使用。它是单线程的,性能未优化,并且缺少关键的安全功能。始终为实时部署使用生产级 WSGI 服务器。

7. 使用 Gunicorn 在生产环境中部署 Flask

对于生产部署,Gunicorn(Green Unicorn)是最广泛使用的 Python WSGI HTTP 服务器。它可以高效地处理多个并发请求,并与 Nginx 无缝集成。

步骤 1:安装 Gunicorn

在虚拟环境仍处于活动状态的情况下,安装 Gunicorn:

pip install gunicorn

步骤 2:使用 Gunicorn 运行您的应用程序

使用 Gunicorn 启动您的 Flask 应用程序,将其绑定到 localhost 上的端口 8000:

gunicorn app:app -b 127.0.0.1:8000 --workers 3

参数说明:

  • app:app — 指 app.py 文件内的 app 对象。
  • -b 127.0.0.1:8000 — 将 Gunicorn 绑定到 localhost 上的端口 8000(Nginx 将处理外部流量)。
  • --workers 3 — 生成 3 个工作进程来处理并发请求。常见的公式是 (2 × CPU cores) + 1

步骤 3:将 Gunicorn 作为 Systemd 服务运行(推荐)

为了确保 Gunicorn 在服务器重启时自动启动,请创建一个 systemd 服务文件:

sudo nano /etc/systemd/system/my_flaskapp.service

添加以下配置:

[Unit]
Description=Gunicorn instance to serve my_flaskapp
After=network.target

[Service]
User=your_username
Group=www-data
WorkingDirectory=/home/your_username/my_flaskapp
Environment="PATH=/home/your_username/my_flaskapp/venv/bin"
ExecStart=/home/your_username/my_flaskapp/venv/bin/gunicorn app:app -b 127.0.0.1:8000 --workers 3

[Install]
WantedBy=multi-user.target

your_username 替换为您的实际服务器用户名。然后启用并启动服务:

sudo systemctl daemon-reload
sudo systemctl start my_flaskapp
sudo systemctl enable my_flaskapp

检查服务状态:

sudo systemctl status my_flaskapp

8. 将 Nginx 配置为反向代理

Nginx 充当反向代理,位于 Gunicorn 前面并处理所有传入的 HTTP/HTTPS 流量。此设置可提高性能、启用 SSL 终止并允许您高效地提供静态文件。

步骤 1:安装 Nginx

sudo apt install nginx -y

步骤 2:创建 Nginx 配置文件

为您的 Flask 应用程序创建新的服务器块配置:

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

添加以下配置:

server {
    listen 80;
    server_name your_domain_or_ip;  # Replace with your domain or server 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 /home/your_username/my_flaskapp/static;
        expires 30d;
    }
}

步骤 3:启用配置

创建符号链接以启用该站点并测试 Nginx 配置:

sudo ln -s /etc/nginx/sites-available/my_flaskapp /etc/nginx/sites-enabled
sudo nginx -t

如果测试返回 syntax is oktest is successful,请重启 Nginx:

sudo systemctl restart nginx

您的 Flask 应用程序现在可以在 http://your_domain_or_ip 的端口 80 上访问。

9. 使用 SSL/HTTPS 保护您的 Flask 应用程序

通过 HTTPS 运行您的应用程序不再是可选的 — 这是安全性、用户信任和 SEO 排名的基本要求。您可以使用 Certbot 和 Let’s Encrypt 获取并安装免费 SSL 证书,或通过SSL 证书购买高级证书以获得增强的验证和保修覆盖。

安装 Certbot 并获取免费 SSL 证书

sudo apt install certbot python3-certbot-nginx -y
sudo certbot --nginx -d your_domain.com -d www.your_domain.com

Certbot 将自动修改您的 Nginx 配置以启用 HTTPS 并设置自动证书续期。

验证自动续期已配置:

sudo certbot renew --dry-run

10. 防火墙配置

确保您的服务器防火墙允许必要端口上的流量:

sudo ufw allow OpenSSH
sudo ufw allow 'Nginx Full'
sudo ufw enable
sudo ufw status

Nginx Full 打开端口 80(HTTP)和端口 443(HTTPS)。

11. 故障排除常见问题

问题可能原因解决方案
502 Bad GatewayGunicorn 未运行检查 sudo systemctl status my_flaskapp
Permission denied 在套接字上文件权限不正确确保 Nginx 用户有权访问应用程序目录
找不到 Flask 应用程序服务文件中的工作目录错误在 systemd 配置中双检 WorkingDirectory 路径
端口 5000 无法访问防火墙阻止端口使用 sudo ufw allow 5000 打开端口(仅开发)
ModuleNotFoundError虚拟环境未激活确保 ExecStart 指向 venv 的 Python/Gunicorn 二
15%

全场主机优惠15%

测试技能,享折扣

使用代码:

Skills
开始使用