adding phase 5 init framework, added deployment ease scripts
This commit is contained in:
80
app/docker-entrypoint.sh
Normal file
80
app/docker-entrypoint.sh
Normal file
@@ -0,0 +1,80 @@
|
||||
#!/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 "$@"
|
||||
Reference in New Issue
Block a user