This repository was archived by the owner on Aug 30, 2025. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathDockerfile
More file actions
executable file
·164 lines (120 loc) · 3.15 KB
/
Dockerfile
File metadata and controls
executable file
·164 lines (120 loc) · 3.15 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
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
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
# Multi-stage build for ForeverCore API (Bun)
FROM oven/bun:1.2-alpine AS base
# Install system dependencies
RUN apk add --no-cache \
python3 \
py3-pip \
ffmpeg \
curl \
tzdata
# Set timezone
ENV TZ=UTC
# Create python venv
RUN python3 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Install youtube-dl
RUN pip install --no-cache-dir youtube-dl
# Create app directory
WORKDIR /app
# Copy package files
COPY package.json bun.lock ./
# ===== DEPENDENCIES STAGE =====
FROM base AS deps
# Install dependencies
RUN bun install --frozen-lockfile
# ===== BUILDER STAGE =====
FROM base AS builder
# Copy dependencies
COPY --from=deps /app/node_modules ./node_modules
# Copy source code
COPY . .
# Build project
RUN bun run build:core
# ===== PRODUCTION STAGE =====
FROM oven/bun:1.2-alpine AS production
# Install runtime dependencies
RUN apk add --no-cache \
python3 \
py3-pip \
ffmpeg \
curl \
tzdata \
dumb-init
# Set timezone
ENV TZ=UTC
# Create python venv
RUN python3 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Install youtube-dl
RUN pip install --no-cache-dir youtube-dl
# Create non-root user
RUN addgroup -g 1001 -S nodejs
RUN adduser -S bun -u 1001
# Create app directory
WORKDIR /app
# Copy package.json for production dependencies
COPY package.json bun.lock ./
RUN bun install --frozen-lockfile --production
# Copy built application from builder
COPY --from=builder --chown=bun:nodejs /app/dist ./dist
COPY --from=builder --chown=bun:nodejs /app/package.json ./
# Set proper ownership
RUN chown -R bun:nodejs /app
# Switch to non-root user
USER bun
# Expose port
EXPOSE 3010
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3010/health || exit 1
# Environment variables
ENV NODE_ENV=production
ENV PORT=3010
# Use dumb-init for proper signal handling
ENTRYPOINT ["dumb-init", "--"]
# Start the application
CMD ["bun", "run", "boot"]
# ===== BUN PRODUCTION VARIANT =====
FROM oven/bun:1.2-alpine AS bun-production
# Install runtime dependencies
RUN apk add --no-cache \
python3 \
py3-pip \
ffmpeg \
curl \
tzdata \
dumb-init
# Set timezone
ENV TZ=UTC
# Create python venv
RUN python3 -m venv /opt/venv
ENV PATH="/opt/venv/bin:$PATH"
# Install youtube-dl
RUN pip install --no-cache-dir youtube-dl
# Create non-root user
RUN addgroup -g 1001 -S nodejs
RUN adduser -S bun -u 1001
# Create app directory
WORKDIR /app
# Copy package.json for production dependencies
COPY package.json bun.lock ./
RUN bun install --frozen-lockfile --production
# Copy built application from builder
COPY --from=builder --chown=bun:nodejs /app/dist ./dist
COPY --from=builder --chown=bun:nodejs /app/package.json ./
# Set proper ownership
RUN chown -R bun:nodejs /app
# Switch to non-root user
USER bun
# Expose port
EXPOSE 3010
# Health check
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 \
CMD curl -f http://localhost:3010/health || exit 1
# Environment variables
ENV NODE_ENV=production
ENV PORT=3010
# Use dumb-init for proper signal handling
ENTRYPOINT ["dumb-init", "--"]
# Start the application
CMD ["bun", "run", "boot"]