diff --git a/docker/Dockerfile b/docker/Dockerfile index 05311abc..1a662eb0 100644 --- a/docker/Dockerfile +++ b/docker/Dockerfile @@ -85,5 +85,8 @@ EXPOSE 8080 8081 8082 27017 # Copy and set entrypoint COPY docker/entrypoint.sh /entrypoint.sh -RUN chmod +x /entrypoint.sh +COPY docker/supervisord.conf /etc/supervisor/conf.d/supervisord.conf +RUN chmod +x /entrypoint.sh && \ + mkdir -p /var/log/supervisor && \ + chown -R root:root /var/log/supervisor CMD ["/entrypoint.sh"] \ No newline at end of file diff --git a/docker/entrypoint.sh b/docker/entrypoint.sh index 5253035c..fb7ff5d1 100644 --- a/docker/entrypoint.sh +++ b/docker/entrypoint.sh @@ -1,43 +1,11 @@ #!/bin/bash set -e -# Create MongoDB pid directory if it doesn't exist -mkdir -p /var/run/mongodb /data/db /var/log/mongodb +# Create required directories +mkdir -p /var/run/mongodb /data/db /var/log/{mongodb,supervisor,nginx} /var/lib/nginx chown -R mongodb:mongodb /var/run/mongodb /data/db /var/log/mongodb - -# Start MongoDB (first without --fork to see errors) -echo "Starting MongoDB..." -gosu mongodb mongod --dbpath $MONGODB_DATA_DIR --logpath $MONGODB_LOG_DIR/mongodb.log & -MONGO_PID=$! - -# Wait for MongoDB to be ready -echo "Waiting for MongoDB to start..." -until gosu mongodb mongo --eval "print(\"waited for connection\")" > /dev/null 2>&1; do - sleep 0.5 - if ! kill -0 $MONGO_PID 2>/dev/null; then - echo "MongoDB failed to start. Checking logs:" - cat $MONGODB_LOG_DIR/mongodb.log - exit 1 - fi -done -echo "MongoDB has started" - -# Start nginx -echo "Starting nginx..." -nginx - -# Change to app directory and ensure permissions -cd /app +chown -R www-data:www-data /var/log/nginx /var/lib/nginx chown -R node:node /app -# Start the SSH service -echo "Starting SSH service..." -gosu node node src/backend/ssh.cjs & - -# Start the database service -echo "Starting database service..." -gosu node node src/backend/database.cjs & - -# Keep the container running and show MongoDB logs -echo "All services started. Tailing MongoDB logs..." -tail -f $MONGODB_LOG_DIR/mongodb.log \ No newline at end of file +# Start all services using supervisor +exec /usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf \ No newline at end of file diff --git a/docker/supervisord.conf b/docker/supervisord.conf new file mode 100644 index 00000000..8df8d70f --- /dev/null +++ b/docker/supervisord.conf @@ -0,0 +1,47 @@ +[supervisord] +nodaemon=true +user=root +logfile=/var/log/supervisor/supervisord.log +pidfile=/var/run/supervisord.pid + +[program:mongodb] +command=/usr/bin/mongod --dbpath /data/db --logpath /var/log/mongodb/mongodb.log +user=mongodb +autostart=true +autorestart=true +startsecs=10 +startretries=3 +stdout_logfile=/var/log/supervisor/mongodb.stdout.log +stderr_logfile=/var/log/supervisor/mongodb.stderr.log + +[program:nginx] +command=/usr/sbin/nginx -g "daemon off;" +user=root +autostart=true +autorestart=true +startsecs=5 +startretries=3 +stdout_logfile=/var/log/supervisor/nginx.stdout.log +stderr_logfile=/var/log/supervisor/nginx.stderr.log + +[program:ssh-service] +command=/usr/bin/node /app/src/backend/ssh.cjs +user=node +directory=/app +autostart=true +autorestart=true +startsecs=10 +startretries=3 +stdout_logfile=/var/log/supervisor/ssh.stdout.log +stderr_logfile=/var/log/supervisor/ssh.stderr.log + +[program:database-service] +command=/usr/bin/node /app/src/backend/database.cjs +user=node +directory=/app +autostart=true +autorestart=true +startsecs=10 +startretries=3 +stdout_logfile=/var/log/supervisor/database.stdout.log +stderr_logfile=/var/log/supervisor/database.stderr.log \ No newline at end of file