-
-
Notifications
You must be signed in to change notification settings - Fork 29
Expand file tree
/
Copy pathDockerfile.railway
More file actions
81 lines (75 loc) · 3.38 KB
/
Copy pathDockerfile.railway
File metadata and controls
81 lines (75 loc) · 3.38 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
# Railway-specific image definition. Railway Volumes replace Docker's VOLUME
# instruction, so keep this file aligned with Dockerfile except for VOLUME.
ARG YTZERO_VERSION=dev
ARG YTZERO_COMMIT=unknown
# ---- build UI ----
FROM oven/bun:1.3 AS ui-build
ARG YTZERO_VERSION
ARG YTZERO_COMMIT
ARG YTZERO_CHANGELOG_PREGENERATED=0
ENV YTZERO_VERSION=${YTZERO_VERSION} \
YTZERO_COMMIT=${YTZERO_COMMIT}
WORKDIR /ui
COPY ui/package.json ui/bun.lock* ./
RUN bun install
COPY ui/ .
COPY shared/ /shared/
RUN if [ "${YTZERO_CHANGELOG_PREGENERATED}" = "1" ]; then bun run build:prepared; else bun run build; fi
# ---- runtime ----
FROM oven/bun:1.3-slim
ARG DENO_VERSION=2.8.1
ARG BGUTIL_VERSION=1.3.1
WORKDIR /app
RUN apt-get update && \
apt-get upgrade -y --no-install-recommends && \
apt-get install -y --no-install-recommends python3 ffmpeg curl ca-certificates unzip && \
curl -fsSL https://github.com/yt-dlp/yt-dlp/releases/latest/download/yt-dlp -o /usr/local/bin/yt-dlp && \
chmod a+rx /usr/local/bin/yt-dlp && \
curl -fsSL https://deno.land/install.sh -o /tmp/install-deno.sh && \
DENO_INSTALL=/usr/local sh /tmp/install-deno.sh "v${DENO_VERSION}" && \
mkdir -p /opt/ytzero/yt-dlp-plugins /opt/ytzero && \
curl -fsSL "https://github.com/Brainicism/bgutil-ytdlp-pot-provider/releases/download/${BGUTIL_VERSION}/bgutil-ytdlp-pot-provider.zip" -o /opt/ytzero/yt-dlp-plugins/bgutil-ytdlp-pot-provider.zip && \
curl -fsSL "https://github.com/Brainicism/bgutil-ytdlp-pot-provider/archive/refs/tags/${BGUTIL_VERSION}.tar.gz" -o /tmp/bgutil.tar.gz && \
tar -xzf /tmp/bgutil.tar.gz -C /opt/ytzero && mv "/opt/ytzero/bgutil-ytdlp-pot-provider-${BGUTIL_VERSION}" /opt/ytzero/bgutil && \
cd /opt/ytzero/bgutil/server && deno install --allow-scripts=npm:canvas --frozen && \
deno --version && \
rm /tmp/install-deno.sh /tmp/bgutil.tar.gz && \
apt-get purge -y curl unzip && apt-get autoremove -y && \
rm -rf /var/lib/apt/lists/*
COPY app/package.json app/bun.lock* ./
RUN bun install --production
COPY app/src ./src
COPY app/scripts ./scripts
COPY shared/ /shared/
RUN chmod 0755 ./scripts/provision-ytdlp.sh
COPY --from=ui-build /ui/dist ./public
ARG YTZERO_VERSION
ARG YTZERO_COMMIT
ENV PORT=3001 \
LANG=C.UTF-8 \
LC_ALL=C.UTF-8 \
IDLE_TIMEOUT_SECONDS=120 \
DB_PATH=/data/db/ytzero.db \
IMG_CACHE_DIR=/data/imgcache \
IMG_CACHE_TTL_DAYS=7 \
DOWNLOADS_DIR=/data/downloads \
DENO_DIR=/data/deno-cache \
DOWNLOAD_COOKIES_DIR=/data/download-cookies \
YTDLP_BGUTIL_PLUGIN_DIR=/opt/ytzero/yt-dlp-plugins \
YTDLP_BGUTIL_SERVER_HOME=/opt/ytzero/bgutil/server \
RESTORE_SESSION_DIR=/data/restore-sessions \
AVATAR_DIR=/data/avatars \
LOG_PATH=/data/logs/ytzero.log \
YTDLP_PATH=/data/bin/yt-dlp \
YTDLP_PROVISION_MARKER=/data/bin/.yt-dlp-channel-reconciliation-pending \
YTZERO_AUTH_METHOD=shared \
YTDLP_AUTO_UPDATE=1 \
UI_DIST=./public \
YTZERO_VERSION=${YTZERO_VERSION} \
YTZERO_COMMIT=${YTZERO_COMMIT}
EXPOSE 3001
# Railway also uses /api/health from railway.json; keeping the image-level
# probe makes this variant useful outside Railway without changing startup.
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 \
CMD bun -e 'const r = await fetch(`http://127.0.0.1:${process.env.PORT ?? 3001}/api/health`); process.exit(r.ok ? 0 : 1)'
CMD ["./scripts/provision-ytdlp.sh", "bun", "src/index.ts"]