diff --git a/docker/docker-compose.storage-mirror.yml b/docker/docker-compose.storage-mirror.yml --- a/docker/docker-compose.storage-mirror.yml +++ b/docker/docker-compose.storage-mirror.yml @@ -16,6 +16,9 @@ environment: # unset PGHOST as db service crashes otherwise PGHOST: + # unset POSTGRES_DB: we're handling db creation ourselves in the backend + # service entrypoint + POSTGRES_DB: # and an RPC server swh-storage-mirror: diff --git a/docker/docker-compose.yml b/docker/docker-compose.yml --- a/docker/docker-compose.yml +++ b/docker/docker-compose.yml @@ -97,6 +97,9 @@ environment: # unset PGHOST as db service crashes otherwise PGHOST: + # unset POSTGRES_DB: we're handling db creation ourselves in the backend + # service entrypoint + POSTGRES_DB: swh-scheduler: image: swh/stack @@ -164,6 +167,9 @@ environment: # unset PGHOST as db service crashes otherwise PGHOST: + # unset POSTGRES_DB: we're handling db creation ourselves in the backend + # service entrypoint + POSTGRES_DB: swh-storage: image: swh/stack @@ -210,6 +216,9 @@ environment: # unset PGHOST as db service crashes otherwise PGHOST: + # unset POSTGRES_DB: we're handling db creation ourselves in the backend + # service entrypoint + POSTGRES_DB: swh-idx-storage: image: swh/stack @@ -284,6 +293,9 @@ environment: # unset PGHOST as db service crashes otherwise PGHOST: + # unset POSTGRES_DB: we're handling db creation ourselves in the backend + # service entrypoint + POSTGRES_DB: swh-vault: image: swh/stack diff --git a/docker/services/swh-indexer-storage/entrypoint.sh b/docker/services/swh-indexer-storage/entrypoint.sh --- a/docker/services/swh-indexer-storage/entrypoint.sh +++ b/docker/services/swh-indexer-storage/entrypoint.sh @@ -14,11 +14,15 @@ ;; *) - wait_pgsql + wait_pgsql template1 - echo Setup the database - PGPASSWORD=${POSTGRES_PASSWORD} swh db-init \ - --db-name ${POSTGRES_DB} indexer + echo Database setup + if ! check_pgsql_db_created; then + echo Creating database and extensions... + swh db create --db-name ${POSTGRES_DB} indexer + fi + echo Initializing the database... + swh db init --db-name ${POSTGRES_DB} indexer echo Starting the swh-indexer-storage API server exec gunicorn --bind 0.0.0.0:5007 \ diff --git a/docker/services/swh-scheduler/entrypoint.sh b/docker/services/swh-scheduler/entrypoint.sh --- a/docker/services/swh-scheduler/entrypoint.sh +++ b/docker/services/swh-scheduler/entrypoint.sh @@ -17,11 +17,15 @@ "$@" fi else - wait_pgsql + wait_pgsql template1 - echo Setup the swh-scheduler API database - PGPASSWORD=${POSTGRES_PASSWORD} swh db-init \ - --db-name ${POSTGRES_DB} scheduler + echo swh-scheduler database setup + if ! check_pgsql_db_created; then + echo Creating database and extensions... + swh db create --db-name ${POSTGRES_DB} scheduler + fi + echo Initializing the database... + swh db init --db-name ${POSTGRES_DB} scheduler echo Starting the swh-scheduler API server exec gunicorn --bind 0.0.0.0:5008 \ diff --git a/docker/services/swh-storage/entrypoint.sh b/docker/services/swh-storage/entrypoint.sh --- a/docker/services/swh-storage/entrypoint.sh +++ b/docker/services/swh-storage/entrypoint.sh @@ -26,11 +26,15 @@ ;; *) if [ "$STORAGE_BACKEND" = "postgresql" ]; then - wait_pgsql - - echo Setup the database - PGPASSWORD=${POSTGRES_PASSWORD} swh db-init \ - --db-name ${POSTGRES_DB} storage + wait_pgsql template1 + + echo Database setup + if ! check_pgsql_db_created; then + echo Creating database and extensions... + swh db create --db-name ${POSTGRES_DB} storage + fi + echo Initializing the database... + swh db init --db-name ${POSTGRES_DB} storage fi echo Starting the swh-storage API server diff --git a/docker/services/swh-vault/entrypoint.sh b/docker/services/swh-vault/entrypoint.sh --- a/docker/services/swh-vault/entrypoint.sh +++ b/docker/services/swh-vault/entrypoint.sh @@ -27,11 +27,15 @@ # ensure the pathslicing root dir for the cache exists mkdir -p /srv/softwareheritage/vault - wait_pgsql + wait_pgsql template1 - echo Setup the swh-vault API database - PGPASSWORD=${POSTGRES_PASSWORD} swh db-init vault \ - --db-name ${POSTGRES_DB} + echo swh-vault Database setup + if ! check_pgsql_db_created; then + echo Creating database and extensions... + swh db create --db-name ${POSTGRES_DB} vault + fi + echo Initializing the database... + swh db init --db-name ${POSTGRES_DB} vault echo Starting the swh-vault API server exec swh vault rpc-serve -C ${SWH_CONFIG_FILENAME} diff --git a/docker/utils/pgsql.sh b/docker/utils/pgsql.sh --- a/docker/utils/pgsql.sh +++ b/docker/utils/pgsql.sh @@ -1,7 +1,10 @@ #!/bin/bash setup_pgsql () { - echo "${PGHOST}:5432:postgres:${PGUSER}:${POSTGRES_PASSWORD}" > ~/.pgpass + : > ~/.pgpass + + echo "${PGHOST}:5432:template1:${PGUSER}:${POSTGRES_PASSWORD}" >> ~/.pgpass + echo "${PGHOST}:5432:${PGUSER}:${PGUSER}:${POSTGRES_PASSWORD}" >> ~/.pgpass echo "${PGHOST}:5432:${POSTGRES_DB}:${PGUSER}:${POSTGRES_PASSWORD}" >> ~/.pgpass cat > ~/.pg_service.conf < /dev/null 2> /dev/null; do sleep 1; done -} \ No newline at end of file + until psql "dbname=${db_to_check} port=5432 host=${PGHOST} user=${PGUSER}" -c "select 'postgresql is up!' as connected"; do sleep 1; done +} + +check_pgsql_db_created () { + psql "dbname=${POSTGRES_DB} port=5432 host=${PGHOST} user=${PGUSER}" -c "select 'postgresql is up!' as connected" >/dev/null 2>/dev/null +}