mirror of
https://github.com/apache/superset.git
synced 2026-04-19 16:14:52 +00:00
Docker support (#8725)
* Moving Docker stuff around * docker-compose working as expected * Updating README * Addressing comments * Utilizing requirements-extra
This commit is contained in:
committed by
Daniel Vaz Gaspar
parent
69dcaca324
commit
fce49680d7
30
docker/.env
Normal file
30
docker/.env
Normal file
@@ -0,0 +1,30 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
COMPOSE_PROJECT_NAME=superset
|
||||
POSTGRES_DB=superset
|
||||
POSTGRES_HOST=postgres
|
||||
POSTGRES_PASSWORD=superset
|
||||
POSTGRES_PORT=5432
|
||||
POSTGRES_USER=superset
|
||||
# Add the mapped in /app/pythonpath_docker which allows devs to override stuff
|
||||
PYTHONPATH=/app/pythonpath:/app/pythonpath_docker
|
||||
REDIS_HOST=redis
|
||||
REDIS_PORT=6379
|
||||
|
||||
FLASK_ENV=development
|
||||
SUPERSET_ENV=development
|
||||
SUPERSET_LOAD_EXAMPLES=yes
|
||||
69
docker/README.md
Normal file
69
docker/README.md
Normal file
@@ -0,0 +1,69 @@
|
||||
<!--
|
||||
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.
|
||||
-->
|
||||
|
||||
# Getting Started with Superset using Docker
|
||||
|
||||
Docker is an easy way to get started with Superset.
|
||||
|
||||
## Prerequisites
|
||||
|
||||
1. Docker! [link](https://www.docker.com/get-started)
|
||||
1. Docker-compose [link](https://docs.docker.com/compose/install/)
|
||||
|
||||
## Configuration
|
||||
|
||||
The `/app/pythonpath` folder is mounted from [./docker/pythonpath_dev](./docker/pythonpath_dev)
|
||||
which contains a base configuration [./docker/pythonpath/superset_config.py](./docker/pythonpath/superset_config.py)
|
||||
intended for use with local development.
|
||||
|
||||
### Local overrides
|
||||
|
||||
In order to override configuration settings locally, simply make a copy of [./docker/pythonpath/superset_config_local.example](./docker/pythonpath/superset_config_local.example)
|
||||
into [./docker/pythonpath/superset_config_docker.py](./docker/pythonpath/superset_config_docker.py) (git ignored) and fill in your overrides.
|
||||
|
||||
## Initializing Database
|
||||
|
||||
The DB will initialize itself upon startup via the init container (superset-init)
|
||||
(This may take a minute.)
|
||||
|
||||
## Normal Operation
|
||||
|
||||
To run the container, simply run:
|
||||
|
||||
```bash
|
||||
docker-compose up
|
||||
```
|
||||
|
||||
After several minutes for superset initialization to finish, you can open a browser and view [`http://localhost:8088`](http://localhost:8088)
|
||||
to start your journey.
|
||||
|
||||
## Developing
|
||||
|
||||
While running, the container server will reload on modification of the superset python and javascript source code.
|
||||
Don't forget to reload the page to take the new frontend into account though.
|
||||
|
||||
## Production
|
||||
|
||||
It is also possible to run Superset in non-development mode: in the `docker-compose.yml` file remove
|
||||
the volumes needed for development and change the variable `SUPERSET_ENV` to `production`.
|
||||
|
||||
## Resource Constraints
|
||||
|
||||
If you are attempting to build on a Mac and it exits with 137 you need to increase your docker resources.
|
||||
OSX instructions: https://docs.docker.com/docker-for-mac/#advanced (Search for memory)
|
||||
29
docker/docker-entrypoint.sh
Executable file
29
docker/docker-entrypoint.sh
Executable file
@@ -0,0 +1,29 @@
|
||||
#!/bin/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
|
||||
|
||||
if [ "${#}" -ne 0 ]; then
|
||||
exec "${@}"
|
||||
else
|
||||
gunicorn --bind "0.0.0.0:${SUPERSET_PORT}" \
|
||||
--workers 1 \
|
||||
--timeout 60 \
|
||||
--limit-request-line 0 \
|
||||
--limit-request-field_size 0 \
|
||||
"${FLASK_APP}"
|
||||
fi
|
||||
40
docker/docker-init.sh
Executable file
40
docker/docker-init.sh
Executable file
@@ -0,0 +1,40 @@
|
||||
#!/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 -ex
|
||||
|
||||
# Create an admin user
|
||||
echo "Setting up admin user..."
|
||||
flask fab create-admin \
|
||||
--username admin \
|
||||
--firstname Superset \
|
||||
--lastname Admin \
|
||||
--email admin@superset.com \
|
||||
--password admin
|
||||
|
||||
# Initialize the database
|
||||
echo "Migrating the DB..."
|
||||
superset db upgrade
|
||||
|
||||
if [ "$SUPERSET_LOAD_EXAMPLES" = "yes" ]; then
|
||||
# Load some data to play with
|
||||
superset load_examples
|
||||
fi
|
||||
|
||||
# Create default roles and permissions
|
||||
echo "Setting up roles and perms..."
|
||||
superset init
|
||||
23
docker/pythonpath_dev/.gitignore
vendored
Normal file
23
docker/pythonpath_dev/.gitignore
vendored
Normal file
@@ -0,0 +1,23 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
# Ignore everything
|
||||
*
|
||||
# DON'T ignore the .gitignore
|
||||
!.gitignore
|
||||
!superset_config.py
|
||||
!superset_config_local.example
|
||||
87
docker/pythonpath_dev/superset_config.py
Normal file
87
docker/pythonpath_dev/superset_config.py
Normal file
@@ -0,0 +1,87 @@
|
||||
# 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.
|
||||
|
||||
#
|
||||
# This file is included in the final Docker image and SHOULD be overridden when
|
||||
# deploying the image to prod. Settings configured here are intended for use in local
|
||||
# development environments. Also note that superset_config_docker.py is imported
|
||||
# as a final step as a means to override "defaults" configured here
|
||||
#
|
||||
|
||||
import logging
|
||||
import os
|
||||
|
||||
|
||||
logger = logging.getLogger()
|
||||
|
||||
|
||||
def get_env_variable(var_name, default=None):
|
||||
"""Get the environment variable or raise exception."""
|
||||
try:
|
||||
return os.environ[var_name]
|
||||
except KeyError:
|
||||
if default is not None:
|
||||
return default
|
||||
else:
|
||||
error_msg = "The environment variable {} was missing, abort...".format(
|
||||
var_name
|
||||
)
|
||||
raise EnvironmentError(error_msg)
|
||||
|
||||
|
||||
POSTGRES_USER = get_env_variable("POSTGRES_USER")
|
||||
POSTGRES_PASSWORD = get_env_variable("POSTGRES_PASSWORD")
|
||||
POSTGRES_HOST = get_env_variable("POSTGRES_HOST")
|
||||
POSTGRES_PORT = get_env_variable("POSTGRES_PORT")
|
||||
POSTGRES_DB = get_env_variable("POSTGRES_DB")
|
||||
|
||||
# The SQLAlchemy connection string.
|
||||
SQLALCHEMY_DATABASE_URI = "postgresql://%s:%s@%s:%s/%s" % (
|
||||
POSTGRES_USER,
|
||||
POSTGRES_PASSWORD,
|
||||
POSTGRES_HOST,
|
||||
POSTGRES_PORT,
|
||||
POSTGRES_DB,
|
||||
)
|
||||
|
||||
REDIS_HOST = get_env_variable("REDIS_HOST")
|
||||
REDIS_PORT = get_env_variable("REDIS_PORT")
|
||||
|
||||
|
||||
class CeleryConfig(object):
|
||||
BROKER_URL = "redis://%s:%s/0" % (REDIS_HOST, REDIS_PORT)
|
||||
CELERY_IMPORTS = ("superset.sql_lab",)
|
||||
CELERY_RESULT_BACKEND = "redis://%s:%s/1" % (REDIS_HOST, REDIS_PORT)
|
||||
CELERY_ANNOTATIONS = {"tasks.add": {"rate_limit": "10/s"}}
|
||||
CELERY_TASK_PROTOCOL = 1
|
||||
|
||||
|
||||
CELERY_CONFIG = CeleryConfig
|
||||
|
||||
#
|
||||
# Optionally import superset_config_docker.py (which will have been included on
|
||||
# the PYTHONPATH) in order to allow for local settings to be overridden
|
||||
#
|
||||
try:
|
||||
from superset_config_docker import * # noqa
|
||||
import superset_config_docker
|
||||
|
||||
logger.info(
|
||||
f"Loaded your Docker configuration at " f"[{superset_config_docker.__file__}]"
|
||||
)
|
||||
except ImportError:
|
||||
logger.info("Using default Docker config...")
|
||||
27
docker/pythonpath_dev/superset_config_local.example
Normal file
27
docker/pythonpath_dev/superset_config_local.example
Normal file
@@ -0,0 +1,27 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
|
||||
#
|
||||
# This is an example "local" configuration file. In order to set/override config
|
||||
# options that ONLY apply to your local environment, simply copy/rename this file
|
||||
# to docker/pythonpath/superset_config_docker.py
|
||||
# It ends up being imported by docker/superset_config.py which is loaded by
|
||||
# superset/config.py
|
||||
#
|
||||
|
||||
SQLALCHEMY_DATABASE_URI = "postgresql+psycopg2://pguser:pgpwd@some.host/superset"
|
||||
SQLALCHEMY_ECHO = True
|
||||
19
docker/requirements-extra.txt
Normal file
19
docker/requirements-extra.txt
Normal file
@@ -0,0 +1,19 @@
|
||||
#
|
||||
# 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.
|
||||
#
|
||||
gevent==1.4.0
|
||||
psycopg2-binary==2.7.5
|
||||
redis==3.2.1
|
||||
Reference in New Issue
Block a user