Aethel Bot OSS repository!
aethel.xyz
bot
fun
ai
discord
discord-bot
aethel
1FROM oven/bun:latest AS builder
2
3ARG SOURCE_COMMIT
4ARG VITE_BOT_API_URL
5ARG VITE_STATUS_API_KEY
6ARG VITE_FRONTEND_URL
7ARG VITE_DISCORD_CLIENT_ID
8ARG STATUS_API_KEY
9
10ENV SOURCE_COMMIT=${SOURCE_COMMIT}
11ENV NODE_ENV=production
12ENV VITE_BOT_API_URL=${VITE_BOT_API_URL}
13ENV VITE_STATUS_API_KEY=${VITE_STATUS_API_KEY}
14ENV VITE_FRONTEND_URL=${VITE_FRONTEND_URL}
15ENV VITE_DISCORD_CLIENT_ID=${VITE_DISCORD_CLIENT_ID}
16ENV STATUS_API_KEY=${STATUS_API_KEY}
17
18WORKDIR /app
19
20
21
22COPY package.json bun.lock ./
23RUN bun install --frozen-lockfile
24
25COPY src ./src
26COPY scripts ./scripts
27COPY locales ./locales
28COPY migrations ./migrations
29COPY tsconfig.json ./
30COPY .env* ./
31
32RUN bun run build
33
34WORKDIR /app/web
35
36COPY web/package.json web/bun.lock ./
37RUN bun install --frozen-lockfile
38
39COPY web/src ./src
40COPY web/public ./public
41COPY web/index.html ./
42COPY web/vite.config.ts ./
43COPY web/tsconfig.json ./
44COPY web/tsconfig.node.json ./
45COPY web/tailwind.config.js ./
46COPY web/postcss.config.js ./
47
48RUN bun run build
49
50FROM oven/bun:1 AS production
51
52ARG SOURCE_COMMIT
53ARG VITE_BOT_API_URL
54ARG VITE_STATUS_API_KEY
55ARG VITE_FRONTEND_URL
56ARG VITE_DISCORD_CLIENT_ID
57
58ENV SOURCE_COMMIT=${SOURCE_COMMIT}
59ENV NODE_ENV=production
60ENV VITE_BOT_API_URL=${VITE_BOT_API_URL}
61ENV STATUS_API_KEY=${STATUS_API_KEY}
62ENV VITE_STATUS_API_KEY=${VITE_STATUS_API_KEY}
63ENV VITE_FRONTEND_URL=${VITE_FRONTEND_URL}
64ENV VITE_DISCORD_CLIENT_ID=${VITE_DISCORD_CLIENT_ID}
65
66RUN apt-get update && apt-get install -y curl && rm -rf /var/lib/apt/lists/* && \
67 groupadd -g 1001 nodejs && \
68 useradd -r -u 1001 -g nodejs aethel
69
70WORKDIR /app
71
72
73
74COPY package.json bun.lock ./
75COPY .env* ./
76
77RUN bun install --frozen-lockfile --production
78
79COPY --from=builder --chown=aethel:nodejs /app/dist ./dist
80COPY --from=builder --chown=aethel:nodejs /app/locales ./locales
81COPY --from=builder --chown=aethel:nodejs /app/migrations ./migrations
82COPY --from=builder --chown=aethel:nodejs /app/scripts ./scripts
83COPY --from=builder --chown=aethel:nodejs /app/web/dist ./web/dist
84
85RUN mkdir -p /app/logs && chown aethel:nodejs /app/logs
86
87USER aethel
88
89EXPOSE 2020
90
91HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
92 CMD curl -f http://localhost:2020/health || exit 1
93
94CMD ["bun", "run", "start"]