mirror of
https://github.com/StarFleetCPTN/GoMFT.git
synced 2026-09-08 23:50:48 +02:00
- Added support for build arguments in Dockerfile to specify UID, GID, version, build time, and commit hash. - Updated docker-compose.yaml to utilize UID and GID for non-root user execution, improving file permission handling. - Introduced entrypoint.sh script to manage user permissions and environment setup at container startup. - Enhanced application logging to include version information during startup. - Updated README with new instructions for running the application with specific user IDs and environment variables.
89 lines
3.5 KiB
Bash
89 lines
3.5 KiB
Bash
#!/bin/sh
|
|
set -e
|
|
|
|
# Default username
|
|
USERNAME=${USERNAME:-gomft}
|
|
|
|
# If PUID/PGID env vars are set, update the user's UID/GID
|
|
if [ -n "${PUID}" ] && [ -n "${PGID}" ]; then
|
|
echo "🔒 Updating user ${USERNAME} with UID:GID = ${PUID}:${PGID}"
|
|
|
|
# Make sure we have directories to work with
|
|
mkdir -p /app/data /app/backups
|
|
|
|
# Check if we're on Alpine (busybox)
|
|
if grep -q "Alpine" /etc/os-release 2>/dev/null; then
|
|
echo "Detected Alpine Linux, using busybox usermod/groupmod..."
|
|
|
|
# Update group ID first
|
|
if [ "$(getent group ${USERNAME} | cut -d: -f3)" != "${PGID}" ]; then
|
|
echo "Updating GID to ${PGID}..."
|
|
groupmod -g ${PGID} ${USERNAME} || echo "⚠️ Failed to change GID"
|
|
fi
|
|
|
|
# Update user ID
|
|
if [ "$(id -u ${USERNAME})" != "${PUID}" ]; then
|
|
echo "Updating UID to ${PUID}..."
|
|
usermod -u ${PUID} ${USERNAME} || echo "⚠️ Failed to change UID"
|
|
fi
|
|
else
|
|
echo "Non-Alpine system, using standard user management..."
|
|
# Handle user/group changes with error recovery
|
|
{
|
|
# First remove the user (since user has the group as primary group)
|
|
if getent passwd ${USERNAME} > /dev/null; then
|
|
echo "Removing existing user ${USERNAME}"
|
|
userdel ${USERNAME} 2>/dev/null || true
|
|
fi
|
|
|
|
# Wait a moment for system to clean up user
|
|
sleep 1
|
|
|
|
# Then remove the group
|
|
if getent group ${USERNAME} > /dev/null; then
|
|
echo "Removing existing group ${USERNAME}"
|
|
groupdel ${USERNAME} 2>/dev/null || true
|
|
fi
|
|
|
|
# Recreate group and user in the correct order
|
|
echo "Creating group ${USERNAME} with GID ${PGID}"
|
|
groupadd -g ${PGID} ${USERNAME} 2>/dev/null || groupadd ${USERNAME} 2>/dev/null || true
|
|
|
|
echo "Creating user ${USERNAME} with UID ${PUID}"
|
|
useradd -u ${PUID} -g ${USERNAME} -s /bin/sh ${USERNAME} 2>/dev/null ||
|
|
useradd -g ${USERNAME} -s /bin/sh ${USERNAME} 2>/dev/null || true
|
|
} || {
|
|
echo "⚠️ Warning: Failed to update UID/GID, continuing with built-in user"
|
|
}
|
|
fi
|
|
|
|
# Fix ownership of app directories
|
|
echo "Setting ownership of app directories"
|
|
chown -R ${USERNAME}:${USERNAME} /app/data /app/backups || echo "⚠️ Warning: Failed to change ownership"
|
|
|
|
# Ensure .env file exists and has correct permissions
|
|
if [ -f /app/.env ]; then
|
|
echo "Found .env file, setting permissions..."
|
|
chown ${USERNAME}:${USERNAME} /app/.env || echo "⚠️ Warning: Failed to change .env ownership"
|
|
chmod 644 /app/.env || echo "⚠️ Warning: Failed to change .env permissions"
|
|
else
|
|
echo "No .env file found, creating empty one..."
|
|
touch /app/.env
|
|
chown ${USERNAME}:${USERNAME} /app/.env || echo "⚠️ Warning: Failed to change .env ownership"
|
|
chmod 644 /app/.env || echo "⚠️ Warning: Failed to change .env permissions"
|
|
fi
|
|
|
|
# Run the application as the specified user
|
|
echo "Starting application as user ${USERNAME}"
|
|
if command -v su-exec >/dev/null 2>&1; then
|
|
exec su-exec ${USERNAME} "$@"
|
|
elif command -v gosu >/dev/null 2>&1; then
|
|
exec gosu ${USERNAME} "$@"
|
|
else
|
|
exec su -m ${USERNAME} -c "$*"
|
|
fi
|
|
else
|
|
# Run as the predefined user (set during build)
|
|
echo "Starting application with predefined user"
|
|
exec "$@"
|
|
fi |