-
Notifications
You must be signed in to change notification settings - Fork 45
/
Dockerfile
144 lines (121 loc) · 4.35 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
# The web Dockerfile is copy-pasted into our main docs at /docs/handbook/deploying-with-docker.
# Make sure you update this Dockerfile, the Dockerfile in the web workspace and copy that over to Dockerfile in the docs.
FROM node:lts-alpine AS builder
# Check https://github.com/nodejs/docker-node/tree/b4117f9333da4138b03a546ec926ef50a31506c3#nodealpine to understand why libc6-compat might be needed.
RUN apk add --no-cache libc6-compat
RUN apk add --no-cache python3 make g++
RUN apk update
# Set working directory
WORKDIR /app
ENV PNPM_HOME="/root/.local/share/pnpm"
ENV PATH="${PATH}:${PNPM_HOME}"
RUN npm install --global pnpm@9.1.2
RUN pnpm add -g turbo@1.13.3
COPY . .
RUN turbo prune --scope=@answeroverflow/discord-bot --docker
# Add lockfile and package.json's of isolated subworkspace
FROM node:lts-alpine AS installer
RUN apk add --no-cache libc6-compat
RUN apk add --update openssl
RUN apk add --no-cache python3 make g++
RUN apk update
ENV PNPM_HOME="/root/.local/share/pnpm"
ENV PATH="${PATH}:${PNPM_HOME}"
RUN npm install --global pnpm@9.1.2
WORKDIR /app
# First install dependencies (as they change less often)
COPY .gitignore .gitignore
COPY --from=builder /app/out/json/ .
COPY --from=builder /app/out/pnpm-lock.yaml ./pnpm-lock.yaml
COPY turbo.json turbo.json
RUN pnpm i
# Build the project and its dependencies
COPY --from=builder /app/out/full/ .
# Uncomment and use build args to enable remote caching
ARG TURBO_TEAM
ENV TURBO_TEAM=$TURBO_TEAM
ARG TURBO_TOKEN
ENV TURBO_TOKEN=$TURBO_TOKEN
###
# Validate vars
ARG ENVIRONMENT
ENV ENVIRONMENT=$ENVIRONMENT
ARG DATABASE_URL
ENV DATABASE_URL=$DATABASE_URL
ARG ELASTICSEARCH_CLOUD_ID
ENV ELASTICSEARCH_CLOUD_ID=$ELASTICSEARCH_CLOUD_ID
ARG ELASTICSEARCH_PASSWORD
ENV ELASTICSEARCH_PASSWORD=$ELASTICSEARCH_PASSWORD
ARG ELASTICSEARCH_USERNAME
ENV ELASTICSEARCH_USERNAME=$ELASTICSEARCH_USERNAME
ARG ELASTICSEARCH_MESSAGE_INDEX
ENV ELASTICSEARCH_MESSAGE_INDEX=$ELASTICSEARCH_MESSAGE_INDEX
ARG REDIS_URL
ENV REDIS_URL=$REDIS_URL
ARG DISCORD_CLIENT_ID
ENV DISCORD_CLIENT_ID=$DISCORD_CLIENT_ID
ARG DISCORD_CLIENT_SECRET
ENV DISCORD_CLIENT_SECRET=$DISCORD_CLIENT_SECRET
ARG POSTHOG_PROJECT_ID
ENV POSTHOG_PROJECT_ID=$POSTHOG_PROJECT_ID
ARG POSTHOG_PERSONAL_API_KEY
ENV POSTHOG_PERSONAL_API_KEY=$POSTHOG_PERSONAL_API_KEY
ARG STRIPE_PRO_PLAN_PRICE_ID
ENV STRIPE_PRO_PLAN_PRICE_ID=$STRIPE_PRO_PLAN_PRICE_ID
ARG STRIPE_ENTERPRISE_PLAN_PRICE_ID
ENV STRIPE_ENTERPRISE_PLAN_PRICE_ID=$STRIPE_ENTERPRISE_PLAN_PRICE_ID
ARG STRIPE_SECRET_KEY
ENV STRIPE_SECRET_KEY=$STRIPE_SECRET_KEY
ARG STRIPE_WEBHOOK_SECRET
ENV STRIPE_WEBHOOK_SECRET=$STRIPE_WEBHOOK_SECRET
ARG STRIPE_CHECKOUT_URL
ENV STRIPE_CHECKOUT_URL=$STRIPE_CHECKOUT_URL
ARG PROJECT_ID_VERCEL
ENV PROJECT_ID_VERCEL=$PROJECT_ID_VERCEL
ARG AUTH_BEARER_TOKEN_VERCEL
ENV AUTH_BEARER_TOKEN_VERCEL=$AUTH_BEARER_TOKEN_VERCEL
ARG TEAM_ID_VERCEL
ENV TEAM_ID_VERCEL=$TEAM_ID_VERCEL
ARG BUCKET_NAME
ENV BUCKET_NAME=$BUCKET_NAME
ARG IAM_USER_KEY
ENV IAM_USER_KEY=$IAM_USER_KEY
ARG IAM_USER_SECRET
ENV IAM_USER_SECRET=$IAM_USER_SECRET
ARG NEXT_PUBLIC_POSTHOG_TOKEN
ENV NEXT_PUBLIC_POSTHOG_TOKEN=$NEXT_PUBLIC_POSTHOG_TOKEN
ARG NEXT_PUBLIC_SENTRY_DSN
ENV NEXT_PUBLIC_SENTRY_DSN=$NEXT_PUBLIC_SENTRY_DSN
ARG NEXT_PUBLIC_SITE_URL
ENV NEXT_PUBLIC_SITE_URL=$NEXT_PUBLIC_SITE_URL
ARG NEXT_PUBLIC_DEPLOYMENT_ENV
ENV NEXT_PUBLIC_DEPLOYMENT_ENV=$NEXT_PUBLIC_DEPLOYMENT_ENV
ARG DISCORD_TOKEN
ENV DISCORD_TOKEN=$DISCORD_TOKEN
ARG PRINT_COMMUNITIES
ENV PRINT_COMMUNITIES=$PRINT_COMMUNITIES
ARG STATUS_UPDATE_INTERVAL_IN_HOURS
ENV STATUS_UPDATE_INTERVAL_IN_HOURS=$STATUS_UPDATE_INTERVAL_IN_HOURS
ARG INDEXING_DISABLED
ENV INDEXING_DISABLED=$INDEXING_DISABLED
ARG INDEXING_INTERVAL_IN_HOURS
ENV INDEXING_INTERVAL_IN_HOURS=$INDEXING_INTERVAL_IN_HOURS
ARG MAX_NUMBER_OF_THREADS_TO_COLLECT
ENV MAX_NUMBER_OF_THREADS_TO_COLLECT=$MAX_NUMBER_OF_THREADS_TO_COLLECT
ARG MAX_NUMBER_OF_MESSAGES_TO_COLLECT
ENV MAX_NUMBER_OF_MESSAGES_TO_COLLECT=$MAX_NUMBER_OF_MESSAGES_TO_COLLECT
###
RUN pnpm turbo run build --filter=discord-bot...
FROM node:lts-alpine AS runner
ENV PNPM_HOME="/root/.local/share/pnpm"
ENV PATH="${PATH}:${PNPM_HOME}"
RUN npm install --global pnpm@9.1.2
WORKDIR /app
ENV NODE_ENV="production"
ENV NODE_OPTIONS="--enable-source-maps --max_old_space_size=4096"
# Don't run production as root
RUN addgroup --system --gid 1001 sapphire
RUN adduser --system --uid 1001 sapphire
USER sapphire
COPY --from=installer /app .
CMD cd apps/discord-bot/ && pnpm start