From d0efd0e4c925207f7c7ae51c32a3f65b126bff4b Mon Sep 17 00:00:00 2001 From: Chan Chak Shing Date: Fri, 20 Dec 2019 18:57:33 +0800 Subject: [PATCH] Ease switching of database engines for docker builds (#8863) --- docker-compose.yml | 8 ++++---- docker/.env | 26 ++++++++++++++++++------ docker/pythonpath_dev/superset_config.py | 24 ++++++++++++---------- 3 files changed, 37 insertions(+), 21 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 85a473cef4..01b88c0f73 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -19,7 +19,7 @@ x-superset-build: &superset-build dockerfile: Dockerfile target: dev x-superset-depends-on: &superset-depends-on - - postgres + - db - redis x-superset-volumes: &superset-volumes # /app/pythonpath_docker will be appended to the PYTHONPATH in the final container @@ -38,14 +38,14 @@ services: volumes: - redis:/data - postgres: + db: env_file: docker/.env image: postgres:10 restart: unless-stopped ports: - "127.0.0.1:5432:5432" volumes: - - postgres:/var/lib/postgresql/data + - db_home:/var/lib/postgresql/data superset: build: *superset-build @@ -82,7 +82,7 @@ services: volumes: superset_home: external: false - postgres: + db_home: external: false redis: external: false diff --git a/docker/.env b/docker/.env index 0e7cda3389..66c29cac8d 100644 --- a/docker/.env +++ b/docker/.env @@ -15,11 +15,25 @@ # limitations under the License. # COMPOSE_PROJECT_NAME=superset -POSTGRES_DB=superset -POSTGRES_HOST=postgres -POSTGRES_PASSWORD=superset -POSTGRES_PORT=5432 -POSTGRES_USER=superset + +# database configurations (do not modify) +DATABASE_DB=superset +DATABASE_HOST=db +DATABASE_PASSWORD=superset +DATABASE_USER=superset + +# database engine specific environment variables +# change the below if you prefers another database engine +DATABASE_PORT=5432 +DATABASE_DIALECT=postgresql +POSTGRES_DB=${DATABASE_DB} +POSTGRES_USER=${DATABASE_USER} +POSTGRES_PASSWORD=${DATABASE_PASSWORD} +#MYSQL_DATABASE=${DATABASE_DB} +#MYSQL_USER=${DATABASE_USER} +#MYSQL_PASSWORD=${DATABASE_PASSWORD} +#MYSQL_RANDOM_ROOT_PASSWORD=yes + # Add the mapped in /app/pythonpath_docker which allows devs to override stuff PYTHONPATH=/app/pythonpath:/app/pythonpath_docker REDIS_HOST=redis @@ -27,4 +41,4 @@ REDIS_PORT=6379 FLASK_ENV=development SUPERSET_ENV=development -SUPERSET_LOAD_EXAMPLES=yes \ No newline at end of file +SUPERSET_LOAD_EXAMPLES=yes diff --git a/docker/pythonpath_dev/superset_config.py b/docker/pythonpath_dev/superset_config.py index 8a1b7c5919..db0aec6048 100644 --- a/docker/pythonpath_dev/superset_config.py +++ b/docker/pythonpath_dev/superset_config.py @@ -45,19 +45,21 @@ def get_env_variable(var_name, default=None): 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") +DATABASE_DIALECT = get_env_variable("DATABASE_DIALECT") +DATABASE_USER = get_env_variable("DATABASE_USER") +DATABASE_PASSWORD = get_env_variable("DATABASE_PASSWORD") +DATABASE_HOST = get_env_variable("DATABASE_HOST") +DATABASE_PORT = get_env_variable("DATABASE_PORT") +DATABASE_DB = get_env_variable("DATABASE_DB") # The SQLAlchemy connection string. -SQLALCHEMY_DATABASE_URI = "postgresql://%s:%s@%s:%s/%s" % ( - POSTGRES_USER, - POSTGRES_PASSWORD, - POSTGRES_HOST, - POSTGRES_PORT, - POSTGRES_DB, +SQLALCHEMY_DATABASE_URI = "%s://%s:%s@%s:%s/%s" % ( + DATABASE_DIALECT, + DATABASE_USER, + DATABASE_PASSWORD, + DATABASE_HOST, + DATABASE_PORT, + DATABASE_DB, ) REDIS_HOST = get_env_variable("REDIS_HOST")