Files

65 lines
2.5 KiB
Bash
Executable File

#!/bin/bash
set -e
# PostgreSQL Initialization Script
# Creates databases and users for homelab applications
# Runs once during initial container startup
echo "🔧 Initializing PostgreSQL databases and users..."
# Source environment variables if available
if [ -f /run/secrets/postgres_passwords ]; then
source /run/secrets/postgres_passwords
fi
# Default passwords (override via environment variables)
: ${AUTHENTIK_DB_PASSWORD:=CHANGEME_AUTHENTIK_PASSWORD}
: ${GITEA_DB_PASSWORD:=CHANGEME_GITEA_PASSWORD}
# Create Authentik database and user
echo "📦 Creating Authentik database..."
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE DATABASE authentik;
CREATE USER authentik_user WITH PASSWORD '$AUTHENTIK_DB_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE authentik TO authentik_user;
-- Grant schema privileges (required for PostgreSQL 15+)
\c authentik
GRANT ALL ON SCHEMA public TO authentik_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO authentik_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO authentik_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO authentik_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO authentik_user;
EOSQL
# Create Gitea database and user (for future migration)
echo "📦 Creating Gitea database..."
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
CREATE DATABASE gitea;
CREATE USER gitea_user WITH PASSWORD '$GITEA_DB_PASSWORD';
GRANT ALL PRIVILEGES ON DATABASE gitea TO gitea_user;
\c gitea
GRANT ALL ON SCHEMA public TO gitea_user;
GRANT ALL PRIVILEGES ON ALL TABLES IN SCHEMA public TO gitea_user;
GRANT ALL PRIVILEGES ON ALL SEQUENCES IN SCHEMA public TO gitea_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON TABLES TO gitea_user;
ALTER DEFAULT PRIVILEGES IN SCHEMA public GRANT ALL ON SEQUENCES TO gitea_user;
EOSQL
# Add future databases here as needed
# echo "📦 Creating future_app database..."
# psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" <<-EOSQL
# CREATE DATABASE future_app;
# CREATE USER future_user WITH PASSWORD '$FUTURE_APP_PASSWORD';
# GRANT ALL PRIVILEGES ON DATABASE future_app TO future_user;
# EOSQL
echo "✅ PostgreSQL initialization complete!"
echo ""
echo "📊 Database Summary:"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -c '\l'
echo ""
echo "👥 User Summary:"
psql -v ON_ERROR_STOP=1 --username "$POSTGRES_USER" -c '\du'