- Migrated frontend to Astro + Svelte 5 for cyberpunk aesthetic - Switched to Bun for faster frontend builds - Implemented multi-stage Docker build for smaller image size - Refactored backend to serve static assets and proxy API requests - Added recovery mode for manual file management
39 lines
No EOL
1.4 KiB
Docker
39 lines
No EOL
1.4 KiB
Docker
# --- Stage 1: Frontend Build (Bun) ---
|
|
FROM oven/bun:1 as frontend
|
|
WORKDIR /app/ui
|
|
|
|
# Copy frontend code
|
|
COPY ui/package.json ui/bun.lock ./
|
|
RUN bun install --frozen-lockfile
|
|
|
|
COPY ui .
|
|
RUN bun run build
|
|
|
|
# --- Stage 2: Backend (Python) ---
|
|
FROM python:3.11-slim
|
|
WORKDIR /app
|
|
|
|
# 1. Install System Deps (ffmpeg, curl for yt-dlp)
|
|
RUN apt-get update && apt-get install -y ffmpeg curl && rm -rf /var/lib/apt/lists/*
|
|
RUN curl -L 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
|
|
|
|
# 2. Install Python Deps
|
|
COPY requirements.txt .
|
|
RUN pip install --no-cache-dir -r requirements.txt
|
|
|
|
# 3. Copy Backend Code
|
|
COPY ta_symlink.py .
|
|
# Copy other backend files if any (templates/ was old, but maybe still needed if I missed something? No, I replaced routes.)
|
|
# But just in case, I'll exclude templates from copy or just copy everything and ignore.
|
|
# Using .dockerignore would be good, but explicit copy is fine too.
|
|
# Let's copy specific files or everything. The previous dockerfile did `COPY . .`.
|
|
# I should probably just copy the python file and any others.
|
|
# Let's stick to what was there but ensure we copy the BUILT frontend.
|
|
|
|
# 4. Copy Built Frontend from Stage 1
|
|
# Python app expects: os.path.join(os.getcwd(), 'ui', 'dist')
|
|
# defaults WORKDIR /app, so /app/ui/dist
|
|
COPY --from=frontend /app/ui/dist ./ui/dist
|
|
|
|
# 5. CMD
|
|
CMD ["python", "ta_symlink.py"] |