81 lines
2.6 KiB
Bash
81 lines
2.6 KiB
Bash
#!/bin/bash
|
|
set -e
|
|
|
|
# SneakyScanner Docker Entrypoint Script
|
|
# This script ensures the database is initialized before starting the Flask app
|
|
|
|
DB_PATH="${DATABASE_URL#sqlite:///}" # Extract path from sqlite:////app/data/sneakyscanner.db
|
|
DB_DIR=$(dirname "$DB_PATH")
|
|
INIT_MARKER="$DB_DIR/.db_initialized"
|
|
PASSWORD_FILE="/app/logs/admin_password.txt" # Save to logs dir (mounted, no permission issues)
|
|
|
|
echo "=== SneakyScanner Startup ==="
|
|
echo "Database path: $DB_PATH"
|
|
echo "Database directory: $DB_DIR"
|
|
|
|
# Ensure database directory exists
|
|
mkdir -p "$DB_DIR"
|
|
|
|
# Check if this is the first run (database doesn't exist or not initialized)
|
|
if [ ! -f "$DB_PATH" ] || [ ! -f "$INIT_MARKER" ]; then
|
|
echo ""
|
|
echo "=== First Run Detected ==="
|
|
echo "Initializing database..."
|
|
|
|
# Set default password from environment or generate a random one
|
|
if [ -z "$INITIAL_PASSWORD" ]; then
|
|
echo "INITIAL_PASSWORD not set, generating random password..."
|
|
# Generate a 32-character alphanumeric password
|
|
INITIAL_PASSWORD=$(cat /dev/urandom | tr -dc 'A-Za-z0-9' | head -c 32)
|
|
# Ensure logs directory exists
|
|
mkdir -p /app/logs
|
|
echo "$INITIAL_PASSWORD" > "$PASSWORD_FILE"
|
|
echo "✓ Random password generated and saved to: ./logs/admin_password.txt"
|
|
SAVE_PASSWORD_MESSAGE=true
|
|
fi
|
|
|
|
# Run database initialization
|
|
python3 /app/init_db.py \
|
|
--db-url "$DATABASE_URL" \
|
|
--password "$INITIAL_PASSWORD" \
|
|
--no-migrations \
|
|
--force
|
|
|
|
# Create marker file to indicate successful initialization
|
|
if [ $? -eq 0 ]; then
|
|
touch "$INIT_MARKER"
|
|
echo "✓ Database initialized successfully"
|
|
echo ""
|
|
echo "=== IMPORTANT ==="
|
|
if [ "$SAVE_PASSWORD_MESSAGE" = "true" ]; then
|
|
echo "Login password saved to: ./logs/admin_password.txt"
|
|
echo "Password: $INITIAL_PASSWORD"
|
|
else
|
|
echo "Login password: $INITIAL_PASSWORD"
|
|
fi
|
|
echo "Please change this password after logging in!"
|
|
echo "=================="
|
|
echo ""
|
|
else
|
|
echo "✗ Database initialization failed!"
|
|
exit 1
|
|
fi
|
|
else
|
|
echo "Database already initialized, skipping init..."
|
|
fi
|
|
|
|
# Apply any pending migrations (if using migrations in future)
|
|
if [ -f "/app/alembic.ini" ]; then
|
|
echo "Checking for pending migrations..."
|
|
# Uncomment when ready to use migrations:
|
|
# alembic upgrade head
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Starting Flask Application ==="
|
|
echo "Flask will be available at http://localhost:5000"
|
|
echo ""
|
|
|
|
# Execute the main application
|
|
exec "$@"
|