diff --git a/ct/paperless-ngx.sh b/ct/paperless-ngx.sh deleted file mode 100644 index 8c0b38e8..00000000 --- a/ct/paperless-ngx.sh +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env bash -source <(curl -fsSL https://raw.githubusercontent.com/community-scripts/ProxmoxVED/main/misc/build.func) -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://docs.paperless-ngx.com/ - -APP="Paperless-ngx" -var_tags="${var_tags:-document;management}" -var_cpu="${var_cpu:-2}" -var_ram="${var_ram:-2048}" -var_disk="${var_disk:-10}" -var_os="${var_os:-debian}" -var_version="${var_version:-12}" -var_unprivileged="${var_unprivileged:-1}" - -header_info "$APP" -variables -color -catch_errors - -function update_script() { - header_info - check_container_storage - check_container_resources - if [[ ! -d /opt/paperless ]]; then - msg_error "No ${APP} Installation Found!" - exit - fi - if ! command -v jq &>/dev/null; then - $STD apt-get install -y jq - fi - RELEASE=$(curl -fsSL https://api.github.com/repos/paperless-ngx/paperless-ngx/releases/latest | jq -r .tag_name | sed 's/^v//') - if [[ "${RELEASE}" != "$(cat ~/.paperless 2>/dev/null)" ]] || [[ ! -f ~/.paperless ]]; then - msg_info "Stopping all Paperless-ngx Services" - systemctl stop paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue - msg_ok "Stopped all Paperless-ngx Services" - - if grep -q "uv run" /etc/systemd/system/paperless-webserver.service; then - - msg_info "backing up data" - mkdir -p /opt/paperless/backup - cp -r /opt/paperless/data /opt/paperless/backup/ - cp -r /opt/paperless/media /opt/paperless/backup/ - cp -r /opt/paperless/paperless.conf /opt/paperless/backup/ - msg_ok "Backup completed" - - PYTHON_VERSION="3.13" setup_uv - fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" - fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" - setup_gs - - msg_info "Updating to ${RELEASE}" - cp -r /opt/paperless/backup/* /opt/paperless/ - cd /opt/paperless - $STD uv sync --all-extras - cd /opt/paperless/src - $STD uv run -- python manage.py migrate - msg_ok "Updated to ${RELEASE}" - else - msg_warn "You are about to migrate your Paperless-ngx installation to uv!" - msg_custom "🔒" "It is strongly recommended to take a Proxmox snapshot first:" - echo -e " 1. Stop the container: pct stop " - echo -e " 2. Create a snapshot: pct snapshot pre-paperless-uv-migration" - echo -e " 3. Start the container again\n" - - read -rp "Have you created a snapshot? [y/N]: " confirm - if [[ ! "$confirm" =~ ^([yY]|[yY][eE][sS])$ ]]; then - msg_error "Migration aborted. Please create a snapshot first." - exit 1 - fi - msg_info "Migrating old Paperless-ngx installation to uv" - rm -rf /opt/paperless/venv - find /opt/paperless -name "__pycache__" -type d -exec rm -rf {} + - - declare -A PATCHES=( - ["paperless-consumer.service"]="ExecStart=uv run -- python manage.py document_consumer" - ["paperless-scheduler.service"]="ExecStart=uv run -- celery --app paperless beat --loglevel INFO" - ["paperless-task-queue.service"]="ExecStart=uv run -- celery --app paperless worker --loglevel INFO" - ["paperless-webserver.service"]="ExecStart=uv run -- granian --interface asgi --ws \"paperless.asgi:application\"" - ) - - for svc in "${!PATCHES[@]}"; do - path=$(systemctl show -p FragmentPath "$svc" | cut -d= -f2) - if [[ -n "$path" && -f "$path" ]]; then - sed -i "s|^ExecStart=.*|${PATCHES[$svc]}|" "$path" - if [[ "$svc" == "paperless-webserver.service" ]]; then - grep -q "^Environment=GRANIAN_HOST=" "$path" || - sed -i '/^\[Service\]/a Environment=GRANIAN_HOST=::' "$path" - grep -q "^Environment=GRANIAN_PORT=" "$path" || - sed -i '/^\[Service\]/a Environment=GRANIAN_PORT=8000' "$path" - grep -q "^Environment=GRANIAN_WORKERS=" "$path" || - sed -i '/^\[Service\]/a Environment=GRANIAN_WORKERS=1' "$path" - fi - msg_ok "Patched $svc" - else - msg_error "Service file for $svc not found!" - fi - done - - $STD systemctl daemon-reload - msg_info "backing up data" - mkdir -p /opt/paperless/backup - cp -r /opt/paperless/data /opt/paperless/backup/ - cp -r /opt/paperless/media /opt/paperless/backup/ - cp -r /opt/paperless/paperless.conf /opt/paperless/backup/ - msg_ok "Backup completed" - - PYTHON_VERSION="3.13" setup_uv - fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" - fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" - setup_gs - - msg_info "Updating Paperless-ngx" - cp -r /opt/paperless/backup/* /opt/paperless/ - cd /opt/paperless - $STD uv sync --all-extras - cd /opt/paperless/src - $STD uv run -- python manage.py migrate - msg_ok "Paperless-ngx migration and update to ${RELEASE} completed" - fi - - msg_info "Starting all Paperless-ngx Services" - systemctl start paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue - sleep 1 - msg_ok "Started all Paperless-ngx Services" - msg_ok "Updated Successfully!\n" - else - msg_ok "No update required. ${APP} is already at v${RELEASE}" - fi - exit -} - -start -build_container -description - -msg_ok "Completed Successfully!\n" -echo -e "${CREATING}${GN}${APP} setup has been successfully initialized!${CL}" -echo -e "${INFO}${YW} Access it using the following URL:${CL}" -echo -e "${TAB}${GATEWAY}${BGN}http://${IP}:8000${CL}" diff --git a/install/paperless-ngx-install.sh b/install/paperless-ngx-install.sh deleted file mode 100644 index d668909f..00000000 --- a/install/paperless-ngx-install.sh +++ /dev/null @@ -1,203 +0,0 @@ -#!/usr/bin/env bash - -# Copyright (c) 2021-2025 tteck -# Author: tteck (tteckster) | MickLesk (CanbiZ) -# License: MIT | https://github.com/community-scripts/ProxmoxVE/raw/main/LICENSE -# Source: https://docs.paperless-ngx.com/ - -source /dev/stdin <<<"$FUNCTIONS_FILE_PATH" -color -verb_ip6 -catch_errors -setting_up_container -network_check -update_os - -msg_info "Installing Dependencies (Patience)" -$STD apt-get install -y \ - redis \ - build-essential \ - imagemagick \ - fonts-liberation \ - optipng \ - libpq-dev \ - libmagic-dev \ - mime-support \ - libzbar0 \ - poppler-utils \ - default-libmysqlclient-dev \ - automake \ - libtool \ - pkg-config \ - libtiff-dev \ - libpng-dev \ - libleptonica-dev -msg_ok "Installed Dependencies" - -PG_VERSION="16" setup_postgresql -PYTHON_VERSION="3.13" setup_uv -fetch_and_deploy_gh_release "paperless" "paperless-ngx/paperless-ngx" "prebuild" "latest" "/opt/paperless" "paperless*tar.xz" -fetch_and_deploy_gh_release "jbig2enc" "ie13/jbig2enc" "tarball" "latest" "/opt/jbig2enc" -setup_gs - -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 -$STD sudo make install -msg_ok "Installed OCR Dependencies" - -msg_info "Setup JBIG2" -cd /opt/jbig2enc -$STD bash ./autogen.sh -$STD bash ./configure -$STD make -$STD make install -rm -rf /opt/jbig2enc -msg_ok "Installed JBIG2" - -msg_info "Setting up PostgreSQL database" -DB_NAME=paperlessdb -DB_USER=paperless -DB_PASS="$(openssl rand -base64 18 | cut -c1-13)" -SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)" -$STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';" -$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 -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 - -msg_info "Installing Natural Language Toolkit (Patience)" -$STD uv run -- python -m nltk.downloader -d /usr/share/nltk_data all -sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml -msg_ok "Installed Natural Language Toolkit" - -msg_info "Setup Paperless-ngx" -cd /opt/paperless -$STD uv sync --all-extras -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|' \ - -e "s|#PAPERLESS_CONSUMPTION_DIR=../consume|PAPERLESS_CONSUMPTION_DIR=/opt/paperless/consume|" \ - -e "s|#PAPERLESS_DATA_DIR=../data|PAPERLESS_DATA_DIR=/opt/paperless/data|" \ - -e "s|#PAPERLESS_MEDIA_ROOT=../media|PAPERLESS_MEDIA_ROOT=/opt/paperless/media|" \ - -e "s|#PAPERLESS_STATICDIR=../static|PAPERLESS_STATICDIR=/opt/paperless/static|" \ - -e 's|#PAPERLESS_DBHOST=localhost|PAPERLESS_DBHOST=localhost|' \ - -e 's|#PAPERLESS_DBPORT=5432|PAPERLESS_DBPORT=5432|' \ - -e "s|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=$DB_NAME|" \ - -e "s|#PAPERLESS_DBUSER=paperless|PAPERLESS_DBUSER=$DB_USER|" \ - -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" \ - -e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" \ - /opt/paperless/paperless.conf -cd /opt/paperless/src -$STD uv run -- python manage.py migrate -msg_ok "Setup Paperless-ngx" - -msg_info "Setting up admin Paperless-ngx User & Password" -cat <>~/paperless-ngx.creds -msg_ok "Set up admin Paperless-ngx User & Password" - -msg_info "Creating Services" -cat </etc/systemd/system/paperless-scheduler.service -[Unit] -Description=Paperless Celery beat -Requires=redis.service - -[Service] -WorkingDirectory=/opt/paperless/src -ExecStart=uv run -- celery --app paperless beat --loglevel INFO - -[Install] -WantedBy=multi-user.target -EOF - -cat </etc/systemd/system/paperless-task-queue.service -[Unit] -Description=Paperless Celery Workers -Requires=redis.service -After=postgresql.service - -[Service] -WorkingDirectory=/opt/paperless/src -ExecStart=uv run -- celery --app paperless worker --loglevel INFO - -[Install] -WantedBy=multi-user.target -EOF - -cat </etc/systemd/system/paperless-consumer.service -[Unit] -Description=Paperless consumer -Requires=redis.service - -[Service] -WorkingDirectory=/opt/paperless/src -ExecStartPre=/bin/sleep 2 -ExecStart=uv run -- python manage.py document_consumer - -[Install] -WantedBy=multi-user.target -EOF - -cat </etc/systemd/system/paperless-webserver.service -[Unit] -Description=Paperless webserver -After=network.target -Wants=network.target -Requires=redis.service - -[Service] -WorkingDirectory=/opt/paperless/src -ExecStart=uv run -- granian --interface asginl --ws "paperless.asgi:application" -Environment=GRANIAN_HOST=:: -Environment=GRANIAN_PORT=8000 -Environment=GRANIAN_WORKERS=1 - -[Install] -WantedBy=multi-user.target -EOF -systemctl enable -q --now paperless-webserver paperless-scheduler paperless-task-queue paperless-consumer -msg_ok "Created Services" - -read -r -p "${TAB3}Would you like to add Adminer? " prompt -if [[ "${prompt,,}" =~ ^(y|yes)$ ]]; then - setup_adminer -fi - -motd_ssh -customize - -msg_info "Cleaning up" -rm -rf /opt/paperless/docker -rm -rf /tmp/ghostscript* -$STD apt-get -y autoremove -$STD apt-get -y autoclean -msg_ok "Cleaned"