-
Notifications
You must be signed in to change notification settings - Fork 1
/
Dockerfile
145 lines (84 loc) · 2.69 KB
/
Dockerfile
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
137
138
139
140
141
142
143
144
145
FROM node:21 AS base
ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable
FROM base AS build
COPY . /build
WORKDIR /build
RUN --mount=type=cache,id=pnpm,target=/pnpm/store pnpm install --frozen-lockfile
# -- Build section --
FROM build AS nest-build
WORKDIR /build/packages/nest
RUN pnpm prisma generate
RUN pnpm build
WORKDIR /build
RUN pnpm deploy --filter @caats/nest --prod /prod/nest
FROM build AS app-build
WORKDIR /build/packages/app
ARG GOOGLE_CLIENT_ID
ENV VITE_GOOGLE_CLIENTID=$GOOGLE_CLIENT_ID
RUN pnpm build
# -- Deploy section --
# -> Nest
FROM base AS nest
COPY --from=nest-build /prod/nest /caats/nest
COPY --from=nest-build /build/packages/nest/dist /caats/nest/dist
WORKDIR /caats/nest
ENV NODE_ENV=production
EXPOSE 3000
CMD ["pnpm", "start"]
# -> App on Caddy
FROM caddy:2 AS app
COPY --from=app-build /build/packages/app/dist /caats/app/dist
COPY ./caddy/Caddyfile /etc/caddy/Caddyfile
FROM build AS scrapy-build
WORKDIR /build/packages/scrapy
RUN pnpm build
RUN pnpm deploy --filter @caats/scrapy --prod /prod/scrapy
# -> Scrapy
FROM base AS scraper
COPY --from=scrapy-build /prod/scrapy /caats/scrapy
COPY --from=scrapy-build /build/packages/scrapy/dist /caats/scrapy/dist
WORKDIR /caats/scrapy
ENV NODE_ENV=production
ENV NEST_GRAPHQL="http://nest:3000/graphql"
ENV SCRAPY_RATE=90
CMD ["pnpm", "scrapy", "steal", "--api", "${NEST_GRAPHQL}", "--rate", "${SCRAPY_RATE}"]
# FROM node:21 AS build
# WORKDIR /build
# COPY package.json /build/package.json
# COPY yarn.lock /build/yarn.lock
# # -- Application section --
# FROM build AS app-build
# COPY ./packages/app/package.json /build/packages/app/package.json
# COPY ./packages/nest/package.json /build/packages/nest/package.json
# RUN yarn install
# COPY ./packages/app /build/packages/app
# COPY ./packages/nest /build/packages/nest
# ENV SKIPCODEGEN=true
# ARG GOOGLE_CLIENT_ID
# ENV VITE_GOOGLE_CLIENTID=$GOOGLE_CLIENT_ID
# RUN yarn workspace @caats/app vite build
# RUN yarn workspace @caats/nest prisma generate
# RUN yarn workspace @caats/nest build
# RUN yarn install --production
# FROM node:21 AS application
# WORKDIR /caats
# COPY --from=app-build /build /caats
# ENV NODE_ENV=production
# EXPOSE 3000
# WORKDIR /caats/packages/nest
# CMD ["yarn", "start"]
# # -- Scraper section --
# FROM build AS scraper-build
# COPY ./packages/scrapy/package.json /build/packages/scrapy/package.json
# RUN yarn install
# COPY ./packages/scrapy /build/packages/scrapy
# RUN yarn workspace @caats/scrapy build
# RUN yarn install --production
# FROM node:20 AS scraper
# WORKDIR /caats
# COPY --from=scraper-build /build /caats
# WORKDIR /caats/packages/scrapy
# ENV NODE_ENV=production
# CMD ["yarn", "scrapy"]