PAPERLESS / Dockerfile
neoni-teal's picture
Update Dockerfile
4c56e8b verified
Raw
History Blame Contribute Delete
3.67 kB
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"]