paperless-ngx-install.sh 5.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200
  1. #!/usr/bin/env bash
  2. # Copyright (c) 2021-2023 tteck
  3. # Author: tteck (tteckster)
  4. # License: MIT
  5. # https://github.com/tteck/Proxmox/raw/main/LICENSE
  6. source /dev/stdin <<<"$FUNCTIONS_FILE_PATH"
  7. color
  8. verb_ip6
  9. catch_errors
  10. setting_up_container
  11. network_check
  12. update_os
  13. msg_info "Installing Python3"
  14. $STD apt-get install -y --no-install-recommends \
  15. python3 \
  16. python3-pip \
  17. python3-dev \
  18. python3-setuptools \
  19. python3-wheel
  20. msg_ok "Installed Python3"
  21. msg_info "Installing Dependencies (Patience)"
  22. $STD apt-get install -y --no-install-recommends \
  23. redis \
  24. postgresql \
  25. build-essential \
  26. imagemagick \
  27. fonts-liberation \
  28. optipng \
  29. gnupg \
  30. libpq-dev \
  31. libmagic-dev \
  32. mime-support \
  33. libzbar0 \
  34. poppler-utils \
  35. default-libmysqlclient-dev \
  36. automake \
  37. libtool \
  38. pkg-config \
  39. git \
  40. curl \
  41. libtiff-dev \
  42. libpng-dev \
  43. libleptonica-dev \
  44. sudo \
  45. mc
  46. msg_ok "Installed Dependencies"
  47. msg_info "Installing OCR Dependencies (Patience)"
  48. $STD apt-get install -y --no-install-recommends \
  49. unpaper \
  50. ghostscript \
  51. icc-profiles-free \
  52. qpdf \
  53. liblept5 \
  54. libxml2 \
  55. pngquant \
  56. zlib1g \
  57. tesseract-ocr \
  58. tesseract-ocr-eng
  59. msg_ok "Installed OCR Dependencies"
  60. msg_info "Installing JBIG2"
  61. $STD git clone https://github.com/agl/jbig2enc /opt/jbig2enc
  62. cd /opt/jbig2enc
  63. $STD bash ./autogen.sh
  64. $STD bash ./configure
  65. $STD make
  66. $STD make install
  67. rm -rf /opt/jbig2enc
  68. msg_ok "Installed JBIG2"
  69. msg_info "Installing Paperless-ngx (Patience)"
  70. Paperlessngx=$(wget -q https://github.com/paperless-ngx/paperless-ngx/releases/latest -O - | grep "title>Release" | cut -d " " -f 5)
  71. cd /opt
  72. $STD wget https://github.com/paperless-ngx/paperless-ngx/releases/download/$Paperlessngx/paperless-ngx-$Paperlessngx.tar.xz
  73. $STD tar -xf paperless-ngx-$Paperlessngx.tar.xz -C /opt/
  74. mv paperless-ngx paperless
  75. rm paperless-ngx-$Paperlessngx.tar.xz
  76. cd /opt/paperless
  77. ## python 3.10+ doesn't like the '-e', so we remove it from this the requirements file
  78. sed -i -e 's|-e git+https://github.com/paperless-ngx/django-q.git|git+https://github.com/paperless-ngx/django-q.git|' /opt/paperless/requirements.txt
  79. $STD pip install --upgrade pip
  80. $STD pip install -r requirements.txt
  81. curl -s -o /opt/paperless/paperless.conf https://raw.githubusercontent.com/paperless-ngx/paperless-ngx/main/paperless.conf.example
  82. msg_ok "Installed Paperless-ngx"
  83. msg_info "Installing Natural Language Toolkit (Patience)"
  84. $STD python3 -m nltk.downloader -d /usr/share/nltk_data all
  85. msg_ok "Installed Natural Language Toolkit"
  86. msg_info "Setting up database"
  87. DB_USER=paperless
  88. DB_PASS="$(openssl rand -base64 18 | cut -c1-13)"
  89. DB_NAME=paperlessdb
  90. $STD sudo -u postgres psql -c "CREATE ROLE $DB_USER WITH LOGIN PASSWORD '$DB_PASS';"
  91. $STD sudo -u postgres psql -c "CREATE DATABASE $DB_NAME WITH OWNER $DB_USER TEMPLATE template0;"
  92. echo "Paperless-ngx Database User" >>~/paperless.creds
  93. echo $DB_USER >>~/paperless.creds
  94. echo "Paperless-ngx Database Password" >>~/paperless.creds
  95. echo $DB_PASS >>~/paperless.creds
  96. echo "Paperless-ngx Database Name" >>~/paperless.creds
  97. echo $DB_NAME >>~/paperless.creds
  98. mkdir -p {consume,media}
  99. sed -i -e 's|#PAPERLESS_DBNAME=paperless|PAPERLESS_DBNAME=paperlessdb|' /opt/paperless/paperless.conf
  100. sed -i -e "s|#PAPERLESS_DBPASS=paperless|PAPERLESS_DBPASS=$DB_PASS|" /opt/paperless/paperless.conf
  101. SECRET_KEY="$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 32)"
  102. sed -i -e "s|#PAPERLESS_SECRET_KEY=change-me|PAPERLESS_SECRET_KEY=$SECRET_KEY|" /opt/paperless/paperless.conf
  103. cd /opt/paperless/src
  104. $STD python3 manage.py migrate
  105. msg_ok "Set up database"
  106. msg_info "Setting up admin Paperless-ngx User & Password"
  107. ## From https://github.com/linuxserver/docker-paperless-ngx/blob/main/root/etc/cont-init.d/99-migrations
  108. cat <<EOF | python3 /opt/paperless/src/manage.py shell
  109. from django.contrib.auth import get_user_model
  110. UserModel = get_user_model()
  111. user = UserModel.objects.create_user('admin', password='$DB_PASS')
  112. user.is_superuser = True
  113. user.is_staff = True
  114. user.save()
  115. EOF
  116. echo "" >>~/paperless.creds
  117. echo "Paperless-ngx WebUI User" >>~/paperless.creds
  118. echo admin >>~/paperless.creds
  119. echo "Paperless-ngx WebUI Password" >>~/paperless.creds
  120. echo $DB_PASS >>~/paperless.creds
  121. msg_ok "Set up admin Paperless-ngx User & Password"
  122. msg_info "Creating Services"
  123. cat <<EOF >/etc/systemd/system/paperless-scheduler.service
  124. [Unit]
  125. Description=Paperless Celery beat
  126. Requires=redis.service
  127. [Service]
  128. WorkingDirectory=/opt/paperless/src
  129. ExecStart=celery --app paperless beat --loglevel INFO
  130. [Install]
  131. WantedBy=multi-user.target
  132. EOF
  133. cat <<EOF >/etc/systemd/system/paperless-task-queue.service
  134. [Unit]
  135. Description=Paperless Celery Workers
  136. Requires=redis.service
  137. [Service]
  138. WorkingDirectory=/opt/paperless/src
  139. ExecStart=celery --app paperless worker --loglevel INFO
  140. [Install]
  141. WantedBy=multi-user.target
  142. EOF
  143. cat <<EOF >/etc/systemd/system/paperless-consumer.service
  144. [Unit]
  145. Description=Paperless consumer
  146. Requires=redis.service
  147. [Service]
  148. WorkingDirectory=/opt/paperless/src
  149. ExecStart=python3 manage.py document_consumer
  150. [Install]
  151. WantedBy=multi-user.target
  152. EOF
  153. cat <<EOF >/etc/systemd/system/paperless-webserver.service
  154. [Unit]
  155. Description=Paperless webserver
  156. After=network.target
  157. Wants=network.target
  158. Requires=redis.service
  159. [Service]
  160. WorkingDirectory=/opt/paperless/src
  161. ExecStart=/usr/local/bin/gunicorn -c /opt/paperless/gunicorn.conf.py paperless.asgi:application
  162. [Install]
  163. WantedBy=multi-user.target
  164. EOF
  165. sed -i -e 's/rights="none" pattern="PDF"/rights="read|write" pattern="PDF"/' /etc/ImageMagick-6/policy.xml
  166. systemctl daemon-reload
  167. $STD systemctl enable --now paperless-consumer paperless-webserver paperless-scheduler paperless-task-queue.service
  168. msg_ok "Created Services"
  169. motd_ssh
  170. customize
  171. msg_info "Cleaning up"
  172. $STD apt-get autoremove
  173. $STD apt-get autoclean
  174. msg_ok "Cleaned"