Skip to content

Commit 1bce6a1

Browse files
committed
feat: Add Dockerfile and custom package for minimal Cube.js setup
- Introduced a new custom-package.json for managing dependencies. - Created a Dockerfile.minimal for building a lightweight Cube.js server image with Oracle and Postgres drivers. - Configured build and runtime environments, including necessary system dependencies and symlinks for CLI tools.
1 parent 71ce226 commit 1bce6a1

File tree

2 files changed

+74
-0
lines changed

2 files changed

+74
-0
lines changed

Dockerfile.minimal

Lines changed: 56 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,56 @@
1+
FROM node:22-bookworm-slim AS builder
2+
3+
WORKDIR /cube
4+
5+
# Copy only the custom package.json
6+
COPY custom-package.json package.json
7+
8+
RUN yarn policies set-version v1.22.22
9+
RUN yarn config set network-timeout 120000 -g
10+
11+
# Install build dependencies for Oracle (node-oracledb needs them)
12+
RUN apt-get update \
13+
&& apt-get install -y python3 python3.11 libpython3.11-dev gcc g++ make cmake ca-certificates \
14+
&& rm -rf /var/lib/apt/lists/*
15+
16+
# Install only Oracle and Postgres drivers
17+
RUN yarn install --prod && yarn cache clean
18+
19+
# Production stage - minimal runtime
20+
FROM node:22-bookworm-slim
21+
22+
ARG IMAGE_VERSION=custom
23+
ENV CUBEJS_DOCKER_IMAGE_VERSION=$IMAGE_VERSION
24+
ENV CUBEJS_DOCKER_IMAGE_TAG=minimal
25+
26+
# Install runtime dependencies
27+
# Note: libpython3.11 is needed by @cubejs-backend/native even if not using .py configs
28+
RUN DEBIAN_FRONTEND=noninteractive \
29+
&& apt-get update \
30+
&& apt-get install -y --no-install-recommends libssl3 libpython3.11 \
31+
&& rm -rf /var/lib/apt/lists/*
32+
33+
RUN yarn policies set-version v1.22.22
34+
35+
ENV NODE_ENV=production
36+
37+
WORKDIR /cube
38+
39+
# Copy built node_modules from builder
40+
COPY --from=builder /cube/node_modules ./node_modules
41+
COPY --from=builder /cube/package.json ./package.json
42+
43+
# By default Node doesn't search in parent directory from /cube/conf
44+
ENV NODE_PATH=/cube/conf/node_modules:/cube/node_modules
45+
ENV PYTHONUNBUFFERED=1
46+
47+
# Create symlinks for CLI tools
48+
RUN ln -s /cube/node_modules/.bin/cubejs /usr/local/bin/cubejs
49+
RUN ln -s /cube/node_modules/.bin/cubestore-dev /usr/local/bin/cubestore-dev
50+
51+
WORKDIR /cube/conf
52+
53+
EXPOSE 4000
54+
55+
CMD ["cubejs", "server"]
56+

custom-package.json

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,18 @@
1+
{
2+
"name": "cube-minimal",
3+
"version": "1.0.0",
4+
"private": true,
5+
"dependencies": {
6+
"@cubejs-backend/server": "1.5.1",
7+
"@cubejs-backend/oracle-driver": "1.5.1",
8+
"@cubejs-backend/postgres-driver": "1.5.1",
9+
"cubejs-cli": "1.5.1",
10+
"typescript": "~5.2.2"
11+
},
12+
"resolutions": {
13+
"colors": "1.4.0",
14+
"form-data": "^4.0.4",
15+
"lodash": "^4.17.0"
16+
}
17+
}
18+

0 commit comments

Comments
 (0)