diff --git a/docker-compose.proxyless.yml b/docker-compose.proxyless.yml index ecfec9c..83a6532 100644 --- a/docker-compose.proxyless.yml +++ b/docker-compose.proxyless.yml @@ -35,7 +35,7 @@ services: container_name: synapsis-app restart: unless-stopped ports: - - "127.0.0.1:${APP_HOST_PORT:-3000}:3000" + - "127.0.0.1:${PORT:-3000}:${PORT:-3000}" environment: DATABASE_URL: postgresql://${DB_USER:-synapsis}:${DB_PASSWORD:-changeme}@postgres:5432/${DB_NAME:-synapsis} AUTH_SECRET: ${AUTH_SECRET} @@ -45,7 +45,7 @@ services: ALLOW_LOCALHOST: ${ALLOW_LOCALHOST:-} ADMIN_EMAILS: ${ADMIN_EMAILS} BOT_MAX_PER_USER: ${BOT_MAX_PER_USER:-5} - PORT: "3000" + PORT: ${PORT:-3000} NODE_ENV: production volumes: - uploads_data:/app/uploads @@ -55,7 +55,7 @@ services: postgres: condition: service_healthy healthcheck: - test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:3000/api/health || exit 1"] + test: ["CMD-SHELL", "wget -q --spider http://127.0.0.1:${PORT:-3000}/api/health || exit 1"] interval: 30s timeout: 10s retries: 3 diff --git a/docker/.env.example b/docker/.env.example index f96ee70..94dc042 100644 --- a/docker/.env.example +++ b/docker/.env.example @@ -34,14 +34,11 @@ DB_NAME=synapsis # OPTIONAL: General Settings # =========================================== -# Application port - 'auto' scans 3000-3020 for first available (recommended) -# Or set a specific port: PORT=3000 +# Application port. +# Default install (with bundled Caddy): PORT=auto scans 3000-3020 automatically. +# Existing reverse proxy mode (PROXY=none): use a fixed localhost port, e.g. PORT=3000. PORT=auto -# External reverse proxy mode only: -# Port on localhost to expose Synapsis for nginx/Traefik/Caddy -# APP_HOST_PORT=3000 - # Allow localhost domains in production (set only for local testing) # ALLOW_LOCALHOST=1 diff --git a/docker/README.md b/docker/README.md index 73ada1f..5fc4480 100644 --- a/docker/README.md +++ b/docker/README.md @@ -49,7 +49,6 @@ Optional (advanced): **Port Configuration:** - `PORT=auto` (default) — Automatically finds an available port between 3000-3020 - `PORT=3000` — Use a specific port instead -- `APP_HOST_PORT=3000` — Only used in advanced `PROXY=none` installs --- @@ -66,9 +65,11 @@ docker compose up -d This mode: - skips the bundled Caddy service -- binds Synapsis to `127.0.0.1:${APP_HOST_PORT:-3000}` +- binds Synapsis to `127.0.0.1:${PORT:-3000}` - expects your existing reverse proxy to forward traffic there +In `PROXY=none` mode, `PORT` is the localhost port your reverse proxy should target. The installer automatically changes `PORT=auto` to `PORT=3000` unless you override it. + Example nginx site: ```nginx @@ -152,8 +153,8 @@ For the application port itself, `PORT=auto` (default) automatically finds an av # Check what's using the port sudo netstat -tlnp | grep :3000 -# Switch back to auto or choose a different port -# Edit .env: PORT=auto +# Choose a different fixed port in /opt/synapsis/.env +# Example: PORT=3013 ``` ### Database connection failed diff --git a/docker/install.sh b/docker/install.sh index 8265617..231bd69 100644 --- a/docker/install.sh +++ b/docker/install.sh @@ -79,13 +79,24 @@ set_env_value() { rm -f "${file}.bak" } +get_env_value() { + file="$1" + key="$2" + + if [ ! -f "$file" ]; then + return 1 + fi + + sed -n -E "s/^${key}=(.*)$/\\1/p" "$file" | head -n 1 +} + generate_db_password() { openssl rand -base64 24 | tr -d '\n' | tr '/+' '_-' | cut -c1-32 } -resolve_proxyless_host_port() { - if [ -n "${APP_HOST_PORT:-}" ]; then - printf '%s\n' "${APP_HOST_PORT}" +resolve_proxyless_port() { + if [ -n "${PORT:-}" ] && [ "${PORT}" != "auto" ]; then + printf '%s\n' "${PORT}" return fi @@ -131,7 +142,7 @@ require_command cp RAW_BASE="https://raw.githubusercontent.com/${REPO}/${REF}" PROXY="$(normalize_proxy_mode "${PROXY}")" -PROXYLESS_HOST_PORT="$(resolve_proxyless_host_port)" +PROXYLESS_PORT="$(resolve_proxyless_port)" echo "========================================" echo " Synapsis Docker Installer" @@ -182,8 +193,21 @@ if [ ! -f "${INSTALL_DIR}/.env" ]; then set_env_value "${INSTALL_DIR}/.env" "ADMIN_EMAILS" "${ADMIN_EMAILS}" echo "📧 Set ADMIN_EMAILS=${ADMIN_EMAILS}" fi + + if [ "${PROXY}" = "none" ]; then + set_env_value "${INSTALL_DIR}/.env" "PORT" "${PROXYLESS_PORT}" + echo "📡 Set PORT=${PROXYLESS_PORT} for proxyless mode" + fi else echo "📝 Existing ${INSTALL_DIR}/.env found, leaving it unchanged" + + if [ "${PROXY}" = "none" ]; then + current_port="$(get_env_value "${INSTALL_DIR}/.env" "PORT" || true)" + if [ -z "${current_port}" ] || [ "${current_port}" = "auto" ]; then + set_env_value "${INSTALL_DIR}/.env" "PORT" "${PROXYLESS_PORT}" + echo "📡 Updated PORT=${PROXYLESS_PORT} for proxyless mode" + fi + fi fi echo "" @@ -196,6 +220,6 @@ else echo " 2. Start Synapsis:" echo " cd ${INSTALL_DIR} && docker compose up -d" echo " 3. Configure your existing reverse proxy to forward to:" - echo " http://127.0.0.1:${PROXYLESS_HOST_PORT}" - echo " (change APP_HOST_PORT in ${INSTALL_DIR}/.env if you want a different localhost port)" + echo " http://127.0.0.1:${PROXYLESS_PORT}" + echo " (change PORT in ${INSTALL_DIR}/.env if you want a different localhost port)" fi