Dispatcharr/docker/entrypoint.aio.sh
Dispatcharr b5cc5dcb37 Revert "Merge branch 'main' of https://github.com/Dispatcharr/Dispatcharr"
This reverts commit dc4de65cbf, reversing
changes made to 814d6a6cda.

Attempt to fix
2025-03-03 15:18:11 -06:00

105 lines
3 KiB
Bash
Executable file

#!/bin/bash
# Run Django migrations and collect static files
python manage.py collectstatic --noinput
python manage.py migrate --noinput
# Function to clean up only running processes
cleanup() {
echo "🔥 Cleanup triggered! Stopping services..."
for pid in "${pids[@]}"; do
if [ -n "$pid" ] && kill -0 "$pid" 2>/dev/null; then
echo "⛔ Stopping process (PID: $pid)..."
kill -TERM "$pid" 2>/dev/null
else
echo "✅ Process (PID: $pid) already stopped."
fi
done
wait
}
# Catch termination signals (CTRL+C, Docker Stop, etc.)
trap cleanup TERM INT
# Initialize an array to store PIDs
pids=()
GUNICORN_PORT=9191
# If running in development mode, install and start frontend
if [ "$DISPATCHARR_ENV" = "dev" ]; then
echo "🚀 Development Mode - Setting up Frontend..."
GUNICORN_PORT=5656
# Install Node.js
apt-get update && apt-get install -y nodejs
# Install frontend dependencies
cd /app/frontend && npm install
cd /app
# Start React development server
echo "🚀 Starting React Dev Server..."
cd /app/frontend
PORT=9191 ./node_modules/pm2/bin/pm2 --name test start npm -- start
./node_modules/pm2/bin/pm2 logs &
react_pid=$!
echo "✅ React started with PID $react_pid"
pids+=("$react_pid")
cd /app
fi
# If running in `dev` or `aio`, start Redis and Celery
if [ "$DISPATCHARR_ENV" = "dev" ] || [ "$DISPATCHARR_ENV" = "aio" ]; then
echo "🚀 Running Redis and Celery for '$DISPATCHARR_ENV'..."
# Start Redis
echo "🚀 Starting Redis..."
redis-server --daemonize no &
sleep 1 # Give Redis time to start
redis_pid=$(pgrep -x redis-server)
if [ -n "$redis_pid" ]; then
echo "✅ Redis started with PID $redis_pid"
pids+=("$redis_pid")
else
echo "❌ Redis failed to start!"
fi
# Start Celery
echo "🚀 Starting Celery..."
celery -A dispatcharr worker -l info &
celery_pid=$!
echo "✅ Celery started with PID $celery_pid"
pids+=("$celery_pid")
fi
# Always start Gunicorn
echo "🚀 Starting Gunicorn..."
gunicorn --workers=4 --worker-class=gevent --timeout=300 --bind 0.0.0.0:${GUNICORN_PORT} dispatcharr.wsgi:application &
gunicorn_pid=$!
echo "✅ Gunicorn started with PID $gunicorn_pid"
pids+=("$gunicorn_pid")
# Log PIDs
echo "📝 Process PIDs: ${pids[*]}"
# Wait for at least one process to exit and log the process that exited first
if [ ${#pids[@]} -gt 0 ]; then
echo "⏳ Waiting for processes to exit..."
ps -aux | grep -E 'redis-server|celery|gunicorn|npm'
wait -n "${pids[@]}"
echo "🚨 One of the processes exited! Checking which one..."
for pid in "${pids[@]}"; do
if ! kill -0 "$pid" 2>/dev/null; then
process_name=$(ps -p "$pid" -o comm=)
echo "❌ Process $process_name (PID: $pid) has exited!"
fi
done
else
echo "❌ No processes started. Exiting."
exit 1
fi
# Cleanup and stop remaining processes
cleanup