-
Notifications
You must be signed in to change notification settings - Fork 9
Expand file tree
/
Copy pathDockerfile
More file actions
136 lines (102 loc) · 5.95 KB
/
Dockerfile
File metadata and controls
136 lines (102 loc) · 5.95 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
# =============================================================================
# tom-server Dockerfile
# Optimized multi-stage build
# =============================================================================
# -----------------------------------------------------------------------------
# Stage 1: Builder - Install dependencies and build
# -----------------------------------------------------------------------------
FROM node:24.14.0-alpine AS builder
# Update image and install build tools
RUN apk update && apk upgrade && \
apk add --no-cache build-base python3 && \
rm -rf /var/cache/apk/*
WORKDIR /usr/src/app
# Copy root package files for workspace setup
COPY package.json package-lock.json lerna.json ./
# Copy only required workspace package.json files first (for better caching)
COPY packages/config-parser/package.json ./packages/config-parser/
COPY packages/crypto/package.json ./packages/crypto/
COPY packages/logger/package.json ./packages/logger/
COPY packages/utils/package.json ./packages/utils/
COPY packages/matrix-resolve/package.json ./packages/matrix-resolve/
COPY packages/matrix-identity-server/package.json ./packages/matrix-identity-server/
COPY packages/tom-server/package.json ./packages/tom-server/
# Install all dependencies (cached unless package.json changes)
RUN npm ci --ignore-scripts
# Copy build configuration
COPY tsconfig-build.json rollup-template.js ./
# Copy source files for required packages only
COPY packages/config-parser/src ./packages/config-parser/src
COPY packages/config-parser/tsconfig.json packages/config-parser/rollup.config.js ./packages/config-parser/
COPY packages/crypto/src ./packages/crypto/src
COPY packages/crypto/tsconfig.json packages/crypto/rollup.config.js ./packages/crypto/
COPY packages/logger/src ./packages/logger/src
COPY packages/logger/tsconfig.json packages/logger/rollup.config.js ./packages/logger/
COPY packages/utils/src ./packages/utils/src
COPY packages/utils/tsconfig.json packages/utils/rollup.config.js ./packages/utils/
COPY packages/matrix-resolve/src ./packages/matrix-resolve/src
COPY packages/matrix-resolve/tsconfig.json packages/matrix-resolve/rollup.config.js ./packages/matrix-resolve/
COPY packages/matrix-identity-server/src ./packages/matrix-identity-server/src
COPY packages/matrix-identity-server/tsconfig.json packages/matrix-identity-server/rollup.config.js ./packages/matrix-identity-server/
COPY packages/tom-server/src ./packages/tom-server/src
COPY packages/tom-server/tsconfig.json packages/tom-server/rollup.config.js ./packages/tom-server/
COPY packages/tom-server/templates ./packages/tom-server/templates
COPY packages/tom-server/static ./packages/tom-server/static
# Copy server entry point
COPY server.mjs ./
# Rebuild native modules and build all packages in dependency order
RUN npm rebuild && \
npm run build --workspace=@twake/config-parser && \
npm run build --workspace=@twake/crypto && \
npm run build --workspace=@twake/logger && \
npm run build --workspace=@twake/utils && \
npm run build --workspace=matrix-resolve && \
npm run build --workspace=@twake/matrix-identity-server && \
npm run build --workspace=@twake/server
# -----------------------------------------------------------------------------
# Stage 2: Production dependencies
# -----------------------------------------------------------------------------
FROM node:24.14.0-alpine AS deps
WORKDIR /usr/src/app
# Copy root package files for workspace setup
COPY package.json package-lock.json lerna.json ./
# Copy only required workspace package.json files first (for better caching)
COPY packages/config-parser/package.json ./packages/config-parser/
COPY packages/crypto/package.json ./packages/crypto/
COPY packages/logger/package.json ./packages/logger/
COPY packages/utils/package.json ./packages/utils/
COPY packages/matrix-resolve/package.json ./packages/matrix-resolve/
COPY packages/matrix-identity-server/package.json ./packages/matrix-identity-server/
COPY packages/tom-server/package.json ./packages/tom-server/
# Install production dependencies only
RUN npm ci --omit=dev --ignore-scripts && npm rebuild
# -----------------------------------------------------------------------------
# Stage 3: Final runtime image
# -----------------------------------------------------------------------------
FROM node:24.14.0-alpine AS runtime
WORKDIR /usr/src/app
# Copy production node_modules
COPY --from=deps /usr/src/app/node_modules ./node_modules
# Copy built artifacts
COPY --from=builder /usr/src/app/packages/config-parser/dist ./packages/config-parser/dist
COPY --from=builder /usr/src/app/packages/config-parser/package.json ./packages/config-parser/
COPY --from=builder /usr/src/app/packages/crypto/dist ./packages/crypto/dist
COPY --from=builder /usr/src/app/packages/crypto/package.json ./packages/crypto/
COPY --from=builder /usr/src/app/packages/logger/dist ./packages/logger/dist
COPY --from=builder /usr/src/app/packages/logger/package.json ./packages/logger/
COPY --from=builder /usr/src/app/packages/utils/dist ./packages/utils/dist
COPY --from=builder /usr/src/app/packages/utils/package.json ./packages/utils/
COPY --from=builder /usr/src/app/packages/matrix-resolve/dist ./packages/matrix-resolve/dist
COPY --from=builder /usr/src/app/packages/matrix-resolve/package.json ./packages/matrix-resolve/
COPY --from=builder /usr/src/app/packages/matrix-identity-server/dist ./packages/matrix-identity-server/dist
COPY --from=builder /usr/src/app/packages/matrix-identity-server/package.json ./packages/matrix-identity-server/
COPY --from=builder /usr/src/app/packages/tom-server/dist ./packages/tom-server/dist
COPY --from=builder /usr/src/app/packages/tom-server/package.json ./packages/tom-server/
COPY --from=builder /usr/src/app/packages/tom-server/templates ./packages/tom-server/templates
COPY --from=builder /usr/src/app/packages/tom-server/static ./packages/tom-server/static
# Copy root files
COPY --from=builder /usr/src/app/server.mjs ./
COPY package.json ./
USER node
EXPOSE 3000
CMD ["node", "server.mjs"]