You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Digital Ocean云主机部署Jupyter并实现Web表单处理

部署Jupyter作为Web表单处理后端(DigitalOcean云主机)

嘿,既然你已经有Jupyter和Python脚本的使用经验,那把Jupyter生态和Web后端结合起来其实挺顺畅的。下面我分两种方案来给你讲,一种是贴合Jupyter原生的Kernel Gateway方案,另一种是更灵活的Flask+Python脚本方案(毕竟Jupyter也能帮你快速调试这些脚本)。

前提准备:DigitalOcean云主机基础配置

首先你得在DigitalOcean上创建一个Droplet,推荐选Ubuntu 22.04 LTS镜像,配置根据你的需求选(最低配足够测试用)。创建好后用SSH登录,先更新系统并安装基础依赖:

sudo apt update && sudo apt upgrade -y
sudo apt install python3-pip python3-dev nginx -y # nginx可选,用于后续反向代理

方案1:用Jupyter Kernel Gateway把Notebook转成API

Kernel Gateway是Jupyter官方的工具,能把你的Notebook直接变成可调用的API,完美贴合你的Jupyter使用习惯。

1. 安装Jupyter Kernel Gateway

pip3 install jupyter_kernel_gateway

2. 编写处理表单的Notebook

创建一个name_processor.ipynb文件(用Jupyter编写或直接文本编辑都可以),内容如下:

# 导入依赖库
import json
from flask import request

# 定义POST接口,接收表单数据
@post('/process-name')
def process_name():
    # 获取表单中的姓名参数
    name = request.form.get('name', '')
    if not name.strip():
        return json.dumps({'error': '请输入有效的姓名'}), 400
    
    # 这里写你的自定义处理逻辑,比如生成个性化问候语
    result = f'你好,{name}!很高兴收到你的输入😊'
    
    # 返回JSON格式的处理结果
    return json.dumps({'result': result}), 200, {'Content-Type': 'application/json'}

3. 启动Kernel Gateway服务

运行命令将Notebook转为可外部访问的API服务:

jupyter kernelgateway --KernelGatewayApp.ip=0.0.0.0 --KernelGatewayApp.port=5000 --KernelGatewayApp.notebook=name_processor.ipynb

这里0.0.0.0允许外部访问,5000是服务端口,你可以改成其他未被占用的端口。

4. 配置后台自动运行(systemd服务)

为了让服务在服务器重启后自动启动,创建一个systemd服务文件:

sudo nano /etc/systemd/system/jupyter-api.service

写入以下内容(记得替换成你的用户名和文件路径):

[Unit]
Description=Jupyter Kernel Gateway API Service
After=network.target

[Service]
User=your-username # 替换为你的Droplet用户名
WorkingDirectory=/home/your-username # 替换为Notebook所在目录
ExecStart=/usr/local/bin/jupyter kernelgateway --KernelGatewayApp.ip=0.0.0.0 --KernelGatewayApp.port=5000 --KernelGatewayApp.notebook=name_processor.ipynb
Restart=always

[Install]
WantedBy=multi-user.target

然后启动并启用服务:

sudo systemctl daemon-reload
sudo systemctl start jupyter-api
sudo systemctl enable jupyter-api

5. 开放端口

在DigitalOcean的Droplet防火墙设置中,开放5000端口(或你自定义的端口),允许HTTP访问。


方案2:用Flask写Web服务(更灵活,Jupyter可调试)

如果你需要更复杂的Web逻辑,Flask这类轻量框架会更合适,而且你可以先用Jupyter调试好处理逻辑,再写成脚本部署。

1. 安装Flask和Gunicorn

pip3 install flask gunicorn

2. 编写Flask应用脚本

创建一个app.py文件(可以先在Jupyter里调试处理逻辑,再复制过来):

from flask import Flask, request, jsonify, render_template_string

app = Flask(__name__)

# 前端表单页面
@app.route('/')
def index():
    return render_template_string('''
        <form method="POST" action="/process-name">
            <label for="name">请输入你的姓名:</label>
            <input type="text" id="name" name="name" required>
            <button type="submit">提交</button>
        </form>
    ''')

# 表单处理接口
@app.route('/process-name', methods=['POST'])
def process_name():
    name = request.form.get('name', '').strip()
    if not name:
        return jsonify({'error': '请输入有效的姓名'}), 400
    
    # 这里是你的自定义处理逻辑,比如调用Jupyter中调试好的函数
    processed_result = f'Hello {name}! 你的输入已成功处理。'
    
    # 返回HTML格式的结果页面
    return render_template_string('''
        <h2>处理结果:</h2>
        <p>{{ result }}</p>
        <a href="/">返回输入页面</a>
    ''', result=processed_result)

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

3. 测试运行

先本地测试服务是否正常:

python3 app.py

访问http://你的DropletIP:5000就能看到表单,提交后会返回处理结果。

4. 用Gunicorn部署生产环境

Flask内置服务器不适合生产环境,用Gunicorn替代:

gunicorn --workers=2 --bind=0.0.0.0:5000 app:app

--workers=2是启动的进程数,可根据你的CPU核心数调整。

5. 配置systemd服务和Nginx反向代理(可选但推荐)

和方案1类似,创建systemd服务让Gunicorn后台运行,再用Nginx做反向代理,可处理静态文件和配置HTTPS(可用Let's Encrypt免费证书)。


安全注意事项

  • 输入验证:一定要对用户输入做校验,防止恶意输入导致的问题
  • HTTPS配置:如果是公开服务,务必配置HTTPS,避免数据明文传输
  • 端口限制:DigitalOcean防火墙只开放必要端口(如80、443、5000),关闭不必要的端口
  • 权限控制:运行服务的用户尽量用非root用户,降低安全风险

内容的提问来源于stack exchange,提问作者Zion Oyemade

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.20 07:22:09