This commit is contained in:
101
backend/entrypoint.sh
Normal file
101
backend/entrypoint.sh
Normal file
@@ -0,0 +1,101 @@
|
||||
#!/bin/sh
|
||||
set -e
|
||||
|
||||
export PATH="/usr/local/bin:$PATH"
|
||||
|
||||
APP_DIR="/app"
|
||||
APP_USER="appuser"
|
||||
APP_UID=1000
|
||||
STATIC_ROOT="${STATIC_ROOT:-/app/staticfiles}"
|
||||
MEDIA_ROOT="${MEDIA_ROOT:-/app/media}"
|
||||
|
||||
# Kreiraj korisnika 'appuser' s UID 1000 ako ne postoji
|
||||
if ! getent passwd "${APP_USER}" > /dev/null; then
|
||||
echo "--> Kreiram ${APP_USER}..."
|
||||
addgroup --system --gid ${APP_UID} ${APP_USER} || true
|
||||
adduser --system --uid ${APP_UID} --ingroup ${APP_USER} --no-create-home --disabled-login ${APP_USER} || true
|
||||
fi
|
||||
|
||||
# Ako smo root, pokušaj osigurati ownership. Ako nismo root, samo logiramo i nastavljamo.
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
echo "--> (root) Kreiram/ajustiram direktorije i dozvole..."
|
||||
mkdir -p "${STATIC_ROOT}" "${MEDIA_ROOT}" "${APP_DIR}"
|
||||
# pokušaj chown, ali ne izlazi na grešku ako neuspije (možda host FS to ne dozvoljava)
|
||||
if chown -R ${APP_USER}:${APP_USER} "${STATIC_ROOT}" "${MEDIA_ROOT}" "${APP_DIR}"; then
|
||||
echo "--> Chown uspješan."
|
||||
else
|
||||
echo "--> Upozorenje: chown nije uspio (moguće root_squash ili mount bez chown dopuštenja)."
|
||||
fi
|
||||
else
|
||||
echo "--> Nismo root (uid=$(id -u)), preskačem chown. Provjeri vlasništvo na hostu ako su problemi s permisijama."
|
||||
fi
|
||||
|
||||
# Helper: run command as appuser but return to the script (do not replace shell)
|
||||
run_as_appuser_now() {
|
||||
if command -v gosu >/dev/null 2>&1; then
|
||||
gosu ${APP_USER} "$@"
|
||||
elif command -v su-exec >/dev/null 2>&1; then
|
||||
su-exec ${APP_USER} "$@"
|
||||
elif command -v runuser >/dev/null 2>&1; then
|
||||
runuser -u ${APP_USER} -- "$@"
|
||||
else
|
||||
# If we're already non-root (appuser), run directly; if root and no helpers, run directly anyway (with warning)
|
||||
if [ "$(id -u)" -ne 0 ]; then
|
||||
"$@"
|
||||
else
|
||||
echo "--> Upozorenje: nema gosu/su-exec/runuser; izvršavam kao root (nepoželjno)."
|
||||
"$@"
|
||||
fi
|
||||
fi
|
||||
}
|
||||
|
||||
# Helper: exec the given command as appuser (replace current shell / PID 1)
|
||||
exec_as_appuser() {
|
||||
# Ako smo već appuser, samo izvrši naredbu direktno
|
||||
if [ "$(id -u -n)" = "${APP_USER}" ]; then
|
||||
exec "$@"
|
||||
# Inače, pokušaj koristiti alate za switch
|
||||
elif command -v gosu >/dev/null 2>&1; then
|
||||
exec gosu ${APP_USER} "$@"
|
||||
elif command -v su-exec >/dev/null 2>&1; then
|
||||
exec su-exec ${APP_USER} "$@"
|
||||
else
|
||||
# Fallback
|
||||
exec "$@"
|
||||
fi
|
||||
}
|
||||
|
||||
if [ "$1" = "gunicorn" ]; then
|
||||
echo "--> Pokrećem migracije..."
|
||||
# Ako smo root, pokrenimo migrate kao appuser; ako smo non-root (već appuser), pokreni direktno
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
run_as_appuser_now python manage.py migrate --noinput
|
||||
else
|
||||
python manage.py migrate --noinput
|
||||
fi
|
||||
|
||||
echo "--> Osiguravam prava nad statikom prije collectstatic..."
|
||||
mkdir -p "${STATIC_ROOT}"
|
||||
if [ "$(id -u)" -eq 0 ]; then
|
||||
chown -R ${APP_USER}:${APP_USER} "${STATIC_ROOT}" || echo "--> chown statika nije uspio"
|
||||
fi
|
||||
|
||||
echo "--> Skupljam statiku..."
|
||||
if command -v gosu >/dev/null 2>&1 || command -v su-exec >/dev/null 2>&1 || command -v runuser >/dev/null 2>&1; then
|
||||
run_as_appuser_now python manage.py collectstatic --noinput
|
||||
else
|
||||
python manage.py collectstatic --noinput
|
||||
fi
|
||||
|
||||
echo "--> Pokrećem Gunicorn kao appuser..."
|
||||
exec_as_appuser gunicorn --bind 0.0.0.0:8000 --workers 3 core.wsgi:application
|
||||
|
||||
elif [ "$1" = "celery" ]; then
|
||||
echo "--> Pokrećem Celery kao appuser..."
|
||||
shift
|
||||
# Replace PID1 with celery running as appuser
|
||||
exec_as_appuser celery "$@"
|
||||
|
||||
else
|
||||
exec "$@"
|
||||
fi
|
||||
Reference in New Issue
Block a user