#!/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