Skip to content

Commit aee3b5f

Browse files
committed
Dockerfile layout changes
1 parent 106ede4 commit aee3b5f

File tree

7 files changed

+83
-73
lines changed

7 files changed

+83
-73
lines changed

.dockerignore

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,41 +1,41 @@
11
.vscode/
22
.github/
33
.git/
4+
.env*
5+
*.log
6+
*.tmp
7+
*.temp
8+
9+
**/Dockerfile
10+
**/node_modules/
11+
**/.pnpm-store/
12+
**/dist/
13+
**/coverage/
14+
**/build/
415

516
design/
617
docker/
7-
Dockerfile
818
!docker/scripts
19+
920
docs/
1021
!docs/package.json
1122
!docs/package-lock.json
23+
1224
e2e/
1325
!e2e/package.json
1426
!e2e/package-lock.json
27+
1528
fastlane/
1629
machine-learning/
1730
misc/
1831
mobile/
1932

20-
cli/coverage/
21-
cli/dist/
22-
cli/node_modules/
23-
cli/Dockerfile
24-
2533
open-api/typescript-sdk/build/
26-
open-api/typescript-sdk/node_modules/
34+
!open-api/typescript-sdk/package.json
35+
!open-api/typescript-sdk/package-lock.json
2736

28-
server/coverage/
29-
server/node_modules/
3037
server/upload/
3138
server/src/queries
32-
server/dist/
3339
server/www/
34-
server/Dockerfile
3540

36-
web/node_modules/
37-
web/coverage/
3841
web/.svelte-kit
39-
web/build/
40-
web/.env
41-
web/Dockerfile

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,3 +24,4 @@ mobile/android/fastlane/report.xml
2424
mobile/ios/fastlane/report.xml
2525

2626
vite.config.js.timestamp-*
27+
.pnpm-store

docker/docker-compose.dev.yml

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ name: immich-dev
1616
services:
1717
immich-server:
1818
container_name: immich_server
19-
command: ['/usr/src/app/bin/immich-dev']
19+
command: ['/usr/src/app/server/bin/immich-dev']
2020
image: immich-server-dev:latest
2121
# extends:
2222
# file: hwaccel.transcoding.yml
@@ -27,11 +27,11 @@ services:
2727
target: dev
2828
restart: unless-stopped
2929
volumes:
30-
- ../server:/usr/src/app
31-
- ../open-api:/usr/src/open-api
32-
- ${UPLOAD_LOCATION}/photos:/usr/src/app/upload
33-
- ${UPLOAD_LOCATION}/photos/upload:/usr/src/app/upload/upload
34-
- /usr/src/app/node_modules
30+
- ../server:/usr/src/app/server
31+
- ../open-api:/usr/src/app/open-api
32+
- ${UPLOAD_LOCATION}/photos:/usr/src/app/server/upload
33+
- ${UPLOAD_LOCATION}/photos/upload:/usr/src/app/server/upload/upload
34+
- /usr/src/app/server/node_modules
3535
- /etc/localtime:/etc/localtime:ro
3636
env_file:
3737
- .env
@@ -69,19 +69,20 @@ services:
6969
# Needed for rootless docker setup, see https://github.com/moby/moby/issues/45919
7070
# user: 0:0
7171
build:
72-
context: ../web
73-
command: ['/usr/src/app/bin/immich-web']
72+
context: ../
73+
dockerfile: web/Dockerfile
74+
command: ['/usr/src/app/web/bin/immich-web']
7475
env_file:
7576
- .env
7677
ports:
7778
- 3000:3000
7879
- 24678:24678
7980
volumes:
80-
- ../web:/usr/src/app
81-
- ../i18n:/usr/src/i18n
82-
- ../open-api/:/usr/src/open-api/
81+
- ../web:/usr/src/app/web
82+
- ../i18n:/usr/src/app/i18n
83+
- ../open-api/:/usr/src/app/open-api/
8384
# - ../../ui:/usr/ui
84-
- /usr/src/app/node_modules
85+
- /usr/src/app/web/node_modules
8586
ulimits:
8687
nofile:
8788
soft: 1048576

server/Dockerfile

Lines changed: 39 additions & 41 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,26 @@
22
FROM ghcr.io/immich-app/base-server-dev:202507091427@sha256:733e510024e03bc2450608a1f3622f45bf287b70d89a06e60acbccea4bf4fd8c AS dev
33

44
WORKDIR /usr/src/app
5-
COPY server/package.json server/package-lock.json ./
5+
COPY ./server/package* ./server/
6+
WORKDIR /usr/src/app/server
67
RUN npm ci && \
7-
# exiftool-vendored.pl, sharp-linux-x64 and sharp-linux-arm64 are the only ones we need
8-
# they're marked as optional dependencies, so we need to copy them manually after pruning
9-
rm -rf node_modules/@img/sharp-libvips* && \
10-
rm -rf node_modules/@img/sharp-linuxmusl-x64
8+
# exiftool-vendored.pl, sharp-linux-x64 and sharp-linux-arm64 are the only ones we need
9+
# they're marked as optional dependencies, so we need to copy them manually after pruning
10+
rm -rf node_modules/@img/sharp-libvips* && \
11+
rm -rf node_modules/@img/sharp-linuxmusl-x64
1112
ENV PATH="${PATH}:/usr/src/app/bin" \
12-
IMMICH_ENV=development \
13-
NVIDIA_DRIVER_CAPABILITIES=all \
14-
NVIDIA_VISIBLE_DEVICES=all
13+
IMMICH_ENV=development \
14+
NVIDIA_DRIVER_CAPABILITIES=all \
15+
NVIDIA_VISIBLE_DEVICES=all
1516
ENTRYPOINT ["tini", "--", "/bin/sh"]
1617

1718
FROM dev AS dev-container-server
1819

1920
RUN rm -rf /usr/src/app
2021
RUN apt-get update && \
21-
apt-get install sudo inetutils-ping openjdk-11-jre-headless \
22-
vim nano \
23-
-y --no-install-recommends --fix-missing
22+
apt-get install sudo inetutils-ping openjdk-11-jre-headless \
23+
vim nano \
24+
-y --no-install-recommends --fix-missing
2425

2526
RUN usermod -aG sudo node
2627
RUN echo "node ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
@@ -38,14 +39,14 @@ FROM dev-container-server AS dev-container-mobile
3839
USER root
3940
# Enable multiarch for arm64 if necessary
4041
RUN if [ "$(dpkg --print-architecture)" = "arm64" ]; then \
41-
dpkg --add-architecture amd64 && \
42-
apt-get update && \
43-
apt-get install -y --no-install-recommends \
44-
qemu-user-static \
45-
libc6:amd64 \
46-
libstdc++6:amd64 \
47-
libgcc1:amd64; \
48-
fi
42+
dpkg --add-architecture amd64 && \
43+
apt-get update && \
44+
apt-get install -y --no-install-recommends \
45+
qemu-user-static \
46+
libc6:amd64 \
47+
libstdc++6:amd64 \
48+
libgcc1:amd64; \
49+
fi
4950

5051
# Flutter SDK
5152
# https://flutter.dev/docs/development/tools/sdk/releases?tab=linux
@@ -77,40 +78,37 @@ FROM dev AS prod
7778
COPY server .
7879
RUN npm run build
7980
RUN npm prune --omit=dev --omit=optional
80-
COPY --from=dev /usr/src/app/node_modules/@img ./node_modules/@img
81-
COPY --from=dev /usr/src/app/node_modules/exiftool-vendored.pl ./node_modules/exiftool-vendored.pl
81+
COPY --from=dev /usr/src/app/server/node_modules/@img ./node_modules/@img
82+
COPY --from=dev /usr/src/app/server/node_modules/exiftool-vendored.pl ./node_modules/exiftool-vendored.pl
8283

8384
# web build
8485
FROM node:22.16.0-alpine3.20@sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e AS web
8586

86-
WORKDIR /usr/src/open-api/typescript-sdk
87-
COPY open-api/typescript-sdk/package*.json open-api/typescript-sdk/tsconfig*.json ./
88-
RUN npm ci
89-
COPY open-api/typescript-sdk/ ./
90-
RUN npm run build
91-
9287
WORKDIR /usr/src/app
93-
COPY web/package*.json web/svelte.config.js ./
94-
RUN npm ci
95-
COPY web ./
96-
COPY i18n ../i18n
97-
RUN npm run build
88+
COPY ./web ./web/
89+
COPY ./i18n ./i18n/
90+
COPY ./open-api/typescript-sdk ./open-api/typescript-sdk/
91+
92+
WORKDIR /usr/src/app/open-api/typescript-sdk
93+
RUN npm ci && npm run build
9894

95+
WORKDIR /usr/src/app/web
96+
RUN npm ci && npm run build
9997

10098
# prod build
10199
FROM ghcr.io/immich-app/base-server-prod:202507091427@sha256:ad10451acd8eda05a006a2586b6b0425cdaaca97c413fb4c1a10896712528bdc
102100

103101
WORKDIR /usr/src/app
104102
ENV NODE_ENV=production \
105-
NVIDIA_DRIVER_CAPABILITIES=all \
106-
NVIDIA_VISIBLE_DEVICES=all
107-
COPY --from=prod /usr/src/app/node_modules ./node_modules
108-
COPY --from=prod /usr/src/app/dist ./dist
109-
COPY --from=prod /usr/src/app/bin ./bin
110-
COPY --from=web /usr/src/app/build /build/www
111-
COPY server/resources resources
112-
COPY server/package.json server/package-lock.json ./
113-
COPY server/start*.sh ./
103+
NVIDIA_DRIVER_CAPABILITIES=all \
104+
NVIDIA_VISIBLE_DEVICES=all
105+
COPY --from=prod /usr/src/app/server/node_modules ./node_modules
106+
COPY --from=prod /usr/src/app/server/dist ./dist
107+
COPY --from=prod /usr/src/app/server/bin ./bin
108+
COPY --from=web /usr/src/app/web/build /build/www
109+
COPY ./server/resources resources
110+
COPY ./server/package.json server/package-lock.json ./
111+
COPY ./server/start*.sh ./
114112
COPY "docker/scripts/get-cpus.sh" ./
115113
RUN npm install -g @immich/cli && npm cache clean --force
116114
COPY LICENSE /licenses/LICENSE.txt

server/bin/immich-dev

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,5 @@
11
#!/usr/bin/env bash
22

3-
node /usr/src/app/node_modules/.bin/nest start --debug "0.0.0.0:9230" --watch -- "$@"
3+
cd /usr/src/app/server || exit 1
4+
npm install
5+
node ./node_modules/.bin/nest start --debug "0.0.0.0:9230" --watch -- "$@"

web/Dockerfile

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,16 @@
11
FROM node:22.16.0-alpine3.20@sha256:2289fb1fba0f4633b08ec47b94a89c7e20b829fc5679f9b7b298eaa2f1ed8b7e
22

3-
RUN apk add --no-cache tini
3+
RUN apk add --no-cache tini make
4+
45
USER node
56
WORKDIR /usr/src/app
6-
COPY --chown=node:node package*.json ./
7+
COPY --chown=node:node ./web ./web/
8+
COPY --chown=node:node ./open-api ./open-api/
9+
COPY --chown=node:node Makefile ./
10+
11+
WORKDIR /usr/src/app/web
712
RUN npm ci
13+
814
ENV CHOKIDAR_USEPOLLING=true
915
EXPOSE 24678
1016
EXPOSE 3000

web/bin/immich-web

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,12 @@
11
#!/usr/bin/env sh
22

3-
TYPESCRIPT_SDK=/usr/src/open-api/typescript-sdk
3+
TYPESCRIPT_SDK=/usr/src/app/open-api/typescript-sdk
44

5+
cd /usr/src/app/web || exit 1
56
npm --prefix "$TYPESCRIPT_SDK" install
67
npm --prefix "$TYPESCRIPT_SDK" run build
78

9+
npm install
810

911
COUNT=0
1012
UPSTREAM="${IMMICH_SERVER_URL:-http://immich-server:2283/}"

0 commit comments

Comments
 (0)