prvi kod za live uporabu
Some checks failed
ERP CI Pipeline / test (push) Has been cancelled

This commit is contained in:
mariomitte
2026-07-09 21:21:17 +02:00
parent 857bb65d52
commit 5d39e048ba
239 changed files with 25151 additions and 0 deletions

101
backend/entrypoint.sh Normal file
View 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