Skip to content

Commit 101e8b7

Browse files
committed
refactor: new dockerfile + compose files
1 parent baccc98 commit 101e8b7

8 files changed

Lines changed: 59 additions & 70 deletions

.dockerignore

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,13 +22,12 @@
2222
# dotenv environment variables file
2323
**/*.env
2424
**/.env
25+
**/.env.*
26+
!**/.env.example
2527

2628
# windows folder options
2729
**/desktop.ini
2830

29-
# PHPStorm
30-
**/.idea
31-
3231
# Misc
3332
**/npm-ls.txt
3433
**/npm-audit.txt
@@ -45,3 +44,10 @@ config-errors.txt
4544
/config-schema.json
4645

4746
**/*.tsbuildinfo
47+
48+
**/.claude
49+
**/.codex
50+
**/.opencode
51+
52+
/config-checker
53+
/presetup-configurator

Dockerfile

Lines changed: 20 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -1,53 +1,33 @@
1-
FROM node:24 AS build
1+
FROM node:24-alpine AS base
22

3-
ARG COMMIT_HASH
4-
ARG BUILD_TIME
5-
6-
RUN mkdir /zeppelin
7-
RUN chown node:node /zeppelin
8-
9-
# Install pnpm
10-
RUN npm install -g pnpm@10.19.0
11-
12-
USER node
13-
14-
# Install dependencies before copying over any other files
15-
COPY --chown=node:node package.json pnpm-workspace.yaml pnpm-lock.yaml /zeppelin
16-
RUN mkdir /zeppelin/backend
17-
COPY --chown=node:node backend/package.json /zeppelin/backend
18-
RUN mkdir /zeppelin/shared
19-
COPY --chown=node:node shared/package.json /zeppelin/shared
20-
RUN mkdir /zeppelin/dashboard
21-
COPY --chown=node:node dashboard/package.json /zeppelin/dashboard
3+
RUN npm install -g pnpm@11.13.1
224

5+
COPY --chown=node:node . /zeppelin
236
WORKDIR /zeppelin
24-
RUN CI=true pnpm install
257

26-
COPY --chown=node:node . /zeppelin
8+
FROM base AS prod-deps
9+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --prod --frozen-lockfile
2710

28-
# Build backend
29-
WORKDIR /zeppelin/backend
11+
FROM base AS build
12+
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
3013
RUN pnpm run build
3114

32-
# Build dashboard
33-
WORKDIR /zeppelin/dashboard
34-
RUN pnpm run build
15+
FROM base AS final
3516

36-
# Only keep prod dependencies
37-
WORKDIR /zeppelin
38-
RUN CI=true pnpm install --prod
17+
ARG COMMIT_HASH
18+
ARG BUILD_TIME
19+
20+
COPY --from=prod-deps /zeppelin/node_modules /zeppelin/node_modules
21+
COPY --from=prod-deps /zeppelin/backend/node_modules /zeppelin/backend/node_modules
22+
#COPY --from=prod-deps /zeppelin/shared/node_modules /zeppelin/shared/node_modules # No prod deps in shared
23+
COPY --from=prod-deps /zeppelin/dashboard/node_modules /zeppelin/dashboard/node_modules
24+
25+
COPY --from=build /zeppelin/backend/dist /zeppelin/backend/dist
26+
COPY --from=build /zeppelin/shared/dist /zeppelin/shared/dist
27+
COPY --from=build /zeppelin/dashboard/dist /zeppelin/dashboard/dist
3928

4029
# Add version info
4130
RUN echo "${COMMIT_HASH}" > /zeppelin/.commit-hash
4231
RUN echo "${BUILD_TIME}" > /zeppelin/.build-time
4332

44-
# --- Main image ---
45-
46-
FROM node:24-alpine AS main
47-
48-
RUN npm install -g pnpm@10.19.0
49-
50-
USER node
51-
COPY --from=build --chown=node:node /zeppelin /zeppelin
52-
53-
WORKDIR /zeppelin
33+
ENTRYPOINT ["/bin/sh", "/zeppelin/entrypoint.sh"]

docker-compose.development.yml

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,10 @@
11
name: zeppelin-dev
2+
23
volumes:
34
home: {}
45
mysql-data: {}
56
redis-data: {}
7+
68
services:
79
nginx:
810
build:

docker-compose.lightweight.yml

Lines changed: 5 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,9 @@
1-
version: '3'
21
name: zeppelin-lightweight
2+
33
services:
44
migrate:
55
build: &build
66
context: .
7-
args:
8-
# Used at compile-time by dashboard
9-
API_URL:
107
environment: &env
118
- NODE_ENV=production
129
- DB_HOST=${LIGHTWEIGHT_DB_HOST}
@@ -17,8 +14,7 @@ services:
1714
- API_PATH_PREFIX=${LIGHTWEIGHT_API_PATH_PREFIX}
1815
env_file:
1916
- .env
20-
working_dir: /zeppelin/backend
21-
command: ["npm", "run", "migrate-prod"]
17+
command: ["migrate"]
2218

2319
api:
2420
depends_on:
@@ -31,8 +27,7 @@ services:
3127
- .env
3228
ports:
3329
- "${LIGHTWEIGHT_API_PORT}:3001"
34-
working_dir: /zeppelin/backend
35-
command: ["npm", "run", "start-api-prod"]
30+
command: ["api"]
3631

3732
bot:
3833
depends_on:
@@ -43,19 +38,14 @@ services:
4338
environment: *env
4439
env_file:
4540
- .env
46-
working_dir: /zeppelin/backend
47-
command: ["npm", "run", "start-bot-prod"]
41+
command: ["bot"]
4842

4943
dashboard:
50-
depends_on:
51-
migrate:
52-
condition: service_completed_successfully
5344
build: *build
5445
restart: on-failure
5546
environment: *env
5647
env_file:
5748
- .env
5849
ports:
5950
- "${LIGHTWEIGHT_DASHBOARD_PORT}:3002"
60-
working_dir: /zeppelin/dashboard
61-
command: ["node", "serve.js"]
51+
command: ["dashboard"]

docker-compose.standalone.yml

Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
1-
version: '3'
21
name: zeppelin-prod
2+
33
volumes:
44
mysql-data: {}
55
redis-data: {}
6+
67
services:
78
mysql:
89
image: mysql:8.0
@@ -53,8 +54,7 @@ services:
5354
- API_PATH_PREFIX=/api
5455
env_file:
5556
- .env
56-
working_dir: /zeppelin/backend
57-
command: ["npm", "run", "migrate-prod"]
57+
command: ["migrate"]
5858

5959
api:
6060
image: dragory/zeppelin
@@ -65,8 +65,7 @@ services:
6565
environment: *env
6666
env_file:
6767
- .env
68-
working_dir: /zeppelin/backend
69-
command: ["npm", "run", "start-api-prod"]
68+
command: ["api"]
7069

7170
bot:
7271
image: dragory/zeppelin
@@ -77,8 +76,7 @@ services:
7776
environment: *env
7877
env_file:
7978
- .env
80-
working_dir: /zeppelin/backend
81-
command: ["npm", "run", "start-bot-prod"]
79+
command: ["bot"]
8280

8381
dashboard:
8482
image: dragory/zeppelin
@@ -89,5 +87,4 @@ services:
8987
environment: *env
9088
env_file:
9189
- .env
92-
working_dir: /zeppelin/dashboard
93-
command: ["node", "serve.js"]
90+
command: ["dashboard"]

entrypoint.sh

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
#!/bin/sh
2+
3+
case "$1" in
4+
migrate) exec pnpm run --silent run:migrate;;
5+
bot) exec pnpm run --silent run:bot;;
6+
api) exec pnpm run --silent run:api;;
7+
dashboard) exec pnpm run --silent run:dashboard;;
8+
*)
9+
echo "Unknown command: $1"
10+
exit 1
11+
;;
12+
esac

package.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -10,9 +10,10 @@
1010
"format": "oxfmt",
1111
"lint": "oxlint --check",
1212
"lint:fix": "oxfmt",
13-
"start-bot": "cd backend && pnpm run start-bot-prod",
14-
"start-api": "cd backend && pnpm run start-api-prod",
15-
"start-dashboard": "cd dashboard && node serve.js"
13+
"run:migrate": "cd backend && pnpm run migrate",
14+
"run:bot": "cd backend && pnpm run start-bot-prod",
15+
"run:api": "cd backend && pnpm run start-api-prod",
16+
"run:dashboard": "cd dashboard && node serve.js"
1617
},
1718
"devDependencies": {
1819
"@types/node": "^24.13.3",

pnpm-workspace.yaml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,5 @@
11
storeDir: .pnpm-store
2+
verifyDepsBeforeRun: false
23

34
packages:
45
- 'backend'

0 commit comments

Comments
 (0)