|
1 | | -FROM ubuntu:22.04 AS base |
2 | | -RUN apt-get update && apt-get -y install bash curl git wget libatomic1 python3 build-essential |
3 | | -COPY .nvmrc /usr/src/app/ |
4 | | -RUN rm /bin/sh && ln -s /bin/bash /bin/sh |
5 | | -ENV NVM_DIR=/usr/local/nvm |
6 | | -RUN mkdir $NVM_DIR |
7 | | -ENV NODE_VERSION=v22.15.0 |
8 | | -# Install nvm with node and npm |
9 | | -RUN curl https://raw.githubusercontent.com/nvm-sh/nvm/v0.39.5/install.sh | bash \ |
10 | | - && source $NVM_DIR/nvm.sh \ |
11 | | - && nvm install $NODE_VERSION \ |
12 | | - && nvm alias default $NODE_VERSION \ |
13 | | - && nvm use default |
14 | | -ENV NODE_PATH=$NVM_DIR/$NODE_VERSION/lib/node_modules |
15 | | -ENV PATH=$NVM_DIR/versions/node/$NODE_VERSION/bin:$PATH |
16 | | -ENV IPFS_GATEWAY='https://ipfs.io/' |
17 | | -ENV ARWEAVE_GATEWAY='https://arweave.net/' |
18 | | - |
19 | | -FROM base AS builder |
20 | | -COPY package*.json /usr/src/app/ |
21 | | -COPY scripts/ /usr/src/app/scripts/ |
22 | | -WORKDIR /usr/src/app/ |
| 1 | +FROM node:22.15.0-bookworm@sha256:a1f1274dadd49738bcd4cf552af43354bb781a7e9e3bc984cfeedc55aba2ddd8 AS builder |
| 2 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 3 | + python3 \ |
| 4 | + build-essential \ |
| 5 | + libatomic1 \ |
| 6 | + git \ |
| 7 | + && rm -rf /var/lib/apt/lists/* |
| 8 | + |
| 9 | +WORKDIR /usr/src/app |
| 10 | +COPY package*.json ./ |
| 11 | +COPY scripts/ ./scripts/ |
23 | 12 | RUN npm ci |
| 13 | +COPY . . |
| 14 | +RUN npm run build && npm prune --omit=dev |
| 15 | + |
| 16 | + |
| 17 | +FROM node:22.15.0-bookworm-slim@sha256:557e52a0fcb928ee113df7e1fb5d4f60c1341dbda53f55e3d815ca10807efdce AS runner |
| 18 | +RUN apt-get update && apt-get install -y --no-install-recommends \ |
| 19 | + dumb-init \ |
| 20 | + gosu \ |
| 21 | + libatomic1 \ |
| 22 | + && rm -rf /var/lib/apt/lists/* |
| 23 | + |
| 24 | +ENV NODE_ENV=production \ |
| 25 | + IPFS_GATEWAY='https://ipfs.io/' \ |
| 26 | + ARWEAVE_GATEWAY='https://arweave.net/' \ |
| 27 | + P2P_ipV4BindTcpPort=9000 \ |
| 28 | + P2P_ipV4BindWsPort=9001 \ |
| 29 | + P2P_ipV6BindTcpPort=9002 \ |
| 30 | + P2P_ipV6BindWsPort=9003 \ |
| 31 | + P2P_ipV4BindWssPort=9005 \ |
| 32 | + HTTP_API_PORT=8000 |
| 33 | + |
| 34 | +EXPOSE 9000 9001 9002 9003 9005 8000 |
| 35 | + |
| 36 | +# Docker group membership is handled at runtime in docker-entrypoint.sh by |
| 37 | +# inspecting the GID of /var/run/docker.sock, so it works across hosts. |
| 38 | + |
| 39 | +WORKDIR /usr/src/app |
| 40 | + |
| 41 | +COPY --chown=node:node --from=builder /usr/src/app/dist ./dist |
| 42 | +COPY --chown=node:node --from=builder /usr/src/app/node_modules ./node_modules |
| 43 | +COPY --chown=node:node --from=builder /usr/src/app/schemas ./schemas |
| 44 | +COPY --chown=node:node --from=builder /usr/src/app/package.json ./ |
| 45 | +COPY --chown=node:node --from=builder /usr/src/app/config.json ./ |
| 46 | + |
| 47 | +RUN mkdir -p databases c2d_storage logs |
24 | 48 |
|
| 49 | +COPY docker-entrypoint.sh /usr/local/bin/docker-entrypoint.sh |
| 50 | +RUN chmod +x /usr/local/bin/docker-entrypoint.sh |
25 | 51 |
|
26 | | -FROM base AS runner |
27 | | -COPY . /usr/src/app |
28 | | -WORKDIR /usr/src/app/ |
29 | | -COPY --from=builder /usr/src/app/node_modules/ /usr/src/app/node_modules/ |
30 | | -RUN npm run build |
31 | | -ENV P2P_ipV4BindTcpPort=9000 |
32 | | -EXPOSE 9000 |
33 | | -ENV P2P_ipV4BindWsPort=9001 |
34 | | -EXPOSE 9001 |
35 | | -ENV P2P_ipV6BindTcpPort=9002 |
36 | | -EXPOSE 9002 |
37 | | -ENV P2P_ipV6BindWsPort=9003 |
38 | | -EXPOSE 9003 |
39 | | -ENV P2P_ipV4BindWssPort=9005 |
40 | | -EXPOSE 9005 |
41 | | -ENV HTTP_API_PORT=8000 |
42 | | -EXPOSE 8000 |
43 | | -ENV NODE_ENV='production' |
44 | | -CMD ["npm","run","start"] |
| 52 | +ENTRYPOINT ["/usr/local/bin/docker-entrypoint.sh"] |
| 53 | +CMD ["node", "--max-old-space-size=28784", "--trace-warnings", "--experimental-specifier-resolution=node", "dist/index.js"] |
0 commit comments