mirror of
https://github.com/Dispatcharr/Dispatcharr.git
synced 2026-01-23 02:35:14 +00:00
Added better checks to verify database is ready to accept connections.
This commit is contained in:
parent
22eb0a23c8
commit
3583f7c104
1 changed files with 41 additions and 11 deletions
|
|
@ -1,5 +1,12 @@
|
|||
#!/bin/sh
|
||||
|
||||
set -e # Exit immediately if a command exits with a non-zero status
|
||||
|
||||
# Function to echo with timestamp
|
||||
echo_with_timestamp() {
|
||||
echo "$(date '+%Y-%m-%d %H:%M:%S') - $1"
|
||||
}
|
||||
|
||||
# Set PostgreSQL environment variables
|
||||
export POSTGRES_DB=${POSTGRES_DB:-dispatcharr}
|
||||
export POSTGRES_USER=${POSTGRES_USER:-dispatch}
|
||||
|
|
@ -10,11 +17,11 @@ export PGDATA=${PGDATA:-/app/data/db}
|
|||
export PG_BINDIR="/usr/lib/postgresql/14/bin"
|
||||
|
||||
# Echo environment variables for debugging
|
||||
echo "POSTGRES_DB: $POSTGRES_DB"
|
||||
echo "POSTGRES_USER: $POSTGRES_USER"
|
||||
echo "POSTGRES_PASSWORD: $POSTGRES_PASSWORD"
|
||||
echo "POSTGRES_HOST: $POSTGRES_HOST"
|
||||
echo "POSTGRES_PORT: $POSTGRES_PORT"
|
||||
echo_with_timestamp "POSTGRES_DB: $POSTGRES_DB"
|
||||
echo_with_timestamp "POSTGRES_USER: $POSTGRES_USER"
|
||||
echo_with_timestamp "POSTGRES_PASSWORD: $POSTGRES_PASSWORD"
|
||||
echo_with_timestamp "POSTGRES_HOST: $POSTGRES_HOST"
|
||||
echo_with_timestamp "POSTGRES_PORT: $POSTGRES_PORT"
|
||||
|
||||
# Create group if it doesn't exist
|
||||
if ! getent group "$PGID" >/dev/null 2>&1; then
|
||||
|
|
@ -32,7 +39,7 @@ fi
|
|||
|
||||
# Initialize PostgreSQL database
|
||||
if [ -z "$(ls -A "$PGDATA")" ]; then
|
||||
echo "Initializing PostgreSQL database..."
|
||||
echo_with_timestamp "Initializing PostgreSQL database..."
|
||||
mkdir -p "$PGDATA"
|
||||
chown -R postgres:postgres "$PGDATA"
|
||||
chmod 700 "$PGDATA"
|
||||
|
|
@ -42,7 +49,6 @@ if [ -z "$(ls -A "$PGDATA")" ]; then
|
|||
# Configure PostgreSQL
|
||||
echo "host all all 0.0.0.0/0 md5" >> "$PGDATA/pg_hba.conf"
|
||||
echo "listen_addresses='*'" >> "$PGDATA/postgresql.conf"
|
||||
|
||||
fi
|
||||
|
||||
# Start PostgreSQL
|
||||
|
|
@ -50,16 +56,18 @@ su - postgres -c "$PG_BINDIR/pg_ctl -D $PGDATA start -w -t 300 -o '-c port=${POS
|
|||
|
||||
# Wait for PostgreSQL to be ready
|
||||
until su - postgres -c "$PG_BINDIR/pg_isready -h ${POSTGRES_HOST} -p ${POSTGRES_PORT}" >/dev/null 2>&1; do
|
||||
echo "Waiting for PostgreSQL to be ready..."
|
||||
echo_with_timestamp "Waiting for PostgreSQL to be ready..."
|
||||
sleep 1
|
||||
done
|
||||
|
||||
# Setup database if needed
|
||||
if ! su - postgres -c "psql -p ${POSTGRES_PORT} -tAc \"SELECT 1 FROM pg_database WHERE datname = '$POSTGRES_DB';\"" | grep -q 1; then
|
||||
# Create PostgreSQL database
|
||||
echo_with_timestamp "Creating PostgreSQL database..."
|
||||
su - postgres -c "createdb -p ${POSTGRES_PORT} ${POSTGRES_DB}"
|
||||
|
||||
|
||||
# Create user, set ownership, and grant privileges
|
||||
echo_with_timestamp "Creating PostgreSQL user..."
|
||||
su - postgres -c "psql -p ${POSTGRES_PORT} -d ${POSTGRES_DB}" <<EOF
|
||||
DO \$\$
|
||||
BEGIN
|
||||
|
|
@ -69,22 +77,44 @@ BEGIN
|
|||
END
|
||||
\$\$;
|
||||
EOF
|
||||
echo_with_timestamp "Setting PostgreSQL user privileges..."
|
||||
su postgres -c "$PG_BINDIR/psql -p ${POSTGRES_PORT} -c \"ALTER DATABASE ${POSTGRES_DB} OWNER TO $POSTGRES_USER;\""
|
||||
su postgres -c "$PG_BINDIR/psql -p ${POSTGRES_PORT} -c \"GRANT ALL PRIVILEGES ON DATABASE ${POSTGRES_DB} TO $POSTGRES_USER;\""
|
||||
# Finished setting up PosgresSQL database
|
||||
echo_with_timestamp "PostgreSQL database setup complete."
|
||||
fi
|
||||
|
||||
# Test PostgreSQL connection
|
||||
pg_isready -h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER
|
||||
# Test PostgreSQL connection and exit if unavailable
|
||||
echo_with_timestamp "Testing database connection..."
|
||||
if ! pg_isready -h $POSTGRES_HOST -p $POSTGRES_PORT -U $POSTGRES_USER -d $POSTGRES_DB; then
|
||||
echo_with_timestamp "ERROR: PostgreSQL is not ready. Exiting..."
|
||||
exit 1
|
||||
else
|
||||
echo_with_timestamp "PostgreSQL is ready to accept connections."
|
||||
fi
|
||||
|
||||
# Verify database accessibility
|
||||
echo_with_timestamp "Verifying database accessibility..."
|
||||
if ! su - $POSTGRES_USER -c "psql -p ${POSTGRES_PORT} -d ${POSTGRES_DB} -c 'SELECT 1;'" >/dev/null 2>&1; then
|
||||
echo_with_timestamp "ERROR: PostgreSQL is running but the database is not accessible. Exiting..."
|
||||
exit 1
|
||||
else
|
||||
echo_with_timestamp "PostgreSQL database is accessible."
|
||||
fi
|
||||
|
||||
# Start Redis
|
||||
echo_with_timestamp "Starting Redis..."
|
||||
service redis-server start
|
||||
|
||||
# Run Django commands
|
||||
echo_with_timestamp "Running Django commands..."
|
||||
python manage.py collectstatic --noinput || true
|
||||
python manage.py migrate --noinput || true
|
||||
|
||||
# Start Celery
|
||||
echo_with_timestamp "Starting Celery..."
|
||||
celery -A dispatcharr worker --loglevel=info &
|
||||
|
||||
# Start Gunicorn
|
||||
echo_with_timestamp "Starting Gunicorn..."
|
||||
gunicorn --workers=4 --worker-class=gevent --timeout=300 --bind 0.0.0.0:9191 dispatcharr.wsgi:application
|
||||
Loading…
Add table
Add a link
Reference in a new issue