Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
73 lines (55 loc) · 2.07 KB
/
Copy pathDockerfile
File metadata and controls
73 lines (55 loc) · 2.07 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
# Build thor in a stock Go builder container
FROM golang:1.26.5 AS thor-builder
RUN apt-get update && \
apt-get install -y --no-install-recommends git build-essential linux-libc-dev && \
rm -rf /var/lib/apt/lists/*
ARG THOR_REPO=https://github.com/vechain/thor.git
ARG THOR_VERSION=v2.5.0
WORKDIR /go/thor
RUN git clone ${THOR_REPO} . && \
git checkout ${THOR_VERSION} && \
make all
# Node.js builder stage
FROM node:22.18-alpine AS node-builder
WORKDIR /usr/src/app/rosetta
COPY package*.json ./
RUN npm ci
COPY process_online.json ./
COPY process_online_solo.json ./
COPY process_offline.json ./
COPY tsconfig.json ./
COPY src/ ./src/
COPY start.sh ./
COPY config/ ./config/
COPY typings/ ./typings/
RUN npm run build
# Final stage
FROM ubuntu:24.04
RUN apt-get update && \
apt-get --no-install-recommends install -y \
ca-certificates \
curl \
&& curl --proto "=https" --tlsv1.2 -sSf -L https://deb.nodesource.com/setup_22.x | bash - \
&& apt-get --no-install-recommends install -y nodejs \
&& rm -rf /var/lib/apt/lists/*
RUN groupadd -r rosettagroup && \
useradd -r -g rosettagroup rosettauser && \
mkdir -p /home/rosettauser/.pm2 && \
chown -R rosettauser:rosettagroup /home/rosettauser/.pm2
WORKDIR /usr/src/app
# Copy only necessary built artifacts
COPY --from=thor-builder /go/thor/bin/thor ./
COPY --from=node-builder /usr/src/app/rosetta/dist ./rosetta/dist
COPY --from=node-builder /usr/src/app/rosetta/start.sh ./
COPY --from=node-builder /usr/src/app/rosetta/package*.json ./rosetta/
COPY --from=node-builder /usr/src/app/rosetta/process_online.json ./rosetta/
COPY --from=node-builder /usr/src/app/rosetta/process_online_solo.json ./rosetta/
COPY --from=node-builder /usr/src/app/rosetta/process_offline.json ./rosetta/
COPY --from=node-builder /usr/src/app/rosetta/node_modules ./rosetta/node_modules
COPY --from=node-builder /usr/src/app/rosetta/config ./rosetta/config
WORKDIR /usr/src/app
RUN chmod +x start.sh
RUN npm install --ignore-scripts -g pm2
EXPOSE 8080 8669 11235 11235/udp
USER rosettauser
ENTRYPOINT ["sh","./start.sh"]