#!/usr/bin/env sh set -e # Start the Flask backend on 0.0.0.0:5000 (bind all interfaces so nginx can # proxy to it inside the container). DATA_DIR is /app/backend/data by default # (a mounted volume makes it survive container recreate). # # NOTE: nginx owns port 80 (the inbound entrypoint EasyPanel exposes). We # therefore pin Flask to 5000 explicitly and IGNORE the PORT env var — EasyPanel # injects PORT=80, and if Flask also took 80 it would clash with nginx # ("Address already in use"). nginx proxies /api -> 127.0.0.1:5000. cd /app/backend export HOST="${HOST:-0.0.0.0}" export PORT="5000" export PAPER_BIND_HOST="$HOST" # pid1 helper: run nginx in foreground + Flask subprocess so the container # stays alive and signals are handled. Keep it simple and robust. # Start Flask in the background python run.py & FLASK_PID=$! # Start nginx in the foreground (its own master + workers) nginx -g "daemon off;" & NGINX_PID=$! # forward signals to both and wait trap 'kill $FLASK_PID $NGINX_PID 2>/dev/null || true' INT TERM wait $FLASK_PID wait $NGINX_PID