feat: add comprehensive Docker support with multi-stage builds and compose configurations
This commit is contained in:
41
docker/docker-entrypoint.sh
Executable file
41
docker/docker-entrypoint.sh
Executable file
@@ -0,0 +1,41 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
# Environment variable validation
|
||||
if [ "$MCP_MODE" = "http" ] && [ -z "$AUTH_TOKEN" ]; then
|
||||
echo "ERROR: AUTH_TOKEN is required for HTTP mode"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# Database initialization with file locking to prevent race conditions
|
||||
if [ ! -f "/app/data/nodes.db" ]; then
|
||||
echo "Database not found. Initializing..."
|
||||
# Use a lock file to prevent multiple containers from initializing simultaneously
|
||||
(
|
||||
flock -x 200
|
||||
# Double-check inside the lock
|
||||
if [ ! -f "/app/data/nodes.db" ]; then
|
||||
echo "Initializing database..."
|
||||
cd /app && node dist/scripts/rebuild.js || {
|
||||
echo "ERROR: Database initialization failed"
|
||||
exit 1
|
||||
}
|
||||
fi
|
||||
) 200>/app/data/.db.lock
|
||||
fi
|
||||
|
||||
# Fix permissions if running as root (for development)
|
||||
if [ "$(id -u)" = "0" ]; then
|
||||
echo "Running as root, fixing permissions..."
|
||||
chown -R nodejs:nodejs /app/data
|
||||
# Switch to nodejs user
|
||||
exec su-exec nodejs "$@"
|
||||
fi
|
||||
|
||||
# Trap signals for graceful shutdown
|
||||
trap 'echo "Shutting down..."; kill -TERM $PID' TERM INT
|
||||
|
||||
# Execute the main command in background
|
||||
"$@" &
|
||||
PID=$!
|
||||
wait $PID
|
||||
Reference in New Issue
Block a user