Files
KohakuHub/scripts/init-databases.sh
2025-10-10 17:18:03 +08:00

100 lines
3.3 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/sh
# Database initialization script for KohakuHub
# Creates both hub-api and LakeFS databases if they don't exist
# Runs before LakeFS starts
set -e
echo "=== KohakuHub Database Initialization ==="
# Extract PostgreSQL connection details from DATABASE_URL or individual vars
if [ -n "$KOHAKU_HUB_DATABASE_URL" ]; then
# Parse connection string: postgresql://user:pass@host:port/dbname
POSTGRES_USER=$(echo "$KOHAKU_HUB_DATABASE_URL" | sed -n 's|.*://\([^:]*\):.*|\1|p')
POSTGRES_PASSWORD=$(echo "$KOHAKU_HUB_DATABASE_URL" | sed -n 's|.*://[^:]*:\([^@]*\)@.*|\1|p')
POSTGRES_HOST=$(echo "$KOHAKU_HUB_DATABASE_URL" | sed -n 's|.*@\([^:]*\):.*|\1|p')
POSTGRES_PORT=$(echo "$KOHAKU_HUB_DATABASE_URL" | sed -n 's|.*:\([0-9]*\)/.*|\1|p')
POSTGRES_DB=$(echo "$KOHAKU_HUB_DATABASE_URL" | sed -n 's|.*/\([^?]*\).*|\1|p')
else
POSTGRES_USER="${POSTGRES_USER:-hub}"
POSTGRES_PASSWORD="${POSTGRES_PASSWORD:-hubpass}"
POSTGRES_HOST="${POSTGRES_HOST:-postgres}"
POSTGRES_PORT="${POSTGRES_PORT:-5432}"
POSTGRES_DB="${POSTGRES_DB:-kohakuhub}"
fi
LAKEFS_DB="${LAKEFS_DB:-lakefs}"
echo "PostgreSQL Server: $POSTGRES_HOST:$POSTGRES_PORT"
echo "Hub-API Database: $POSTGRES_DB"
echo "LakeFS Database: $LAKEFS_DB"
echo
# Wait for PostgreSQL to be ready
echo "Waiting for PostgreSQL to be ready..."
max_attempts=30
attempt=0
while [ $attempt -lt $max_attempts ]; do
if PGPASSWORD="$POSTGRES_PASSWORD" psql -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER" -d postgres -c "SELECT 1" >/dev/null 2>&1; then
echo "✓ PostgreSQL is ready"
break
fi
attempt=$((attempt + 1))
echo " Attempt $attempt/$max_attempts..."
sleep 2
done
if [ $attempt -eq $max_attempts ]; then
echo "✗ PostgreSQL is not ready after $max_attempts attempts"
echo "⚠ Continuing anyway, but LakeFS may fail to start..."
exit 0
fi
echo
# Function to check if database exists
db_exists() {
local dbname=$1
PGPASSWORD="$POSTGRES_PASSWORD" psql -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER" -d postgres -tAc "SELECT 1 FROM pg_database WHERE datname='$dbname'" 2>/dev/null
}
# Function to create database
create_db() {
local dbname=$1
echo "Creating database '$dbname'..."
if PGPASSWORD="$POSTGRES_PASSWORD" psql -h "$POSTGRES_HOST" -p "$POSTGRES_PORT" -U "$POSTGRES_USER" -d postgres -c "CREATE DATABASE $dbname;" >/dev/null 2>&1; then
echo "✓ Created database '$dbname'"
return 0
else
echo "⚠ Failed to create database '$dbname' (may already exist or insufficient permissions)"
return 1
fi
}
# Create hub-api database if it doesn't exist
echo "Checking hub-api database..."
if [ "$(db_exists "$POSTGRES_DB")" = "1" ]; then
echo "✓ Database '$POSTGRES_DB' already exists"
else
create_db "$POSTGRES_DB"
fi
echo
# Create LakeFS database if it doesn't exist (and it's different from hub-api db)
if [ "$LAKEFS_DB" != "$POSTGRES_DB" ]; then
echo "Checking LakeFS database..."
if [ "$(db_exists "$LAKEFS_DB")" = "1" ]; then
echo "✓ Database '$LAKEFS_DB' already exists"
else
create_db "$LAKEFS_DB"
fi
else
echo " Using same database for both hub-api and LakeFS: $POSTGRES_DB"
fi
echo
echo "=== Database initialization complete ==="
echo