papra Docker & Self-Hosted Deployment

GitHub

The minimalistic document archiving platform.

5,038 stars TypeScript TypeScript 1 file ยท ~8,954 tokens #app#archive#document#documents#self-hosted
1. Pull Image (DOCKERHUB) docker pull papra-hq/papra:latest
2. Docker Run (1-Click Launch) docker run -d --name papra -p 1221:1221 --restart always papra-hq/papra:latest
3. Podman Run podman run -d --name papra -p 1221:1221 --restart always papra-hq/papra:latest
4. Skopeo Inspect (Zero-Pull Manifest) skopeo inspect docker://docker.io/papra-hq/papra:latest
5. ORAS Pull (OCI Artifact) oras pull papra-hq/papra:latest
apps/papra-server/Dockerfile
# syntax = docker/dockerfile:1@sha256:87999aa3d42bdc6bea60565083ee17e86d1f3339802f543c0d03998580f9cb89

FROM node:26.12.1-slim@sha256:36793bcbb160a6a16cede1e62b93f84e26b78a972a8a4c0b879c1c12f22761ec AS base

LABEL fly_launch_runtime="Node.js"

ARG PNPM_VERSION=12.4.2
RUN npm install -g pnpm@${PNPM_VERSION}

WORKDIR /app

ENV NODE_ENV="production"

# -----------------

FROM base AS build

# Install packages needed by some node modules
RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y build-essential node-gyp pkg-config python-is-python3

COPY pnpm-workspace.yaml package.json pnpm-lock.yaml ./

COPY packages/lecture/package.json ./packages/lecture/package.json
COPY packages/webhooks/package.json ./packages/webhooks/package.json
COPY packages/search-parser/package.json ./packages/search-parser/package.json
COPY packages/std/package.json ./packages/std/package.json
COPY apps/papra-server/package.json ./apps/papra-server/package.json

RUN pnpm install --frozen-lockfile --ignore-scripts

COPY packages/lecture ./packages/lecture
COPY packages/webhooks ./packages/webhooks
COPY packages/search-parser ./packages/search-parser
COPY packages/std ./packages/std
COPY apps/papra-server ./apps/papra-server

RUN pnpm --filter "@papra/app-server..." run build

RUN pnpm --filter @papra/app-server --prod deploy /app/production

# -----------------

FROM base
ENV NODE_ENV="production"
ENV PORT=1221

# Install Tesseract OCR
RUN apt-get update -qq && \
    apt-get install --no-install-recommends -y tesseract-ocr tesseract-ocr-all && \
    rm -rf /var/lib/apt/lists/*

COPY --from=build /app/production /app
COPY pnpm-workspace.yaml ./

EXPOSE 1221

# The command is overridden by Fly at runtime, see ./fly.toml
CMD [ "pnpm", "--silent", "start:with-migrations" ]