从源码到集群:Superset 二次开发的打包、分发与部署实战b

Words 1622Read Time 5 min
2026-2-11
cover
type
Post
status
Published
date
Mar 30, 2020 15:16
slug
summary
从源码打包到集群部署的完整实战指南:涵盖 setup.py 配置与 Wheel 打包、手动/文件服务器/PyPI 三种分发方式、Gunicorn 单机部署,以及 Nginx 负载均衡集群方案与 SELinux 踩坑排查。
tags
Superset
Data Warehouse
category
DevOps
icon
password
wordCount
2063
📦
前言: 当你的 Superset 从"实验室玩具"进化到"生产力工具",就不可避免地要面对三件事——打包分发集群部署。本文将带你走完这条从源码到多节点负载均衡的完整路径。无论你是想把魔改后的 Superset 发给同事,还是想让它在 Nginx 背后优雅地扛住并发,这篇都能帮到你。

实验环境

开始之前,先确认你的工具箱里有这些家伙:
组件
版本
备注
操作系统
CentOS 7 Minimal
生产环境常客
Python
3.6.8+
Superset 的母语
Node.js
12.16.1+
前端编译必备
setuptools / pip
最新即可
Python 打包基础设施

Superset 打包

Python 模块本质上就是文件——直接复制到目标目录就能用。但如果你想优雅地复用和分享,就得把它打成正经的安装包。就像把散装零食装进密封袋,方便携带也方便投喂。

修改 setup.py

  1. 进入 Superset 根目录
    1. 编辑 setup.py 文件
      1. 找到 setup() 函数,重点关注以下字段:
    ✏️
    需要修改的地方:
    • name:改成你的二次开发项目名称(如 zjft-superset)。如果要上传到 PyPI,先去官网搜一下确保不重名。
    • version:按需修改版本号。
    • install_requires:追加二次开发中引入的依赖包。
    修改后大致长这样:
    保存退出(:wq)。

    编译前端

    setup.py文件
    1. 进入 assets 目录
      1. 安装依赖并编译

        开始打包

        1. 回到 Superset 根目录
          1. 选择打包方式:
          方式
          命令
          产物
          推荐度
          Wheel(推荐)
          python setup.py bdist_wheel
          .whl 文件
          ⭐⭐⭐ 安装更快,无需编译
          Source Tarball
          python setup.py sdist
          .tar.gz 文件
          ⭐⭐ 兼容性好,但安装稍慢
          打包完成后,产物会出现在自动生成的 dist/ 目录下:

          Superset 分发

          包打好了,接下来就是"快递"环节——怎么把它送到目标服务器上。

          方式一:手动分发

          最朴素的方法:scp 或其他文件传输工具直接上传到服务器。简单粗暴,适合内网少量机器。

          方式二:自建文件服务器

          分发1
          .whl.tar.gz 丢到内部文件服务器上,团队成员通过 URL 直接 pip install。适合不想暴露到公网的团队。

          方式三:上传到 PyPI

          ⚠️
          注意: 上传到 PyPI 的包全世界都能下载,确保不包含敏感信息。
          1. 前往 PyPI 官网 注册账号
          1. 安装上传工具
            1. 上传(会提示输入 PyPI 的用户名和密码)

              Superset 安装

              创建 Python 虚拟环境

              用虚拟环境隔离系统 Python 是个好习惯——就像做实验要穿白大褂,防止把日常衣服弄脏。
              1. 创建虚拟环境(myven 为自定义名称)
                1. 激活虚拟环境
                  1. 激活后终端提示符前会出现 (myven),表示你已进入隔离空间。

                安装方式对照

                分发方式
                安装命令
                手动上传 .whl
                pip install superset-0.35.2-py3-none-any.whl
                手动上传 .tar.gz
                tar -zxvf zjft-superset-0.35.2.tar.gz && cd zjft-superset-0.35.2 && python setup.py install
                自建文件服务器
                PyPI
                pip install zjft-superset

                验证安装

                安装无报错后,运行以下命令启动开发服务器:
                如果终端没有飘红——恭喜,安装成功 🎉

                部署 Superset 单机服务

                开发服务器只适合调试,生产环境需要一个靠谱的 WSGI 服务器。Gunicorn(独角兽🦄)就是 Python 社区最受欢迎的选择之一——轻量、高性能、配置简单。
                1. 安装依赖
                  1. 启动服务
                    🔧
                    参数说明:
                    • -w 2:启动 2 个 worker 进程
                    • -k gevent:使用 gevent 异步工作模式
                    • --timeout 60:请求超时 60 秒
                    • -b 0.0.0.0:9000:监听所有网卡的 9000 端口
                    • --limit-request-line 0:不限制 HTTP 请求行大小(0 = 不限制,默认 4094,可防 DDOS)
                    • --limit-request-field-size 0:不限制请求头大小(默认 8190)
                    启动成功后,浏览器打开 http://ip:9000 即可访问。

                    部署 Superset 集群服务

                    单机扛不住?上集群。核心思路很简单:启动多个 Gunicorn 实例,前面用 Nginx 做负载均衡

                    安装 Nginx

                    如果提示"没有可用软件包 nginx",需要先添加 Nginx 官方源:
                    然后重新执行安装命令。

                    验证 Nginx 安装

                    📋
                    常用 Nginx 命令速查:
                    • systemctl enable nginx — 开机自启
                    • service nginx start — 启动
                    • service nginx stop — 停止
                    • service nginx restart — 重启
                    • service nginx reload — 重新加载配置(修改配置后用这个)

                    启动 Nginx

                    确保 80 端口未被占用,然后启动:
                    浏览器访问 http://ip,看到 Nginx 的欢迎页就说明一切正常。

                    修改 Nginx 配置

                    编辑配置文件:
                    替换为以下内容:
                    💡
                    配置解读:
                    • weight=2weight=1 表示轮询权重——每 3 次请求中,2 次打到 9000 端口,1 次打到 9001 端口。
                    • add_header backendIP/backendCode 会在响应头中暴露实际后端地址,仅用于调试验证,生产环境必须删除。
                    重新加载配置使其生效:

                    验证负载均衡

                    打开浏览器,按 F12 进入开发者工具,访问 http://你的IP/
                    连续按 Ctrl + F5(强制刷新)三次,观察响应头中的 backendIP
                    • 前两次应指向 9000 端口:
                    负载均衡
                    • 第三次应指向 9001 端口:
                    负载均衡
                    如果三次都指向同一个端口,说明负载均衡没生效,按以下顺序排查:
                    1. 确认所有 Superset 实例都在运行
                    1. 确认配置文件语法正确且已 reload
                    1. 查看 Nginx 错误日志

                    常见问题:SELinux 权限拦截

                    如果日志中出现类似错误:
                    这是 SELinux 在捣乱。两种解决方案:

                    方案一:临时关闭 SELinux(不用重启)

                    方案二:永久关闭 SELinux(需重启)

                    编辑 /etc/selinux/config,将 SELINUX=enforcing 改为 SELINUX=disabled,然后重启机器。

                    方案三:精准放行(推荐)

                    不想关闭 SELinux?执行以下命令单独放行 HTTP 网络连接:
                    推荐方案三——既解决了问题,又保留了 SELinux 的安全防护能力。关闭 SELinux 虽然省事,但在生产环境中会增加安全风险。

                    总结

                    恭喜你走完了从源码到集群的完整旅程 🚀 回顾一下关键节点:
                    阶段
                    核心动作
                    产出
                    打包
                    修改 setup.py • 编译前端 + bdist_wheel
                    .whl 安装包
                    分发
                    手动 / 文件服务器 / PyPI
                    团队可获取的安装源
                    单机部署
                    Gunicorn + gevent
                    生产级单节点服务
                    集群部署
                    多 Gunicorn 实例 + Nginx 负载均衡
                    高可用多节点服务
                    当 Superset 从单兵作战走向集群协同,你的 BI 平台也就完成了从"能用"到"好用"的进化。下一步可以考虑加入 Redis 做缓存层Celery 处理异步查询,甚至接入 Kubernetes 实现弹性伸缩——但那都是后话了,先把眼前的集群稳稳跑起来吧 💪
                    Loading...