Files
Keith SmithandClaude Sonnet 4.5 2afeec85da Update entrypoint.sh to support PostgreSQL
- Auto-detect database type from DATABASE_URL
- Use pg_isready for PostgreSQL health check
- Use mysqladmin ping for MariaDB/MySQL
- Default to postgres if not specified

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
2025-12-26 16:48:43 -07:00

117 lines
3.3 KiB
Bash
Executable File

#!/bin/bash
set -e
# Colors for output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}KeepItGoing Docker Entrypoint${NC}"
echo -e "${GREEN}========================================${NC}"
# Extract database host from DATABASE_URL or use DB_HOST env var
DB_HOST=${DB_HOST:-postgres}
# Detect database type from DATABASE_URL
if echo "$DATABASE_URL" | grep -q "mysql\|mariadb"; then
DB_TYPE="mysql"
DB_CHECK_CMD="mysqladmin ping -h${DB_HOST} --silent"
elif echo "$DATABASE_URL" | grep -q "postgres"; then
DB_TYPE="postgres"
DB_CHECK_CMD="pg_isready -h ${DB_HOST} -U ${DB_USER:-keepitgoing}"
else
# Default to postgres
DB_TYPE="postgres"
DB_CHECK_CMD="pg_isready -h ${DB_HOST} -U ${DB_USER:-keepitgoing}"
fi
# Wait for database to be ready
echo -e "${YELLOW}Waiting for database at ${DB_HOST}...${NC}"
max_attempts=30
attempt=0
while ! eval $DB_CHECK_CMD 2>/dev/null; do
attempt=$((attempt + 1))
if [ $attempt -eq $max_attempts ]; then
echo -e "${RED}ERROR: Database did not become available in time${NC}"
exit 1
fi
echo "Waiting for database... ($attempt/$max_attempts)"
sleep 2
done
echo -e "${GREEN}✓ Database is ready!${NC}"
# Function to run migrations
run_migrations() {
echo -e "${YELLOW}Running database migrations...${NC}"
python manage.py migrate --noinput
echo -e "${GREEN}✓ Migrations complete${NC}"
}
# Function to collect static files
collect_static() {
echo -e "${YELLOW}Collecting static files...${NC}"
python manage.py collectstatic --noinput
echo -e "${GREEN}✓ Static files collected${NC}"
}
# Determine which service to start based on command argument
case "$1" in
"gunicorn")
echo -e "${GREEN}Starting Gunicorn WSGI server...${NC}"
run_migrations
collect_static
# Get Gunicorn config from environment or use defaults
WORKERS=${GUNICORN_WORKERS:-3}
TIMEOUT=${GUNICORN_TIMEOUT:-60}
echo -e "${GREEN}Configuration:${NC}"
echo " Workers: $WORKERS"
echo " Timeout: $TIMEOUT"
echo " Bind: 0.0.0.0:8000"
exec gunicorn config.wsgi:application \
--bind 0.0.0.0:8000 \
--workers $WORKERS \
--timeout $TIMEOUT \
--access-logfile - \
--error-logfile - \
--log-level info
;;
"celery-worker")
echo -e "${GREEN}Starting Celery worker...${NC}"
# Wait a bit more for web service to run migrations
sleep 5
exec celery -A config worker \
--loglevel=info \
--concurrency=2
;;
"celery-beat")
echo -e "${GREEN}Starting Celery beat scheduler...${NC}"
# Wait for web service to run migrations and create database tables
sleep 10
exec celery -A config beat \
--loglevel=info \
--scheduler django_celery_beat.schedulers:DatabaseScheduler
;;
"runserver")
echo -e "${GREEN}Starting Django development server...${NC}"
run_migrations
collect_static
exec python manage.py runserver 0.0.0.0:8000
;;
*)
# If command is not recognized, just execute it
echo -e "${YELLOW}Executing custom command: $@${NC}"
exec "$@"
;;
esac