美文网首页
Superset Docker部署

Superset Docker部署

作者: EasyNetCN | 来源:发表于2023-09-19 08:48 被阅读0次

    Superset提供了Docker部署方式,但是基于自己的环境如何部署,官方并没有提供,也很少有其他文章,下面给出了几点总结,仅供参考。

    使用自己的MySQL和Redis。注意,经过测试,celery不能使用有密码的Redis

    #
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #    http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    #
    x-superset-image: &superset-image apachesuperset.docker.scarf.sh/apache/superset:${TAG:-latest-dev}
    x-superset-volumes:
      &superset-volumes # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container
      - ./docker:/app/docker
      - superset_home:/app/superset_home
    
    version: "3.7"
    services:
      superset:
        env_file: docker/.env-non-dev
        image: *superset-image
        container_name: superset_app
        command: ["/app/docker/docker-bootstrap.sh", "app-gunicorn"]
        user: "root"
        restart: unless-stopped
        ports:
          - 8088:8088
        volumes: *superset-volumes
        environment:
          - DATABASE_DIALECT=mysql
          - DATABASE_HOST=
          - DATABASE_PORT=3306
          - DATABASE_DB=superset
          - DATABASE_USER=superset
          - DATABASE_PASSWORD=
          - REDIS_HOST=
          - REDIS_PORT=6379
    
      superset-init:
        image: *superset-image
        container_name: superset_init
        command: ["/app/docker/docker-init.sh"]
        env_file: docker/.env-non-dev
        user: "root"
        volumes: *superset-volumes
        healthcheck:
          disable: true
        environment:
          - DATABASE_DIALECT=mysql
          - DATABASE_HOST=
          - DATABASE_PORT=3306
          - DATABASE_DB=superset
          - DATABASE_USER=superset
          - DATABASE_PASSWORD=
          - REDIS_HOST=
          - REDIS_PORT=6379
          - SUPERSET_LOAD_EXAMPLES=no
    
      superset-worker:
        image: *superset-image
        container_name: superset_worker
        command: ["/app/docker/docker-bootstrap.sh", "worker"]
        env_file: docker/.env-non-dev
        restart: unless-stopped
        user: "root"
        volumes: *superset-volumes
        healthcheck:
          test:
            [
              "CMD-SHELL",
              "celery -A superset.tasks.celery_app:app inspect ping -d celery@$$HOSTNAME",
            ]
        environment:
          - DATABASE_DIALECT=mysql
          - DATABASE_HOST=
          - DATABASE_PORT=3306
          - DATABASE_DB=superset
          - DATABASE_USER=superset
          - DATABASE_PASSWORD=
          - REDIS_HOST=
          - REDIS_PORT=6379
    
      superset-worker-beat:
        image: *superset-image
        container_name: superset_worker_beat
        command: ["/app/docker/docker-bootstrap.sh", "beat"]
        env_file: docker/.env-non-dev
        restart: unless-stopped
        user: "root"
        volumes: *superset-volumes
        healthcheck:
          disable: true
        environment:
          - DATABASE_DIALECT=mysql
          - DATABASE_HOST=
          - DATABASE_PORT=3306
          - DATABASE_DB=superset
          - DATABASE_USER=superset
          - DATABASE_PASSWORD=
          - REDIS_HOST=
          - REDIS_PORT=6379
    
    volumes:
      superset_home:
        external: false
      db_home:
        external: false
      redis:
        external: false
    

    增加驱动依赖,在docker目录下创建requirements-local.txt文件。比如增加kylin驱动

    kylinpy
    

    使用国内源,修改docker目录下的docker-bootstrap.sh文件

    #!/usr/bin/env bash
    #
    # Licensed to the Apache Software Foundation (ASF) under one or more
    # contributor license agreements.  See the NOTICE file distributed with
    # this work for additional information regarding copyright ownership.
    # The ASF licenses this file to You under the Apache License, Version 2.0
    # (the "License"); you may not use this file except in compliance with
    # the License.  You may obtain a copy of the License at
    #
    #    http://www.apache.org/licenses/LICENSE-2.0
    #
    # Unless required by applicable law or agreed to in writing, software
    # distributed under the License is distributed on an "AS IS" BASIS,
    # WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    # See the License for the specific language governing permissions and
    # limitations under the License.
    #
    
    set -eo pipefail
    
    REQUIREMENTS_LOCAL="/app/docker/requirements-local.txt"
    # If Cypress run – overwrite the password for admin and export env variables
    if [ "$CYPRESS_CONFIG" == "true" ]; then
        export SUPERSET_CONFIG=tests.integration_tests.superset_test_config
        export SUPERSET_TESTENV=true
        export SUPERSET__SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://superset:superset@db:5432/superset
    fi
    #
    # Make sure we have dev requirements installed
    #
    if [ -f "${REQUIREMENTS_LOCAL}" ]; then
      echo "Installing local overrides at ${REQUIREMENTS_LOCAL}"
      pip install -i https://pypi.tuna.tsinghua.edu.cn/simple --no-cache-dir -r "${REQUIREMENTS_LOCAL}" 
    else
      echo "Skipping local overrides"
    fi
    
    case "${1}" in
      worker)
        echo "Starting Celery worker..."
        celery --app=superset.tasks.celery_app:app worker -O fair -l INFO
        ;;
      beat)
        echo "Starting Celery beat..."
        rm -f /tmp/celerybeat.pid
        celery --app=superset.tasks.celery_app:app beat --pidfile /tmp/celerybeat.pid -l INFO -s "${SUPERSET_HOME}"/celerybeat-schedule
        ;;
      app)
        echo "Starting web app (using development server)..."
        flask run -p 8088 --with-threads --reload --debugger --host=0.0.0.0
        ;;
      app-gunicorn)
        echo "Starting web app..."
        /usr/bin/run-server.sh
        ;;
      *)
        echo "Unknown Operation!!!"
        ;;
    esac
    

    重置密码

    docker exec -it superset_app /bin/bash
    superset fab reset-password --username admin --password yourpassword
    

    相关文章

      网友评论

          本文标题:Superset Docker部署

          本文链接:https://www.haomeiwen.com/subject/ogsnvdtx.html