From e9704dd120709b37e7c41aca296b0fdf0ce0ff49 Mon Sep 17 00:00:00 2001 From: CanbiZ <47820557+MickLesk@users.noreply.github.com> Date: Wed, 30 Apr 2025 07:55:36 +0200 Subject: [PATCH] Update paperless-ngx-install.sh --- install/paperless-ngx-install.sh | 179 ++++++++++++++++--------------- 1 file changed, 91 insertions(+), 88 deletions(-) diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh index 01daa79..0c4d7f7 100644 --- a/install/paperless-ngx-install.sh +++ b/install/paperless-ngx-install.sh @@ -15,90 +15,91 @@ update_os msg_info "Installing Dependencies (Patience)" $STD apt-get install -y \ - redis \ - postgresql \ - build-essential \ - imagemagick \ - fonts-liberation \ - optipng \ - gnupg \ - libpq-dev \ - libmagic-dev \ - mime-support \ - libzbar0 \ - poppler-utils \ - default-libmysqlclient-dev \ - automake \ - libtool \ - pkg-config \ - git \ - libtiff-dev \ - libpng-dev \ - libleptonica-dev + redis \ + postgresql \ + build-essential \ + imagemagick \ + fonts-liberation \ + optipng \ + gnupg \ + libpq-dev \ + libmagic-dev \ + mime-support \ + libzbar0 \ + poppler-utils \ + default-libmysqlclient-dev \ + automake \ + libtool \ + pkg-config \ + git \ + libtiff-dev \ + libpng-dev \ + libleptonica-dev msg_ok "Installed Dependencies" -msg_info "Setup Python3" -$STD apt-get install -y \ - python3 \ - python3-pip \ - python3-dev \ - python3-setuptools \ - python3-wheel -msg_ok "Setup Python3" +msg_info "Setup uv" +setup_uv +ln -sf /root/.cargo/bin/uv /usr/local/bin/uv +msg_ok "Setup uv" msg_info "Installing OCR Dependencies (Patience)" $STD apt-get install -y \ - unpaper \ - icc-profiles-free \ - qpdf \ - liblept5 \ - libxml2 \ - pngquant \ - zlib1g \ - tesseract-ocr \ - tesseract-ocr-eng + unpaper \ + icc-profiles-free \ + qpdf \ + liblept5 \ + libxml2 \ + pngquant \ + zlib1g \ + tesseract-ocr \ + tesseract-ocr-eng cd /tmp -curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz" -o $(basename "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10040/ghostscript-10.04.0.tar.gz") -$STD tar -xzf ghostscript-10.04.0.tar.gz -cd ghostscript-10.04.0 +curl -fsSL "https://github.com/ArtifexSoftware/ghostpdl-downloads/releases/download/gs10051/ghostpdl-10.05.1.tar.gz" -o "ghostscript.tar.gz" +$STD tar -xzf ghostscript.tar.gz +cd ghostpdl-10.05.1 $STD ./configure $STD make -$STD sudo make install +$STD make install msg_ok "Installed OCR Dependencies" msg_info "Installing JBIG2" $STD git clone https://github.com/ie13/jbig2enc /opt/jbig2enc cd /opt/jbig2enc -$STD bash ./autogen.sh -$STD bash ./configure +$STD ./autogen.sh +$STD ./configure $STD make $STD make install rm -rf /opt/jbig2enc msg_ok "Installed JBIG2" msg_info "Installing Paperless-ngx (Patience)" -Paperlessngx=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep "title>Release" | cut -d " " -f 5) +LATEST=$(curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/latest" | grep -oP '(?<=/tag/)[^<]+') cd /opt -$STD curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/$Paperlessngx/paperless-ngx-$Paperlessngx.tar.xz" -o "paperless-ngx-$Paperlessngx.tar.xz" -$STD tar -xf "paperless-ngx-$Paperlessngx.tar.xz" -C /opt/ +curl -fsSL "https://github.com/paperless-ngx/paperless-ngx/releases/download/${LATEST}/paperless-ngx-${LATEST}.tar.xz" -o paperless.tar.xz +tar -xf paperless.tar.xz mv paperless-ngx paperless -rm "paperless-ngx-$Paperlessngx.tar.xz" +rm paperless.tar.xz cd /opt/paperless -$STD pip install --upgrade pip -$STD pip install -r requirements.txt + +uv venv /opt/paperless/venv +source /opt/paperless/venv/bin/activate +uv pip install --all-extras -r requirements.txt + curl -fsSL "https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example" -o /opt/paperless/paperless.conf -mkdir -p {consume,data,media,static} -sed -i -e 's|#PAPERLESS_REDIS=redis://localhost:6379|PAPERLESS_REDIS=redis://localhost:6379|' /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" /opt/paperless/paperless.conf -echo "${Paperlessngx}" >/opt/"${APPLICATION}"_version.txt +mkdir -p consume data media static +sed -i -e 's|#PAPERLESS_REDIS=.*|PAPERLESS_REDIS=redis://localhost:6379|' \ + -e "s|#PAPERLESS_CONSUMPTION_DIR=.*|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \ + -e "s|#PAPERLESS_DATA_DIR=.*|PAPERLESS_DATA_DIR=/opt/paperless/data|" \ + -e "s|#PAPERLESS_MEDIA_ROOT=.*|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \ + -e "s|#PAPERLESS_STATICDIR=.*|PAPERLESS_STATICDIR=/opt/paperless/static|" \ + paperless.conf + +echo "$LATEST" >/opt/"${APPLICATION}"_version.txt msg_ok "Installed Paperless-ngx" msg_info "Installing Natural Language Toolkit (Patience)" -$STD python3 -m nltk.downloader -d /usr/share/nltk_data all +/opt/paperless/venv/bin/python3 -m nltk.downloader -d /usr/share/nltk_data all msg_ok "Installed Natural Language Toolkit" msg_info "Setting up PostgreSQL database" @@ -110,41 +111,44 @@ $STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PAS $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER ENCODING 'UTF8' TEMPLATE template0;" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET client_encoding TO 'utf8';" $STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET default_transaction_isolation TO 'read committed';" -$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC'" -echo "" >>~/paperless.creds -echo -e "Paperless-ngx Database User: \e[32m$DB_USER\e[0m" >>~/paperless.creds +$STD sudo -u postgres psql -c "ALTER ROLE $DB_USER SET timezone TO 'UTC';" + +echo -e "\nPaperless-ngx Database User: \e[32m$DB_USER\e[0m" >>~/paperless.creds echo -e "Paperless-ngx Database Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds echo -e "Paperless-ngx Database Name: \e[32m$DB_NAME\e[0m" >>~/paperless.creds -sed -i -e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' /opt/paperless/paperless.conf -sed -i -e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" /opt/paperless/paperless.conf -sed -i -e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" /opt/paperless/paperless.conf + +sed -i -e "s|#PAPERLESS_DBHOST=.*|PAPERLESS_DBHOST=localhost|" \ + -e "s|#PAPERLESS_DBPORT=.*|PAPERLESS_DBPORT=5432|" \ + -e "s|#PAPERLESS_DBNAME=.*|PAPERLESS_DBNAME=$DB_NAME|" \ + -e "s|#PAPERLESS_DBUSER=.*|PAPERLESS_DBUSER=$DB_USER|" \ + -e "s|#PAPERLESS_DBPASS=.*|PAPERLESS_DBPASS=$DB_PASS|" \ + -e "s|#PAPERLESS_SECRET_KEY=.*|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \ + /opt/paperless/paperless.conf + cd /opt/paperless/src -$STD python3 manage.py migrate +source /opt/paperless/venv/bin/activate +python3 manage.py migrate msg_ok "Set up PostgreSQL database" read -r -p "Would you like to add Adminer? " prompt if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - msg_info "Installing Adminer" - $STD apt install -y adminer - $STD a2enconf adminer - systemctl reload apache2 - IP=$(hostname -I | awk '{print $1}') - echo "" >>~/paperless.creds - echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/paperless.creds - echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/paperless.creds - echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/paperless.creds - echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/paperless.creds - echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds - echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/paperless.creds - msg_ok "Installed Adminer" + msg_info "Installing Adminer" + $STD apt install -y adminer + $STD a2enconf adminer + systemctl reload apache2 + IP=$(hostname -I | awk '{print $1}') + echo "" >>~/paperless.creds + echo -e "Adminer Interface: \e[32m$IP/adminer/\e[0m" >>~/paperless.creds + echo -e "Adminer System: \e[32mPostgreSQL\e[0m" >>~/paperless.creds + echo -e "Adminer Server: \e[32mlocalhost:5432\e[0m" >>~/paperless.creds + echo -e "Adminer Username: \e[32m$DB_USER\e[0m" >>~/paperless.creds + echo -e "Adminer Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds + echo -e "Adminer Database: \e[32m$DB_NAME\e[0m" >>~/paperless.creds + msg_ok "Installed Adminer" fi msg_info "Setting up admin Paperless-ngx User & Password" -## From https://github.com/linuxserver/docker-paperless-ngx/blob/main/root/etc/cont-init.d/99-migrations -cat <>~/paperless.creds echo -e "Paperless-ngx WebUI User: \e[32madmin\e[0m" >>~/paperless.creds echo -e "Paperless-ngx WebUI Password: \e[32m$DB_PASS\e[0m" >>~/paperless.creds -echo "" >>~/paperless.creds msg_ok "Set up admin Paperless-ngx User & Password" msg_info "Creating Services" @@ -166,7 +169,7 @@ Requires=redis.service [Service] WorkingDirectory=/opt/paperless/src -ExecStart=celery --app paperless beat --loglevel INFO +ExecStart=/opt/paperless/venv/bin/celery --app paperless beat --loglevel INFO [Install] WantedBy=multi-user.target @@ -180,7 +183,7 @@ After=postgresql.service [Service] WorkingDirectory=/opt/paperless/src -ExecStart=celery --app paperless worker --loglevel INFO +ExecStart=/opt/paperless/venv/bin/celery --app paperless worker --loglevel INFO [Install] WantedBy=multi-user.target @@ -194,7 +197,7 @@ Requires=redis.service [Service] WorkingDirectory=/opt/paperless/src ExecStartPre=/bin/sleep 2 -ExecStart=python3 manage.py document_consumer +ExecStart=/opt/paperless/venv/bin/python3 manage.py document_consumer [Install] WantedBy=multi-user.target @@ -209,7 +212,7 @@ Requires=redis.service [Service] WorkingDirectory=/opt/paperless/src -ExecStart=granian --interface asginl --ws "paperless.asgi:application" +ExecStart=/opt/paperless/venv/bin/granian --interface asginl --ws "paperless.asgi:application" Environment=GRANIAN_HOST=:: Environment=GRANIAN_PORT=8000 Environment=GRANIAN_WORKERS=1 @@ -229,7 +232,7 @@ customize msg_info "Cleaning up" rm -rf /opt/paperless/docker -rm -rf /tmp/ghostscript* +rm -rf /tmp/ghostscript* /tmp/ghostpdl* $STD apt-get -y autoremove $STD apt-get -y autoclean msg_ok "Cleaned"