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