Init docker for local development environment. (#4193)
This commit will try to dockerize superset in local development
environment.
The basic design is:
- Enable superset, redis and postgres service instead of using sqlite,
just want to simulate production environment settings
- Use environment variables to config various app settings. It's easy to
run and config superset to any environment if we use environment than
traditional config files
- For local development environment, we just expose postgres and redis
to local host machine thus you can connect local port via `psql` or
`redis-cli`
- Wrap start up command in a standard `docker-entrypoint.sh`, and use
`tail -f /dev/null` combined with manually `superset runserver -d` to
make sure that code error didn't cause the container to fail.
- Use volumes to share code between host and container, thus you can use
your favourite tools to modify code and your code will run in
containerized environment
- Use volumes to persistent postgres and redis data, and also
`node_modules` data.
- If we don't cache `node_modules` in docker volume, then every time
run docker build, the `node_modules` directory, will is about 500 MB
large, will be sent to docker daemon, and make the build quite slow.
- Wrap initialization commands to a single script `docker-init.sh`
After this dockerize setup, any developers who want to contribute to
superset, just follow three easy steps:
```
git clone https://github.com/apache/incubator-superset/
cd incubator-superset
cp contrib/docker/{docker-build.sh,docker-compose.yml,docker-entrypoint.sh,docker-init.sh,Dockerfile} .
cp contrib/docker/superset_config.py superset/
bash -x docker-build.sh
docker-compose up -d
docker-compose exec superset bash
bash docker-init.sh
```
2018-06-10 00:26:41 -04:00
|
|
|
|
#!/usr/bin/env bash
|
2019-01-22 11:21:13 -05:00
|
|
|
|
#
|
|
|
|
|
# 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.
|
|
|
|
|
#
|
2019-12-05 19:47:22 -05:00
|
|
|
|
set -e
|
|
|
|
|
|
2020-11-20 17:18:17 -05:00
|
|
|
|
#
|
|
|
|
|
# Always install local overrides first
|
|
|
|
|
#
|
|
|
|
|
/app/docker/docker-bootstrap.sh
|
|
|
|
|
|
2019-12-05 19:47:22 -05:00
|
|
|
|
STEP_CNT=4
|
|
|
|
|
|
|
|
|
|
echo_step() {
|
|
|
|
|
cat <<EOF
|
|
|
|
|
|
|
|
|
|
######################################################################
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Init Step ${1}/${STEP_CNT} [${2}] -- ${3}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
######################################################################
|
|
|
|
|
|
|
|
|
|
EOF
|
|
|
|
|
}
|
2020-12-14 11:06:19 -05:00
|
|
|
|
ADMIN_PASSWORD="admin"
|
|
|
|
|
# If Cypress run – overwrite the password for admin and export env variables
|
|
|
|
|
if [ "$CYPRESS_CONFIG" == "true" ]; then
|
|
|
|
|
ADMIN_PASSWORD="general"
|
|
|
|
|
export SUPERSET_CONFIG=tests.superset_test_config
|
|
|
|
|
export SUPERSET_TESTENV=true
|
|
|
|
|
export ENABLE_REACT_CRUD_VIEWS=true
|
|
|
|
|
export SUPERSET__SQLALCHEMY_DATABASE_URI=postgresql+psycopg2://superset:superset@db:5432/superset
|
|
|
|
|
fi
|
2020-09-28 13:51:50 -04:00
|
|
|
|
# Initialize the database
|
|
|
|
|
echo_step "1" "Starting" "Applying DB migrations"
|
|
|
|
|
superset db upgrade
|
|
|
|
|
echo_step "1" "Complete" "Applying DB migrations"
|
|
|
|
|
|
2019-12-03 13:37:18 -05:00
|
|
|
|
# Create an admin user
|
2020-12-14 11:06:19 -05:00
|
|
|
|
echo_step "2" "Starting" "Setting up admin user ( admin / $ADMIN_PASSWORD )"
|
2019-12-07 19:09:14 -05:00
|
|
|
|
superset fab create-admin \
|
2019-12-03 13:37:18 -05:00
|
|
|
|
--username admin \
|
|
|
|
|
--firstname Superset \
|
|
|
|
|
--lastname Admin \
|
|
|
|
|
--email admin@superset.com \
|
2020-12-14 11:06:19 -05:00
|
|
|
|
--password $ADMIN_PASSWORD
|
2020-09-28 13:51:50 -04:00
|
|
|
|
echo_step "2" "Complete" "Setting up admin user"
|
|
|
|
|
# Create default roles and permissions
|
|
|
|
|
echo_step "3" "Starting" "Setting up roles and perms"
|
|
|
|
|
superset init
|
|
|
|
|
echo_step "3" "Complete" "Setting up roles and perms"
|
Init docker for local development environment. (#4193)
This commit will try to dockerize superset in local development
environment.
The basic design is:
- Enable superset, redis and postgres service instead of using sqlite,
just want to simulate production environment settings
- Use environment variables to config various app settings. It's easy to
run and config superset to any environment if we use environment than
traditional config files
- For local development environment, we just expose postgres and redis
to local host machine thus you can connect local port via `psql` or
`redis-cli`
- Wrap start up command in a standard `docker-entrypoint.sh`, and use
`tail -f /dev/null` combined with manually `superset runserver -d` to
make sure that code error didn't cause the container to fail.
- Use volumes to share code between host and container, thus you can use
your favourite tools to modify code and your code will run in
containerized environment
- Use volumes to persistent postgres and redis data, and also
`node_modules` data.
- If we don't cache `node_modules` in docker volume, then every time
run docker build, the `node_modules` directory, will is about 500 MB
large, will be sent to docker daemon, and make the build quite slow.
- Wrap initialization commands to a single script `docker-init.sh`
After this dockerize setup, any developers who want to contribute to
superset, just follow three easy steps:
```
git clone https://github.com/apache/incubator-superset/
cd incubator-superset
cp contrib/docker/{docker-build.sh,docker-compose.yml,docker-entrypoint.sh,docker-init.sh,Dockerfile} .
cp contrib/docker/superset_config.py superset/
bash -x docker-build.sh
docker-compose up -d
docker-compose exec superset bash
bash docker-init.sh
```
2018-06-10 00:26:41 -04:00
|
|
|
|
|
2018-11-27 14:19:55 -05:00
|
|
|
|
if [ "$SUPERSET_LOAD_EXAMPLES" = "yes" ]; then
|
|
|
|
|
# Load some data to play with
|
2020-09-28 13:51:50 -04:00
|
|
|
|
echo_step "4" "Starting" "Loading examples"
|
2020-12-14 11:06:19 -05:00
|
|
|
|
# If Cypress run which consumes superset_test_config – load required data for tests
|
|
|
|
|
if [ "$CYPRESS_CONFIG" == "true" ]; then
|
|
|
|
|
superset load_test_users
|
|
|
|
|
superset load_examples --load-test-data
|
|
|
|
|
else
|
|
|
|
|
superset load_examples
|
|
|
|
|
fi
|
2020-09-28 13:51:50 -04:00
|
|
|
|
echo_step "4" "Complete" "Loading examples"
|
2018-11-27 14:19:55 -05:00
|
|
|
|
fi
|