From f33e1ad94c4fa558f78248ea4a6da0d9840e6aa4 Mon Sep 17 00:00:00 2001 From: Min Idzelis Date: Fri, 18 Jul 2025 11:19:06 -0400 Subject: [PATCH] feat: relocate scripts, PATH update (#20002) Relocate scripts, and PATH updates --- docker/docker-compose.dev.yml | 4 +- e2e/docker-compose.yml | 1 - server/Dockerfile | 6 +-- {docker/scripts => server/bin}/get-cpus.sh | 0 server/bin/immich-admin | 2 +- server/bin/immich-dev | 8 +++- server/bin/start.sh | 44 ++++++++++++++++++++++ server/start.sh | 29 -------------- web/Dockerfile | 5 ++- web/bin/immich-web | 1 + 10 files changed, 60 insertions(+), 40 deletions(-) rename {docker/scripts => server/bin}/get-cpus.sh (100%) create mode 100755 server/bin/start.sh delete mode 100755 server/start.sh diff --git a/docker/docker-compose.dev.yml b/docker/docker-compose.dev.yml index 56d1817317..f3d1e83fb2 100644 --- a/docker/docker-compose.dev.yml +++ b/docker/docker-compose.dev.yml @@ -16,7 +16,7 @@ name: immich-dev services: immich-server: container_name: immich_server - command: ['/usr/src/app/bin/immich-dev'] + command: ['immich-dev'] image: immich-server-dev:latest # extends: # file: hwaccel.transcoding.yml @@ -70,7 +70,7 @@ services: # user: 0:0 build: context: ../web - command: ['/usr/src/app/bin/immich-web'] + command: ['immich-web'] env_file: - .env ports: diff --git a/e2e/docker-compose.yml b/e2e/docker-compose.yml index 6ec5402360..26c3951278 100644 --- a/e2e/docker-compose.yml +++ b/e2e/docker-compose.yml @@ -3,7 +3,6 @@ name: immich-e2e services: immich-server: container_name: immich-e2e-server - command: ['./start.sh'] image: immich-server:latest build: context: ../ diff --git a/server/Dockerfile b/server/Dockerfile index 0b3b864c95..b95887f18b 100644 --- a/server/Dockerfile +++ b/server/Dockerfile @@ -12,7 +12,7 @@ ENV PATH="${PATH}:/usr/src/app/bin" \ IMMICH_ENV=development \ NVIDIA_DRIVER_CAPABILITIES=all \ NVIDIA_VISIBLE_DEVICES=all -ENTRYPOINT ["tini", "--", "/bin/sh"] +ENTRYPOINT ["tini", "--", "/bin/sh", "-c"] FROM dev AS dev-container-server @@ -110,8 +110,6 @@ COPY --from=prod /usr/src/app/bin ./bin COPY --from=web /usr/src/app/build /build/www COPY server/resources resources COPY server/package.json server/package-lock.json ./ -COPY server/start*.sh ./ -COPY "docker/scripts/get-cpus.sh" ./ RUN npm install -g @immich/cli && npm cache clean --force COPY LICENSE /licenses/LICENSE.txt COPY LICENSE /LICENSE @@ -134,7 +132,7 @@ ENV IMMICH_SOURCE_URL=https://github.com/immich-app/immich/commit/${BUILD_SOURCE VOLUME /usr/src/app/upload EXPOSE 2283 -ENTRYPOINT ["tini", "--", "/bin/bash"] +ENTRYPOINT ["tini", "--", "/bin/bash", "-c"] CMD ["start.sh"] HEALTHCHECK CMD immich-healthcheck diff --git a/docker/scripts/get-cpus.sh b/server/bin/get-cpus.sh similarity index 100% rename from docker/scripts/get-cpus.sh rename to server/bin/get-cpus.sh diff --git a/server/bin/immich-admin b/server/bin/immich-admin index 30fd33a20a..0465a362b8 100755 --- a/server/bin/immich-admin +++ b/server/bin/immich-admin @@ -1,3 +1,3 @@ #!/usr/bin/env sh -/usr/src/app/start.sh immich-admin "$@" +start.sh immich-admin "$@" diff --git a/server/bin/immich-dev b/server/bin/immich-dev index 177455d037..85d75b8b0c 100755 --- a/server/bin/immich-dev +++ b/server/bin/immich-dev @@ -1,3 +1,9 @@ #!/usr/bin/env bash -node /usr/src/app/node_modules/.bin/nest start --debug "0.0.0.0:9230" --watch -- "$@" +if [ "$IMMICH_ENV" != "development" ]; then + echo "This command can only be run in development environments" + exit 1 +fi + +cd /usr/src/app || exit 1 +node ./node_modules/.bin/nest start --debug "0.0.0.0:9230" --watch -- "$@" diff --git a/server/bin/start.sh b/server/bin/start.sh new file mode 100755 index 0000000000..7c6069570d --- /dev/null +++ b/server/bin/start.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +echo "Initializing Immich $IMMICH_SOURCE_REF" + +lib_path="/usr/lib/$(arch)-linux-gnu/libmimalloc.so.2" +if [ -f "$lib_path" ]; then + export LD_PRELOAD="$lib_path" +else + echo "skipping libmimalloc - path not found $lib_path" +fi +export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/jellyfin-ffmpeg/lib" +SERVER_HOME=/usr/src/app + +read_file_and_export() { + if [ -n "${!1}" ]; then + content="$(cat "${!1}")" + export "$2"="${content}" + unset "$1" + fi +} +read_file_and_export "DB_URL_FILE" "DB_URL" +read_file_and_export "DB_HOSTNAME_FILE" "DB_HOSTNAME" +read_file_and_export "DB_DATABASE_NAME_FILE" "DB_DATABASE_NAME" +read_file_and_export "DB_USERNAME_FILE" "DB_USERNAME" +read_file_and_export "DB_PASSWORD_FILE" "DB_PASSWORD" +read_file_and_export "REDIS_PASSWORD_FILE" "REDIS_PASSWORD" + +if CPU_CORES="${CPU_CORES:=$(get-cpus.sh 2>/dev/null)}"; then + echo "Detected CPU Cores: $CPU_CORES" + if [ "$CPU_CORES" -gt 4 ]; then + export UV_THREADPOOL_SIZE=$CPU_CORES + fi +else + echo "skipping get-cpus.sh - not found in PATH or failed: using default UV_THREADPOOL_SIZE" +fi + +if [ -f "${SERVER_HOME}/dist/main.js" ]; then + exec node "${SERVER_HOME}/dist/main.js" "$@" +else + echo "Error: ${SERVER_HOME}/dist/main.js not found" + if [ "$IMMICH_ENV" = "development" ]; then + echo "You may need to build the server first." + fi + exit 1 +fi diff --git a/server/start.sh b/server/start.sh deleted file mode 100755 index 1a08d01a75..0000000000 --- a/server/start.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash - -echo "Initializing Immich $IMMICH_SOURCE_REF" - -lib_path="/usr/lib/$(arch)-linux-gnu/libmimalloc.so.2" -export LD_PRELOAD="$lib_path" -export LD_LIBRARY_PATH="$LD_LIBRARY_PATH:/usr/lib/jellyfin-ffmpeg/lib" - -read_file_and_export() { - if [ -n "${!1}" ]; then - content="$(cat "${!1}")" - export "$2"="${content}" - unset "$1" - fi -} -read_file_and_export "DB_URL_FILE" "DB_URL" -read_file_and_export "DB_HOSTNAME_FILE" "DB_HOSTNAME" -read_file_and_export "DB_DATABASE_NAME_FILE" "DB_DATABASE_NAME" -read_file_and_export "DB_USERNAME_FILE" "DB_USERNAME" -read_file_and_export "DB_PASSWORD_FILE" "DB_PASSWORD" -read_file_and_export "REDIS_PASSWORD_FILE" "REDIS_PASSWORD" - -export CPU_CORES="${CPU_CORES:=$(./get-cpus.sh)}" -echo "Detected CPU Cores: $CPU_CORES" -if [ "$CPU_CORES" -gt 4 ]; then - export UV_THREADPOOL_SIZE=$CPU_CORES -fi - -exec node /usr/src/app/dist/main "$@" diff --git a/web/Dockerfile b/web/Dockerfile index 1c6c4b46bf..c83f783391 100644 --- a/web/Dockerfile +++ b/web/Dockerfile @@ -5,7 +5,8 @@ USER node WORKDIR /usr/src/app COPY --chown=node:node package*.json ./ RUN npm ci -ENV CHOKIDAR_USEPOLLING=true +ENV CHOKIDAR_USEPOLLING=true \ + PATH="${PATH}:/usr/src/app/bin" EXPOSE 24678 EXPOSE 3000 -ENTRYPOINT ["/sbin/tini", "--", "/bin/sh"] +ENTRYPOINT ["/sbin/tini", "--", "/bin/sh", "-c"] diff --git a/web/bin/immich-web b/web/bin/immich-web index ea748863db..8868945ee1 100755 --- a/web/bin/immich-web +++ b/web/bin/immich-web @@ -5,6 +5,7 @@ TYPESCRIPT_SDK=/usr/src/open-api/typescript-sdk npm --prefix "$TYPESCRIPT_SDK" install npm --prefix "$TYPESCRIPT_SDK" run build +cd /usr/src/app || exit 1 COUNT=0 UPSTREAM="${IMMICH_SERVER_URL:-http://immich-server:2283/}"