superset-01 部署superset

  • 说明
    • 使用容器方式部署superset,数据源使用msyql
    • 参考文章博客
    https://www.bilibili.com/read/cv26844512/
    https://www.modb.pro/db/199872
    https://blog.csdn.net/wenchun001/article/details/130872485
    https://blog.csdn.net/qq_39915068/article/details/126544518
    http://lihuaxi.xjx100.cn/news/1271775.html?action=onClick
    

1 准备mysql相关

  • 目录结构如下
mysql8
|-- conf
|   |-- init.sql
|   |-- my.cnf
|   `-- mysql.env
|-- db
|-- docker-compose.yaml
`-- mysql-files
  • 操作步骤
    • 以上模板文件下载
    # 链接 https://pan.baidu.com/s/1yFVSy-_00_4P0cuAVIugUQ?pwd=lv3v 
    
    • 初始 **sql **文件 init.sql
    # 创建mysql时会自动创建superset数据库
    create database if not exists superset character set utf8mb4 collate utf8mb4_bin;
    
    • 调整 docker-compose.yaml
    version: '3'
    services:
    mysql:
      image: mysql:8.0
      container_name: mysql8.0
      user: root
      privileged: true
      restart: unless-stopped
      ports:
        - 3307:3306
      env_file:
        - ./conf/mysql.env
      environment:
        - TZ=Asia/Shanghai
      command:
        --default-authentication-plugin=mysql_native_password
      volumes:
        - ./conf/my.cnf:/etc/mysql/my.cnf
        - ./db:/var/lib/mysql
        - ./mysql-files:/var/lib/mysql-files
        - ./conf/init.sql:/docker-entrypoint-initdb.d/init.sql
    
    • 创建容器
    # 
    docker-compose up -d
    

2 superset相关

  • 操作步骤如下
    • 准备 docker-compose.yaml
    version: '3'
    services:
    superset:
      image: amancevice/superset:3.0.1
      container_name: superset
      hostname: superset
      restart: always
      ports:
        - 8080:8088
      environment:
        - TZ=Asia/Shanghai
      volumes:
        - ./superset_config.py:/etc/superset/superset_config.py
        - ./data:/var/lib/superset
    
    • 准备 superset_config.py
    ROW_LIMIT = 5000
    SUPERSET_WEBSERVER_PORT = 8088
    # 生成命令:openssl rand -base64 42
    SECRET_KEY = 'oCghysSLvk2BSa9bPEOz6avKzjLHYkedO6ztCZ/sv5j3pwuIg63wVLeY'
    # 此处配置的是mysql连接信息,用了ecs宿主机私网地址
    SQLALCHEMY_DATABASE_URI = 'mysql://root:n9w3EHspaR@10.243.1.8:3307/superset'
    WTF_CSRF_ENABLED = True
    TALISMAN_ENABLED = False
    WTF_CSRF_TIME_LIMIT = 60 * 60 * 24 * 365
    BABEL_DEFAULT_LOCALE = "zh"
    LANGUAGES = {
      "zh": {"flag": "cn", "name": "简体中文"},
      "en": {"flag": "us", "name": "English"},
    }
    
    • 创建容器
    # 启动后,会看到数据库中自动创建了几个空白基础表
    docker-compose up -d
    
    • 初始化
    # 主要是创建管理员用户和表及插入基础数据
    docker exec -it 8556cc81d8e7 superset-init
    # 接下来按提示创建管理员用户信息回车即可
    
    • 页面查看 http://ip:port

    image-20231130105517476

3 拓展

  • amancevice/superset
    • 项目构建托管地址
    https://github.com/amancevice/docker-superset
    
    • 其dockerfile文件内容如下
    ARG NODE_VERSION=16
    ARG PYTHON_VERSION=3.9
    
    FROM python:PYTHON_VERSION
    
    # Configure environment
    # superset/gunicorn recommended defaults:
    # - https://superset.apache.org/docs/installation/configuring-superset#running-on-a-wsgi-http-server
    # - https://docs.gunicorn.org/en/latest/configure.html
    ENV FLASK_APP=superset
    ENV GUNICORN_BIND=0.0.0.0:8088
    ENV GUNICORN_LIMIT_REQUEST_FIELD_SIZE=8190
    ENV GUNICORN_LIMIT_REQUEST_LINE=4094
    ENV GUNICORN_THREADS=4
    ENV GUNICORN_TIMEOUT=120
    ENV GUNICORN_WORKERS=10
    ENV GUNICORN_WORKER_CLASS=gevent
    ENV LANG=C.UTF-8
    ENV LC_ALL=C.UTF-8
    ENV PYTHONPATH=/etc/superset:/home/superset:PYTHONPATH
    ENV SUPERSET_HOME=/var/lib/superset
    ENV GUNICORN_CMD_ARGS="--bind GUNICORN_BIND --limit-request-field_sizeGUNICORN_LIMIT_REQUEST_FIELD_SIZE --limit-request-line GUNICORN_LIMIT_REQUEST_LINE --threadsGUNICORN_THREADS --timeout GUNICORN_TIMEOUT --workersGUNICORN_WORKERS --worker-class GUNICORN_WORKER_CLASS"
    
    # Configure filesystem
    COPY bin /usr/local/bin
    VOLUME /etc/superset
    VOLUME /home/superset
    VOLUME /var/lib/superset
    
    # Create superset user&install dependencies
    WORKDIR /home/superset
    RUN groupadd supergroup &&  useradd -U -G supergroup superset &&  mkdir -pSUPERSET_HOME && 
      mkdir -p /etc/superset && 
      chown -R superset:superset $SUPERSET_HOME && 
      chown -R superset:superset /home/superset && 
      chown -R superset:superset /etc/superset && 
      apt-get update && 
      apt-get install -y 
      build-essential 
      curl 
      default-libmysqlclient-dev 
      freetds-bin 
      freetds-dev 
      libaio1 
      libecpg-dev 
      libffi-dev 
      libldap2-dev 
      libpq-dev 
      libsasl2-2 
      libsasl2-dev 
      libsasl2-modules-gssapi-mit 
      libssl-dev && 
      apt-get clean && 
      pip install -U pip
    
    # Install pips
    RUN pip install pystan==3.7.0
    COPY requirements*.txt ./
    RUN pip install -r requirements.txt
    RUN pip install -r requirements-dev.txt
    
    # Configure application
    EXPOSE 8088
    USER superset
    HEALTHCHECK CMD ["curl", "-f", "http://localhost:8088/health"]
    CMD ["gunicorn", "superset.app:create_app()"]