File size: 3,666 Bytes
66f4839
 
 
4c56e8b
66f4839
 
4c56e8b
 
 
 
 
 
845d414
 
4c56e8b
845d414
66f4839
4c56e8b
845d414
7ca6567
 
68cc0dc
 
4c56e8b
66f4839
 
170d431
 
4c56e8b
30857bc
 
66f4839
4c56e8b
 
66f4839
845d414
68cc0dc
66f4839
4c56e8b
66f4839
30857bc
 
66f4839
 
4c56e8b
30857bc
 
66f4839
4c56e8b
30857bc
 
 
 
 
 
4117628
30857bc
 
 
 
 
 
 
 
 
66f4839
4c56e8b
4117628
30857bc
 
68cc0dc
 
4117628
68cc0dc
 
66f4839
4c56e8b
7ca6567
 
 
 
 
 
845d414
66f4839
 
170d431
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
FROM ubuntu:22.04
ENV DEBIAN_FRONTEND=noninteractive

# Install core system dependencies + Node.js LTS (>=16)
RUN apt-get update && \
    apt-get install -y --no-install-recommends \
      curl ca-certificates gnupg build-essential git python3 \
      python3-pip python3-dev imagemagick fonts-liberation libpq-dev \
      default-libmysqlclient-dev pkg-config libmagic-dev libzbar0 poppler-utils \
      unpaper ghostscript icc-profiles-free qpdf liblept5 libxml2 pngquant \
      zlib1g tesseract-ocr tesseract-ocr-eng redis-server postgresql \
      postgresql-client supervisor nano && \
    rm -rf /var/lib/apt/lists/* && \
    curl -fsSL https://deb.nodesource.com/setup_18.x | bash - && \
    apt-get update && apt-get install -y nodejs && \
    npm install -g pnpm

# Verify Node and pnpm versions
RUN node --version && pnpm --version

# Install uv package installer
RUN curl -sSf https://astral.sh/uv/install.sh | bash

# Create the system user and prepare working directory
RUN adduser --system --home /opt/paperless --group paperless
WORKDIR /opt/paperless
RUN git config --global --add safe.directory /opt/paperless

# Clone repository & checkout specific version
RUN git clone https://github.com/paperless-ngx/paperless-ngx.git . && \
    git checkout v2.17.1

# Build frontend using pnpm—no production flag
RUN cd src-ui && pnpm install && pnpm exec ng build

# Install Python backend dependencies
RUN /root/.cargo/bin/uv pip install -r requirements.txt

# Initialize PostgreSQL
RUN service postgresql start && \
    su - postgres -c "psql -c \"CREATE USER paperless WITH PASSWORD 'your_db_password';\"" && \
    su - postgres -c "psql -c \"CREATE DATABASE paperless OWNER paperless;\"" && \
    service postgresql stop

# Create and take care of directories
RUN mkdir -p media data consume export && \
    chown -R paperless:paperless media data consume export

# Environment variables for Paperless‑ngx
ENV PAPERLESS_REDIS="redis://localhost:6379/0" \
    PAPERLESS_DBENGINE="postgresql" \
    PAPERLESS_DBHOST="localhost" \
    PAPERLESS_DBNAME="paperless" \
    PAPERLESS_DBUSER="paperless" \
    PAPERLESS_DBPASS="your_db_password" \
    PAPERLESS_SECRET_KEY="a_very_long_random_string" \
    PAPERLESS_CONSUMPTION_DIR="/opt/paperless/consume" \
    PAPERLESS_DATA_DIR="/opt/paperless/data" \
    PAPERLESS_MEDIA_ROOT="/opt/paperless/media" \
    PAPERLESS_PORT="7860" \
    PAPERLESS_BIND_ADDR="0.0.0.0" \
    PAPERLESS_WEBSERVER_WORKERS=1 \
    PAPERLESS_OCR_PAGES=1 \
    PAPERLESS_ENABLE_NLTK=false \
    PAPERLESS_OCR_CLEAN="none"

# Supervisord config to orchestrate services
RUN printf "[supervisord]\nnodaemon=true\n\n\
[program:postgresql]\ncommand=/usr/lib/postgresql/*/bin/postgres -D /var/lib/postgresql/*/main\nuser=postgres\n\n\
[program:redis]\ncommand=/usr/bin/redis-server\n\n\
[program:paperless-webserver]\ncommand=/opt/paperless/src/manage.py runserver 0.0.0.0:7860\nuser=paperless\n\n\
[program:paperless-consumer]\ncommand=/opt/paperless/src/manage.py document_consumer\nuser=paperless\n\n\
[program:paperless-scheduler]\ncommand=/opt/paperless/src/manage.py qcluster\nuser=paperless\n" > /etc/supervisor/conf.d/supervisord.conf

ENV PATH="/root/.cargo/bin:${PATH}"

# Startup script: launches DB, Redis, migrations, then supervisord
RUN printf "#!/bin/bash\n\
service postgresql start\n\
service redis-server start\n\
cd /opt/paperless\n\
python3 src/manage.py migrate\n\
python3 src/manage.py createsuperuser --noinput --username admin --email admin@example.com || true\n\
exec /usr/bin/supervisord -n -c /etc/supervisor/conf.d/supervisord.conf\n" > /startup.sh && chmod +x /startup.sh

EXPOSE 7860
CMD ["/startup.sh"]