| |
| |
| |
| |
| |
|
|
| FROM node:lts-trixie-slim AS base |
| RUN apt-get update \ |
| && apt-get install -y --no-install-recommends ca-certificates curl git \ |
| && rm -rf /var/lib/apt/lists/* |
| RUN corepack enable |
|
|
| FROM base AS deps |
| WORKDIR /app |
| COPY package.json pnpm-workspace.yaml pnpm-lock.yaml .npmrc ./ |
| COPY cli/package.json cli/ |
| COPY server/package.json server/ |
| COPY ui/package.json ui/ |
| COPY packages/shared/package.json packages/shared/ |
| COPY packages/db/package.json packages/db/ |
| COPY packages/adapter-utils/package.json packages/adapter-utils/ |
| COPY packages/adapters/claude-local/package.json packages/adapters/claude-local/ |
| COPY packages/adapters/codex-local/package.json packages/adapters/codex-local/ |
| COPY packages/adapters/cursor-local/package.json packages/adapters/cursor-local/ |
| COPY packages/adapters/gemini-local/package.json packages/adapters/gemini-local/ |
| COPY packages/adapters/openclaw-gateway/package.json packages/adapters/openclaw-gateway/ |
| COPY packages/adapters/opencode-local/package.json packages/adapters/opencode-local/ |
| COPY packages/adapters/pi-local/package.json packages/adapters/pi-local/ |
| COPY packages/plugins/sdk/package.json packages/plugins/sdk/ |
| COPY patches/ patches/ |
| RUN pnpm install --frozen-lockfile |
|
|
| FROM base AS build |
| WORKDIR /app |
| COPY --from=deps /app /app |
| COPY . . |
| RUN pnpm --filter @paperclipai/ui build |
| RUN pnpm --filter @paperclipai/plugin-sdk build |
| RUN pnpm --filter @paperclipai/server build |
| RUN pnpm --filter paperclipai build |
| RUN test -f server/dist/index.js || (echo "ERROR: server build output missing" && exit 1) |
| RUN test -f cli/dist/index.js || (echo "ERROR: cli build output missing" && exit 1) |
|
|
| FROM base AS production |
| WORKDIR /app |
| COPY --chown=node:node --from=build /app /app |
|
|
| |
| RUN npm install --global --omit=dev @anthropic-ai/claude-code@latest @openai/codex@latest opencode-ai \ |
| && mkdir -p /paperclip \ |
| && chown node:node /paperclip |
|
|
| |
| |
| RUN apt-get update \ |
| && apt-get install -y --no-install-recommends \ |
| python3 python3-pip pipx build-essential gettext-base postgresql postgresql-contrib postgresql-client tzdata \ |
| && rm -rf /var/lib/apt/lists/* \ |
| && pipx install --global hermes-agent \ |
| && pipx install --global openviking==0.4.6 |
|
|
| |
| COPY docker/hermes-home /opt/hermes-home |
| RUN chown -R node:node /opt/hermes-home |
|
|
| |
| RUN chmod +x /app/deploy/*.sh |
|
|
| ENV NODE_ENV=production \ |
| HOME=/paperclip \ |
| HOST=0.0.0.0 \ |
| PORT=7860 \ |
| SERVE_UI=true \ |
| PAPERCLIP_HOME=/paperclip \ |
| PAPERCLIP_INSTANCE_ID=default \ |
| PAPERCLIP_CONFIG=/paperclip/instances/default/config.json \ |
| PAPERCLIP_DEPLOYMENT_MODE=authenticated \ |
| PAPERCLIP_DEPLOYMENT_EXPOSURE=public \ |
| PAPERCLIP_MIGRATION_AUTO_APPLY=true \ |
| OPENVIKING_CONFIG_FILE=/paperclip/.openviking/ov.conf |
|
|
| VOLUME ["/paperclip"] |
| EXPOSE 7860 |
|
|
| USER node |
| ENTRYPOINT ["/app/deploy/entrypoint.sh"] |
|
|