Files
endurain/docker/start.sh
João Vitória Silva 04a253a062 Derive backend/frontend paths in Docker scripts
Remove BACKEND_DIR from Dockerfile ENV and update docker/start.sh to compute backend and frontend paths at runtime. start.sh now sets BACKEND_FOLDER (fallback /app/backend), derives DATA_FOLDER and LOGS_FOLDER from it, and defines FRONTEND_FOLDER (/app/frontend/dist) earlier so env.js can be written reliably. This avoids depending on the removed BACKEND_DIR ENV and eliminates a duplicated FRONTEND_FOLDER assignment. #507
2026-02-10 15:28:34 -08:00

83 lines
2.1 KiB
Bash

#!/bin/sh
set -e
echo_info_log() {
echo "INFO: $1"
}
echo_error_log() {
echo "ERROR: $1" >&2
}
validate_id() {
case "$1" in
''|*[!0-9]*)
echo_error_log "Invalid ID: $1. Must be a non-negative integer."
exit 1
;;
esac
}
validate_id "$UID"
validate_id "$GID"
echo_info_log "UID=$UID, GID=$GID"
# Create required directories with correct ownership
# These directories are created as root before switching to the non-root user
# to ensure proper permissions on fresh volume mounts
BACKEND_FOLDER="${BACKEND_DIR:-/app/backend}"
DATA_FOLDER="${DATA_DIR:-$BACKEND_FOLDER/data}"
LOGS_FOLDER="${LOGS_DIR:-$BACKEND_FOLDER/logs}"
FRONTEND_FOLDER="${FRONTEND_DIR:-/app/frontend/dist}"
REQUIRED_DIRS="
$DATA_FOLDER
$DATA_FOLDER/user_images
$DATA_FOLDER/server_images
$DATA_FOLDER/activity_media
$DATA_FOLDER/activity_files
$DATA_FOLDER/activity_files/processed
$DATA_FOLDER/activity_files/bulk_import
$DATA_FOLDER/activity_files/bulk_import/import_errors
$LOGS_FOLDER
"
for dir in $REQUIRED_DIRS; do
if [ ! -d "$dir" ]; then
echo_info_log "Creating directory: $dir"
mkdir -p "$dir"
fi
echo_info_log "Setting ownership recursively of $dir to $UID:$GID"
chown -R "$UID:$GID" "$dir"
done
if [ -n "$ENDURAIN_HOST" ]; then
echo "window.env = { ENDURAIN_HOST: \"$ENDURAIN_HOST\" };" > "$FRONTEND_FOLDER/env.js"
echo_info_log "Runtime env.js written with ENDURAIN_HOST=$ENDURAIN_HOST"
fi
# Set log level (default: info)
# Supported levels: critical, error, warning, info, debug, trace
LOG_LEVEL="${LOG_LEVEL:-info}"
# Validate log level
case "$LOG_LEVEL" in
critical|error|warning|info|debug|trace)
# Valid log level
;;
*)
echo_error_log "Invalid LOG_LEVEL '$LOG_LEVEL'. Supported levels: critical, error, warning, info, debug, trace. Defaulting to 'info'."
LOG_LEVEL="info"
;;
esac
echo_info_log "Starting FastAPI with BEHIND_PROXY=$BEHIND_PROXY, LOG_LEVEL=$LOG_LEVEL"
CMD="uvicorn main:app --host 0.0.0.0 --port 8080 --log-level $LOG_LEVEL"
if [ "$BEHIND_PROXY" = "true" ]; then
CMD="$CMD --proxy-headers"
fi
exec gosu "$UID:$GID" $CMD