46 lines
1.1 KiB
Docker
46 lines
1.1 KiB
Docker
# Stage 1: Build Next.js static export
|
|
FROM node:22-alpine AS frontend
|
|
RUN corepack enable
|
|
WORKDIR /app
|
|
COPY package.json pnpm-lock.yaml ./
|
|
RUN pnpm install --frozen-lockfile
|
|
COPY src/ ./src/
|
|
COPY public/ ./public/
|
|
COPY next.config.ts tsconfig.json postcss.config.mjs components.json ./
|
|
RUN pnpm build
|
|
|
|
# Stage 2: Build Rust server binary
|
|
FROM rust:slim-bookworm AS backend
|
|
RUN apt-get update && apt-get install -y pkg-config libssl-dev && rm -rf /var/lib/apt/lists/*
|
|
WORKDIR /app/src-tauri
|
|
COPY src-tauri/ ./
|
|
RUN cargo build --release --bin codeg-server --no-default-features
|
|
|
|
# Stage 3: Runtime
|
|
FROM node:22-bookworm-slim
|
|
RUN apt-get update && apt-get install -y \
|
|
libsqlite3-0 \
|
|
git \
|
|
openssh-client \
|
|
ca-certificates \
|
|
curl \
|
|
python3 \
|
|
python3-pip \
|
|
gcc \
|
|
g++ \
|
|
make \
|
|
&& rm -rf /var/lib/apt/lists/*
|
|
|
|
COPY --from=backend /app/src-tauri/target/release/codeg-server /usr/local/bin/codeg-server
|
|
COPY --from=frontend /app/out /app/web
|
|
|
|
ENV CODEG_STATIC_DIR=/app/web
|
|
ENV CODEG_DATA_DIR=/data
|
|
ENV CODEG_PORT=3080
|
|
ENV CODEG_HOST=0.0.0.0
|
|
|
|
EXPOSE 3080
|
|
VOLUME /data
|
|
|
|
CMD ["codeg-server"]
|