Repository navigation
Expand file tree
/
Copy pathDockerfile
More file actions
96 lines (79 loc) · 2.58 KB
/
Copy pathDockerfile
File metadata and controls
96 lines (79 loc) · 2.58 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
ARG PORT=5050
ARG SSL_PORT=5051
ARG VERSION
ARG COGNITO_ACCESS_KEY=magnito-access-key
ARG COGNITO_SECRET_KEY=magnito-secret-key
ARG COGNITO_REGION=ap-northeast-1
ARG COGNITO_USER_POOL_ID=ap-northeast-1_default
ARG COGNITO_USER_POOL_CLIENT_ID=default-client-id
ARG SMTP_HOST=inbucket
ARG SMTP_PORT=2500
ARG SMTP_USER=fake_mail_user
ARG SMTP_PASS=fake_mail_password
FROM node:26-alpine3.23 AS builder
WORKDIR /usr/src/app
COPY package.json package-lock.json ./
RUN npm ci
COPY . ./
ARG PORT
ARG SSL_PORT
ARG VERSION
ARG COGNITO_ACCESS_KEY
ARG COGNITO_SECRET_KEY
ARG COGNITO_REGION
ARG COGNITO_USER_POOL_ID
ARG COGNITO_USER_POOL_CLIENT_ID
ARG SMTP_HOST
ARG SMTP_PORT
ARG SMTP_USER
ARG SMTP_PASS
RUN npm run batch:writeVersion -- $VERSION
ENV DATABASE_URL=postgresql://root:root@127.0.0.1:5432/app
RUN npm run build
FROM node:26-alpine3.23
RUN apk add --no-cache postgresql16
WORKDIR /usr/src/app
ARG PORT
ARG SSL_PORT
ARG COGNITO_ACCESS_KEY
ARG COGNITO_SECRET_KEY
ARG COGNITO_REGION
ARG COGNITO_USER_POOL_ID
ARG COGNITO_USER_POOL_CLIENT_ID
ARG SMTP_HOST
ARG SMTP_PORT
ARG SMTP_USER
ARG SMTP_PASS
ENV PORT=$PORT
ENV SSL_PORT=$SSL_PORT
ENV COGNITO_ACCESS_KEY=$COGNITO_ACCESS_KEY
ENV COGNITO_SECRET_KEY=$COGNITO_SECRET_KEY
ENV COGNITO_REGION=$COGNITO_REGION
ENV COGNITO_USER_POOL_ID=$COGNITO_USER_POOL_ID
ENV COGNITO_USER_POOL_CLIENT_ID=$COGNITO_USER_POOL_CLIENT_ID
ENV DATABASE_URL=postgresql://root:root@127.0.0.1:5432/app
ENV PGDATA=/usr/src/app/data/postgres
ENV SMTP_HOST=$SMTP_HOST
ENV SMTP_PORT=$SMTP_PORT
ENV SMTP_USER=$SMTP_USER
ENV SMTP_PASS=$SMTP_PASS
COPY --chown=node package.json package-lock.json ./
RUN --mount=type=cache,target=/root/.npm \
--mount=type=cache,target=/root/.cache/prisma \
npm ci --omit=dev
COPY --chown=node --from=builder /usr/src/app/dist/client dist/client/
COPY --chown=node --from=builder /usr/src/app/dist/server dist/server/
COPY --chown=node --from=builder /usr/src/app/certificates certificates/
COPY --chown=node --from=builder /usr/src/app/prisma prisma/
COPY --chown=node --from=builder /usr/src/app/data data/
COPY --chown=node --from=builder /usr/src/app/server server/
COPY --chown=node --from=builder /usr/src/app/src src/
COPY --chown=node prisma.config.ts ./
COPY --chown=node tsconfig.json ./
COPY --chown=node --chmod=755 docker-entrypoint.sh ./
HEALTHCHECK --interval=5s --timeout=5s --retries=3 CMD wget --quiet --spider http://127.0.0.1:$PORT/publicApi/health && wget --quiet --spider --no-check-certificate https://127.0.0.1:$SSL_PORT || exit 1
EXPOSE ${PORT} ${SSL_PORT}
VOLUME ["/usr/src/app/data"]
USER node
ENTRYPOINT ["./docker-entrypoint.sh"]
CMD ["npm", "start"]