dockerfile
Rama main · réplica de lectura del repositorio original.
# Build Stage
FROM oven/bun:1.2.8 AS builder
# Add Build Arguments
ARG USE_MIRROR=false
WORKDIR /app
# Set Sharp environment variables to speed up ARM installation
ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1
ENV npm_config_sharp_binary_host="https://npmmirror.com/mirrors/sharp"
ENV npm_config_sharp_libvips_binary_host="https://npmmirror.com/mirrors/sharp-libvips"
# Set Prisma environment variables to optimize installation
ENV PRISMA_ENGINES_MIRROR="https://registry.npmmirror.com/-/binary/prisma"
ENV PRISMA_SKIP_POSTINSTALL_GENERATE=true
# Copy Project Files
COPY . .
# Configure Mirror Based on USE_MIRROR Parameter
RUN if [ "$USE_MIRROR" = "true" ]; then \
echo "Using Taobao Mirror to Install Dependencies" && \
echo '{ "install": { "registry": "https://registry.npmmirror.com" } }' > .bunfig.json; \
else \
echo "Using Default Mirror to Install Dependencies"; \
fi
# Pre-install Sharp for ARM architecture
RUN if [ "$(uname -m)" = "aarch64" ] || [ "$(uname -m)" = "arm64" ]; then \
echo "Detected ARM architecture, installing sharp platform-specific dependencies..." && \
mkdir -p /tmp/sharp-cache && \
export SHARP_CACHE_DIRECTORY=/tmp/sharp-cache && \
bun install --platform=linux --arch=arm64 sharp@0.34.1 --no-save --unsafe-perm || \
bun install --force @img/sharp-linux-arm64 --no-save; \
fi
# Install Dependencies and Build App
RUN bun install --unsafe-perm
RUN bunx prisma generate
RUN bun run build:web
RUN bun run build:seed
RUN printf '#!/bin/sh\necho "Current Environment: $NODE_ENV"\nnpx prisma migrate deploy\nnode server/seed.js\nnode server/index.js\n' > start.sh && \
chmod +x start.sh
FROM node:20-alpine as init-downloader
WORKDIR /app
RUN wget -qO /app/dumb-init https://github.com/Yelp/dumb-init/releases/download/v1.2.5/dumb-init_1.2.5_$(uname -m) && \
chmod +x /app/dumb-init && \
rm -rf /var/cache/apk/*
# Runtime Stage - Using Alpine as required
FROM node:20-alpine AS runner
# Add Build Arguments
ARG USE_MIRROR=false
WORKDIR /app
# Environment Variables
ENV NODE_ENV=production
# If there is a proxy or load balancer behind HTTPS, you may need to disable secure cookies
ENV DISABLE_SECURE_COOKIE=false
# Set Trust Proxy
ENV TRUST_PROXY=1
# Set Sharp environment variables
ENV SHARP_IGNORE_GLOBAL_LIBVIPS=1
ENV npm_config_sharp_binary_host="https://npmmirror.com/mirrors/sharp"
ENV npm_config_sharp_libvips_binary_host="https://npmmirror.com/mirrors/sharp-libvips"
RUN apk add --no-cache openssl vips-dev python3 py3-setuptools make g++ gcc libc-dev linux-headers && \
if [ "$USE_MIRROR" = "true" ]; then \
echo "Using Taobao Mirror to Install Dependencies" && \
npm config set registry https://registry.npmmirror.com; \
else \
echo "Using Default Mirror to Install Dependencies"; \
fi
# Copy Build Artifacts and Necessary Files
COPY --from=builder /app/dist ./server
COPY --from=builder /app/server/lute.min.js ./server/lute.min.js
COPY --from=builder /app/prisma ./prisma
COPY --from=builder /app/node_modules/.prisma/client ./node_modules/.prisma/client
COPY --from=builder /app/start.sh ./
COPY --from=init-downloader /app/dumb-init /usr/local/bin/dumb-init
RUN chmod +x ./start.sh && \
ls -la start.sh
RUN if [ "$(uname -m)" = "aarch64" ] || [ "$(uname -m)" = "arm64" ]; then \
echo "Detected ARM architecture, installing sharp platform-specific dependencies..." && \
mkdir -p /tmp/sharp-cache && \
export SHARP_CACHE_DIRECTORY=/tmp/sharp-cache && \
npm install --platform=linux --arch=arm64 sharp@0.34.1 --no-save --unsafe-perm || \
npm install --force @img/sharp-linux-arm64 --no-save; \
fi
# Install runtime dependencies; legacy peer deps avoids optional peer conflicts from LangChain.
RUN echo "Installing additional dependencies..." && \
npm install @node-rs/crc32 lightningcss sharp@0.34.1 prisma@5.21.1 && \
npm install -g prisma@5.21.1 && \
npm install sqlite3@5.1.7 && \
npm install --legacy-peer-deps llamaindex @langchain/community@0.3.40 && \
npm install @libsql/client @libsql/core && \
npx prisma generate && \
# find / -type d -name "onnxruntime-*" -exec rm -rf {} + 2>/dev/null || true && \
# npm cache clean --force && \
rm -rf /tmp/* && \
apk del python3 py3-setuptools make g++ gcc libc-dev linux-headers && \
rm -rf /var/cache/apk/* /root/.npm /root/.cache
# Expose Port (Adjust According to Actual Application)
EXPOSE 1111
CMD ["/usr/local/bin/dumb-init", "--", "/bin/sh", "-c", "./start.sh"]