#!/bin/sh set -e # Exit on error # Default configuration PUID=${PUID:-0} PGID=${PGID:-0} # Store PIDs in variables JAVA_PID="" PM2_PID="" NGINX_PID="" cleanup() { echo "Cleaning up processes..." # Check and kill each process individually if [ -n "$JAVA_PID" ]; then kill -TERM "$JAVA_PID" 2>/dev/null || true fi if [ -n "$PM2_PID" ]; then kill -TERM "$PM2_PID" 2>/dev/null || true fi if [ -n "$NGINX_PID" ]; then kill -TERM "$NGINX_PID" 2>/dev/null || true fi wait || true echo "All processes have been terminated" exit 0 } setup_permissions() { if [ "$(id -u)" = "0" ] && [ "$PUID" != "0" ]; then echo "Setting up directory permissions..." mkdir -p /.pm2 chown -R "${PUID}:${PGID}" /app /etc/nginx /var/lib/nginx /var/log/nginx /run/nginx.pid /etc/nginx/nginx.conf /.pm2 fi } start_services() { cmd_prefix="" if [ "$(id -u)" = "0" ] && [ "$PUID" != "0" ]; then cmd_prefix="gosu ${PUID}:${PGID}" fi echo "Starting Java service..." if [ -n "$cmd_prefix" ]; then $cmd_prefix java -jar -Djava.library.path=/app/tdlib /app/api.jar & else java -jar -Djava.library.path=/app/tdlib /app/api.jar & fi JAVA_PID=$! echo "Starting PM2 service..." if [ -n "$cmd_prefix" ]; then $cmd_prefix pm2 start /app/web/pm2.json --no-daemon --silent & else pm2 start /app/web/pm2.json --no-daemon --silent & fi PM2_PID=$! echo "Starting Nginx service..." if [ -n "$cmd_prefix" ]; then $cmd_prefix nginx -g 'daemon off;' & else nginx -g 'daemon off;' & fi NGINX_PID=$! } # Set up signal handlers trap cleanup TERM INT # Replace nginx.conf.template with environment variables envsubst '$NGINX_PORT' < /etc/nginx/nginx.conf.template > /etc/nginx/nginx.conf # Set up permissions setup_permissions # Start services start_services # Wait for all services to complete wait