File size: 3,647 Bytes
f55c62a
 
 
 
 
 
 
4345f70
 
 
 
 
 
 
 
f55c62a
 
4345f70
f55c62a
 
 
 
4345f70
 
f55c62a
4345f70
 
 
 
f55c62a
 
4345f70
f55c62a
 
 
 
4345f70
 
f55c62a
4345f70
 
f55c62a
 
 
 
 
4345f70
f55c62a
4345f70
 
f55c62a
 
 
 
 
 
 
4345f70
 
f55c62a
4345f70
f55c62a
 
 
 
 
 
4345f70
f55c62a
 
 
 
 
 
 
 
d1c7852
4345f70
f55c62a
 
 
 
 
 
 
 
 
 
 
 
 
 
 
4345f70
 
f55c62a
4345f70
f55c62a
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
FROM node:24-slim AS base

ENV PNPM_HOME="/pnpm"
ENV PATH="$PNPM_HOME:$PATH"
RUN corepack enable

FROM base AS builder

WORKDIR /build

# Copy LICENSE file.
COPY LICENSE ./

# Copy the relevant package.json and package-lock.json files.
COPY package*.json ./
COPY packages/server/package*.json ./packages/server/
COPY packages/core/package*.json ./packages/core/
COPY packages/frontend/package*.json ./packages/frontend/
COPY packages/seanime-extensions/package*.json ./packages/seanime-extensions/
COPY pnpm-workspace.yaml ./pnpm-workspace.yaml
COPY pnpm-lock.yaml ./pnpm-lock.yaml
COPY patches ./patches

# Install dependencies.
RUN pnpm install --frozen-lockfile

# Copy source files.
COPY tsconfig.*json ./

COPY packages/server ./packages/server
COPY packages/core ./packages/core
COPY packages/frontend ./packages/frontend
COPY packages/seanime-extensions ./packages/seanime-extensions
COPY scripts ./scripts
COPY resources ./resources


# Build the project.
RUN pnpm run build

# Remove development dependencies.
RUN rm -rf node_modules
RUN rm -rf packages/core/node_modules
RUN rm -rf packages/server/node_modules
RUN rm -rf packages/frontend/node_modules
RUN rm -rf packages/seanime-extensions/node_modules

RUN pnpm install --prod --frozen-lockfile


FROM builder AS runtime
WORKDIR /runtime

# Hugging Face Spaces / Koyeb use $PORT (default 7860 on HF, 8000 on Koyeb).
# Keep 3000 as a fallback for local Docker runs.
ENV PORT=${PORT:-3000}
EXPOSE ${PORT}

# Copy the built files from the builder.
# The package.json files must be copied as well for pnpm workspace symlinks between local packages to work.
COPY --from=builder /build/package*.json /build/LICENSE ./
COPY --from=builder /build/pnpm-workspace.yaml ./pnpm-workspace.yaml
COPY --from=builder /build/pnpm-lock.yaml ./pnpm-lock.yaml
COPY --from=builder /build/patches ./patches

COPY --from=builder /build/packages/core/package.*json ./packages/core/
COPY --from=builder /build/packages/server/package.*json ./packages/server/

COPY --from=builder /build/packages/core/dist ./packages/core/dist
COPY --from=builder /build/packages/frontend/dist ./packages/frontend/dist
COPY --from=builder /build/packages/server/dist ./packages/server/dist
COPY --from=builder /build/packages/server/src/static ./packages/server/dist/static
COPY --from=builder /build/packages/seanime-extensions/dist ./packages/seanime-extensions/dist

COPY --from=builder /build/resources ./resources
COPY --from=builder /build/scripts ./scripts

COPY --from=builder /build/node_modules ./node_modules
COPY --from=builder /build/packages/core/node_modules ./packages/core/node_modules
COPY --from=builder /build/packages/server/node_modules ./packages/server/node_modules

# Use a regular Node image for the final stage instead of distroless so that
# Hugging Face Spaces / Koyeb and any shell-based health checks work out of the box.
FROM node:24-slim AS production

LABEL org.opencontainers.image.title="AIOStreams"
LABEL org.opencontainers.image.source="https://github.com/Viren070/AIOStreams"
LABEL org.opencontainers.image.description="AIOStreams consolidates multiple Stremio addons and debrid services - including its own suite of built-in addons - into a single, highly customisable super-addon."
LABEL org.opencontainers.image.licenses="GPL-3.0"

WORKDIR /app

COPY --from=runtime /runtime /app

HEALTHCHECK --interval=30s --timeout=5s --start-period=10s --retries=3 \
  CMD node -e "require('http').get('http://localhost:'+(process.env.PORT||3000)+'/api/v1/health', (r)=>{process.exit(r.statusCode===200?0:1)}).on('error', ()=>process.exit(1))"

CMD ["node", "/app/packages/server/dist/server.js"]