mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-07 10:04:07 +00:00
61 lines
2.0 KiB
Bash
Executable File
61 lines
2.0 KiB
Bash
Executable File
#!/usr/bin/env bash
|
|
# The goal of this script is to start a database server as a docker container.
|
|
#
|
|
# Required environment variables:
|
|
# - DB: The database server to start, either "postgres" or "mysql".
|
|
#
|
|
# - PGUSER/PGPASSWORD: For the creation of a postgresql user with associated
|
|
# password.
|
|
|
|
set -eu
|
|
|
|
# Stop and remove any existing database container
|
|
DOCKER_CONTAINER="hub-test-$DB"
|
|
docker rm -f "$DOCKER_CONTAINER" 2>/dev/null || true
|
|
|
|
# Prepare environment variables to startup and await readiness of either a mysql
|
|
# or postgresql server.
|
|
if [[ "$DB" == "mysql" ]]; then
|
|
# Environment variables can influence both the mysql server in the docker
|
|
# container and the mysql client.
|
|
#
|
|
# ref server: https://hub.docker.com/_/mysql/
|
|
# ref client: https://dev.mysql.com/doc/refman/5.7/en/setting-environment-variables.html
|
|
#
|
|
DOCKER_RUN_ARGS="-p 3306:3306 --env MYSQL_ALLOW_EMPTY_PASSWORD=1 mysql:8.0"
|
|
READINESS_CHECK="mysql --user root --execute \q"
|
|
elif [[ "$DB" == "postgres" ]]; then
|
|
# Environment variables can influence both the postgresql server in the
|
|
# docker container and the postgresql client (psql).
|
|
#
|
|
# ref server: https://hub.docker.com/_/postgres/
|
|
# ref client: https://www.postgresql.org/docs/9.5/libpq-envars.html
|
|
#
|
|
# POSTGRES_USER / POSTGRES_PASSWORD will create a user on startup of the
|
|
# postgres server, but PGUSER and PGPASSWORD are the environment variables
|
|
# used by the postgresql client psql, so we configure the user based on how
|
|
# we want to connect.
|
|
#
|
|
DOCKER_RUN_ARGS="-p 5432:5432 --env "POSTGRES_USER=${PGUSER}" --env "POSTGRES_PASSWORD=${PGPASSWORD}" postgres:15.1"
|
|
READINESS_CHECK="psql --command \q"
|
|
else
|
|
echo '$DB must be mysql or postgres'
|
|
exit 1
|
|
fi
|
|
|
|
# Start the database server
|
|
docker run --detach --name "$DOCKER_CONTAINER" $DOCKER_RUN_ARGS
|
|
|
|
# Wait for the database server to start
|
|
echo -n "waiting for $DB "
|
|
for i in {1..60}; do
|
|
if $READINESS_CHECK; then
|
|
echo 'done'
|
|
break
|
|
else
|
|
echo -n '.'
|
|
sleep 1
|
|
fi
|
|
done
|
|
$READINESS_CHECK
|