Files
docker-compose-cookbooks/nixai_dev/Dockerfile
T
2026-07-03 12:55:31 -07:00

62 lines
2.0 KiB
Docker

# ===== STAGE 1: Build Dependencies =====
FROM debian:trixie-slim AS builder
ARG TARGETARCH
# Install build dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
ca-certificates curl gnupg git build-essential \
golang-go nodejs npm \
&& rm -rf /var/lib/apt/lists/*
# Install opencode from GitHub releases
RUN ARCH=${TARGETARCH} \
&& if [ "$ARCH" = "amd64" ]; then ARCH="x86_64"; fi \
&& curl -fsSL "https://github.com/anomalyco/opencode/releases/latest/download/opencode_linux_${ARCH}.tar.gz" \
| tar -xz -C /usr/local/bin opencode \
&& chmod +x /usr/local/bin/opencode
# Build openclaw from source
WORKDIR /build/openclaw
RUN git clone --depth 1 https://github.com/openclaw/openclaw.git . \
&& npm ci \
&& npm run build \
&& mkdir -p /opt/openclaw \
&& cp -r dist/* /opt/openclaw/ \
&& cp package.json /opt/openclaw/ \
&& cp -r node_modules /opt/openclaw/
# ===== STAGE 2: Runtime =====
FROM debian:trixie-slim
# Install runtime dependencies
RUN apt-get update && apt-get install -y --no-install-recommends \
supervisor curl ca-certificates tini \
&& curl -fsSL https://ollama.com/install.sh | sh \
&& rm -rf /var/lib/apt/lists/*
# Install code-server
RUN curl -fsSL https://code-server.dev/install.sh | sh -s -- --method=standalone
# Copy binaries from builder
COPY --from=builder /usr/local/bin/opencode /usr/local/bin/opencode
COPY --from=builder /opt/openclaw /opt/openclaw
# Create volume directories
RUN mkdir -p \
/data/ollama \
/config /data /projects \
/home/node/.openclaw /home/node/.openclaw/workspace /home/node/.config/openclaw \
/data/vscode/data /data/vscode/config
# Copy supervisor config
COPY supervisord.conf /etc/supervisor/conf.d/supervisord.conf
# Copy default opencode config
COPY opencode-config.json /config/config.json
# Set timezone
ENV TZ=America/Vancouver
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
# Entrypoint
ENTRYPOINT ["tini", "--", "/usr/bin/supervisord", "-c", "/etc/supervisor/conf.d/supervisord.conf"]