From 64d2a608886870fa62c6ac1b43d3891b2efe2bb5 Mon Sep 17 00:00:00 2001 From: Scott Weldon Date: Mon, 25 Dec 2023 10:24:57 -0800 Subject: [PATCH 1/3] Move user create outside of database-exists check --- root/entrypoint.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/root/entrypoint.sh b/root/entrypoint.sh index 5aadb12..f05c506 100755 --- a/root/entrypoint.sh +++ b/root/entrypoint.sh @@ -64,18 +64,18 @@ provisioner() { # Configure Postgres database if [ "$SYMFONY__ENV__DATABASE_DRIVER" = "pdo_pgsql" ] && [ "$POPULATE_DATABASE" = "True" ] && [ "$POSTGRES_PASSWORD" != "" ] ; then export PGPASSWORD="${POSTGRES_PASSWORD}" + USER_EXISTS="$(psql -qAt -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ + -c "SELECT 1 FROM pg_roles WHERE rolname = '${SYMFONY__ENV__DATABASE_USER}';")" + if [ "$USER_EXISTS" != "1" ]; then + psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ + -c "CREATE ROLE ${SYMFONY__ENV__DATABASE_USER} with PASSWORD '${SYMFONY__ENV__DATABASE_PASSWORD}' LOGIN;" + fi DATABASE_EXISTS="$(psql -qAt -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ -c "SELECT 1 FROM pg_catalog.pg_database WHERE datname = '${SYMFONY__ENV__DATABASE_NAME}';")" if [ "$DATABASE_EXISTS" != "1" ]; then echo "Configuring the Postgres database ..." psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ -c "CREATE DATABASE ${SYMFONY__ENV__DATABASE_NAME};" - USER_EXISTS="$(psql -qAt -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ - -c "SELECT 1 FROM pg_roles WHERE rolname = '${SYMFONY__ENV__DATABASE_USER}';")" - if [ "$USER_EXISTS" != "1" ]; then - psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ - -c "CREATE ROLE ${SYMFONY__ENV__DATABASE_USER} with PASSWORD '${SYMFONY__ENV__DATABASE_PASSWORD}' LOGIN;" - fi install_wallabag else echo "WARN: Postgres database is already configured. Remove the environment variable with root password." From 4d52431c95eda467470fa11372bc8c53c0dc71e6 Mon Sep 17 00:00:00 2001 From: Scott Weldon Date: Mon, 25 Dec 2023 10:27:54 -0800 Subject: [PATCH 2/3] Check if tables exist before installing This works better than checking just the database, because it could be that an empty database has already been created (with e.g. Docker Compose). TABLES_EXIST should be empty if no tables, or will return a 1 for *each* table that exists. --- root/entrypoint.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/root/entrypoint.sh b/root/entrypoint.sh index f05c506..9aaf34a 100755 --- a/root/entrypoint.sh +++ b/root/entrypoint.sh @@ -76,6 +76,12 @@ provisioner() { echo "Configuring the Postgres database ..." psql -q -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ -c "CREATE DATABASE ${SYMFONY__ENV__DATABASE_NAME};" + fi + + TABLES_EXIST="$(psql -qAt -h "${SYMFONY__ENV__DATABASE_HOST}" -p "${SYMFONY__ENV__DATABASE_PORT}" -U "${POSTGRES_USER}" \ + -c "SELECT 1 FROM pg_catalog.pg_tables WHERE schemaname = 'public';")" + if [ "$TABLES_EXIST" == "" ]; then + echo "Installing Wallabag ..." install_wallabag else echo "WARN: Postgres database is already configured. Remove the environment variable with root password." From 7784559b85141dce5d80ebed6b50b96b8f65a86d Mon Sep 17 00:00:00 2001 From: Scott Weldon Date: Mon, 25 Dec 2023 10:29:35 -0800 Subject: [PATCH 3/3] Run migrations when installing This throws errors, but they can be ignored. --- root/entrypoint.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/root/entrypoint.sh b/root/entrypoint.sh index 9aaf34a..0702fe8 100755 --- a/root/entrypoint.sh +++ b/root/entrypoint.sh @@ -82,6 +82,7 @@ provisioner() { -c "SELECT 1 FROM pg_catalog.pg_tables WHERE schemaname = 'public';")" if [ "$TABLES_EXIST" == "" ]; then echo "Installing Wallabag ..." + exec su -c "bin/console doctrine:migrations:migrate --env=prod --no-interaction" -s /bin/sh nobody install_wallabag else echo "WARN: Postgres database is already configured. Remove the environment variable with root password."