parent
cb478f76c8
commit
e580ba7cb7
25 changed files with 581 additions and 0 deletions
@ -0,0 +1,47 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
# The version to deploy |
||||||
|
paperless_version: 1.4.5 |
||||||
|
# URL of the paperless archive |
||||||
|
paperless_archive_url: https://github.com/jonaswinkler/paperless-ng/releases/download/ng-{{ paperless_version }}/paperless-ng-{{ paperless_version }}.tar.xz |
||||||
|
# Expected checksum |
||||||
|
paperless_archive_sha1: 4c989458c59890b9bd1dcd97a18e8bcb68280250 |
||||||
|
# Should ansible handle install and upgrades, or only initial install |
||||||
|
paperless_manage_upgrade: True |
||||||
|
# Root directory where paperless will be installed |
||||||
|
paperless_root_dir: /opt/paperless |
||||||
|
# Paperless will monitor this dir and import files from here |
||||||
|
paperless_consume_dir: "{{ paperless_root_dir }}/consume" |
||||||
|
|
||||||
|
# The user under which paperless will run |
||||||
|
paperless_user: paperless |
||||||
|
|
||||||
|
# Port used by paperless web interface |
||||||
|
# You should put it behind a reverse proxy |
||||||
|
paperless_port: 8027 |
||||||
|
# List of IP/CIDR having access to {{ paperless_port }} |
||||||
|
paperless_src_ip: [] |
||||||
|
|
||||||
|
# PostgreSQL database settings |
||||||
|
paperless_db_server: "{{ pg_server | default('localhost') }}" |
||||||
|
paperless_db_port: 5432 |
||||||
|
paperless_db_name: paperless |
||||||
|
paperless_db_user: paperless |
||||||
|
# If the password is not defined, a random one will be generated and stored in {{ papermerge_root_dir }}/meta/ansible_dbpass |
||||||
|
# paperless_db_pass: S3cr3t. |
||||||
|
|
||||||
|
# Redis URL |
||||||
|
paperless_redis_url: redis://localhost:6379 |
||||||
|
|
||||||
|
# Secret key to create session token. If not defined, a random one will be generated and stored in {{ papermerge_root_dir }}/meta/ansible_secret_key |
||||||
|
# paperless_secret_key: SecretKey |
||||||
|
|
||||||
|
# Public URL where paperless will be available |
||||||
|
paperless_public_url: http://{{ inventory_hostname }} |
||||||
|
|
||||||
|
# Language for the OCR process. Should be a 3 letter code for tesseract. |
||||||
|
# You can use several languages like fra+eng (but it will consume more CPU power) |
||||||
|
paperless_ocr_lang: fra |
||||||
|
|
||||||
|
# Password for the initial admin account. If not defined, a random one will be generated and stored in {{ papermerge_root_dir }}/meta/ansible_admin_pass |
||||||
|
# paperless_admin_pass: p@ssW0rd |
@ -0,0 +1,18 @@ |
|||||||
|
module paperless 1.3; |
||||||
|
|
||||||
|
require { |
||||||
|
type gpg_exec_t; |
||||||
|
type ldconfig_exec_t; |
||||||
|
type init_t; |
||||||
|
type ldconfig_t; |
||||||
|
type postgresql_port_t; |
||||||
|
class process2 nnp_transition; |
||||||
|
class file { execute execute_no_trans map open read }; |
||||||
|
class tcp_socket name_connect; |
||||||
|
} |
||||||
|
|
||||||
|
#============= init_t ============== |
||||||
|
allow init_t gpg_exec_t:file { execute execute_no_trans map open read }; |
||||||
|
allow init_t ldconfig_exec_t:file execute_no_trans; |
||||||
|
allow init_t ldconfig_t:process2 nnp_transition; |
||||||
|
allow init_t postgresql_port_t:tcp_socket name_connect; |
@ -0,0 +1,9 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: restart paperless |
||||||
|
service: name={{ item }} state=restarted |
||||||
|
loop: |
||||||
|
- paperless-webserver |
||||||
|
- paperless-scheduler |
||||||
|
- paperless-consumer |
||||||
|
|
@ -0,0 +1,8 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
dependencies: |
||||||
|
- role: mkdir |
||||||
|
- role: postgresql_server |
||||||
|
when: paperless_db_server in ['localhost','127.0.0.1'] |
||||||
|
- role: redis_server |
||||||
|
when: paperless_redis_url | urlsplit('hostname') in ['localhost','127.0.0.1'] |
@ -0,0 +1,10 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Compress previous version |
||||||
|
command: tar cf {{ paperless_root_dir }}/archives/{{ paperless_current_version }}.tar.zst --use-compress-program=zstd ./ |
||||||
|
args: |
||||||
|
chdir: "{{ paperless_root_dir }}/archives/{{ paperless_current_version }}" |
||||||
|
warn: False |
||||||
|
environment: |
||||||
|
ZSTD_CLEVEL: 10 |
||||||
|
tags: ged |
@ -0,0 +1,38 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Create the archive dir |
||||||
|
file: path={{ paperless_root_dir }}/archives/{{ paperless_current_version }} state=directory |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Install postgresql client |
||||||
|
package: |
||||||
|
name: |
||||||
|
- postgresql13 |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Archive previous version |
||||||
|
synchronize: |
||||||
|
src: "{{ paperless_root_dir }}/{{ item }}" |
||||||
|
dest: "{{ paperless_root_dir }}/archives/{{ paperless_current_version }}/" |
||||||
|
recursive: True |
||||||
|
delete: True |
||||||
|
compress: False |
||||||
|
loop: |
||||||
|
- venv |
||||||
|
- app |
||||||
|
delegate_to: "{{ inventory_hostname }}" |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Dump the database |
||||||
|
command: > |
||||||
|
/usr/pgsql-13/bin/pg_dump |
||||||
|
--clean |
||||||
|
--host={{ paperless_db_server | quote }} |
||||||
|
--port={{ paperless_db_port | quote }} |
||||||
|
--username=sqladmin {{ paperless_db_name | quote }} |
||||||
|
--file="{{ paperless_root_dir }}/archives/{{ paperless_current_version }}/{{ paperless_db_name }}.sql" |
||||||
|
environment: |
||||||
|
- PGPASSWORD: "{{ pg_admin_pass }}" |
||||||
|
tags: ged |
||||||
|
|
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Remove tmp and obsolete files |
||||||
|
file: path={{ item }} state=absent |
||||||
|
loop: |
||||||
|
- "{{ paperless_root_dir }}/archives/{{ paperless_current_version }}" |
||||||
|
- "{{ paperless_root_dir }}/tmp/paperless-ng-{{ paperless_version }}.tar.xz" |
||||||
|
- "{{ paperless_root_dir }}/tmp/paperless-ng" |
||||||
|
tags: ged |
@ -0,0 +1,38 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Deploy configuration |
||||||
|
template: src={{ item }}.j2 dest={{ paperless_root_dir }}/app/{{ item }} group={{ paperless_user }} mode=640 |
||||||
|
loop: |
||||||
|
- paperless.conf |
||||||
|
- gunicorn.conf.py |
||||||
|
notify: restart paperless |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- when: paperless_install_mode != 'none' |
||||||
|
block: |
||||||
|
- name: Migrate database |
||||||
|
django_manage: |
||||||
|
command: migrate |
||||||
|
app_path: "{{ paperless_root_dir }}/app/src" |
||||||
|
virtualenv: "{{ paperless_root_dir }}/venv" |
||||||
|
notify: restart paperless |
||||||
|
|
||||||
|
- name: Collect static files |
||||||
|
django_manage: |
||||||
|
command: collectstatic |
||||||
|
app_path: "{{ paperless_root_dir }}/app/src" |
||||||
|
virtualenv: "{{ paperless_root_dir }}/venv" |
||||||
|
|
||||||
|
tags: ged |
||||||
|
|
||||||
|
- when: paperless_install_mode == 'install' |
||||||
|
block: |
||||||
|
- name: Create admin user |
||||||
|
django_manage: |
||||||
|
command: createsuperuser --noinput --username admin --email admin@{{ ansible_domain }} |
||||||
|
app_path: "{{ paperless_root_dir }}/app/src" |
||||||
|
virtualenv: "{{ paperless_root_dir }}/venv" |
||||||
|
environment: |
||||||
|
DJANGO_SUPERUSER_PASSWORD: '{{ paperless_admin_pass }}' |
||||||
|
|
||||||
|
tags: ged |
@ -0,0 +1,31 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Create directories |
||||||
|
file: path={{ paperless_root_dir }}/{{ item.dir }} state=directory owner={{ item.owner | default(omit) }} group={{ item.group | default(omit) }} mode={{ item.mode | default(omit) }} |
||||||
|
loop: |
||||||
|
- dir: / |
||||||
|
owner: "{{ paperless_user }}" |
||||||
|
mode: 700 |
||||||
|
- dir: /meta |
||||||
|
mode: 700 |
||||||
|
- dir: /tmp |
||||||
|
owner: "{{ paperless_user }}" |
||||||
|
mode: 700 |
||||||
|
- dir: archives |
||||||
|
mode: 700 |
||||||
|
- dir: backup |
||||||
|
mode: 700 |
||||||
|
- dir: venv |
||||||
|
- dir: app |
||||||
|
- dir: data |
||||||
|
owner: "{{ paperless_user }}" |
||||||
|
mode: 700 |
||||||
|
- dir: media |
||||||
|
owner: "{{ paperless_user }}" |
||||||
|
- dir: static |
||||||
|
- dir: consume |
||||||
|
owner: "{{ paperless_user }}" |
||||||
|
- dir: log |
||||||
|
owner: "{{ paperless_user }}" |
||||||
|
mode: 700 |
||||||
|
tags: ged |
@ -0,0 +1,49 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- fail: msg="pg_admin_pass must be set" |
||||||
|
when: pg_admin_pass is not defined |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- include_vars: "{{ item }}" |
||||||
|
with_first_found: |
||||||
|
- vars/{{ ansible_distribution }}-{{ ansible_distribution_major_version }}.yml |
||||||
|
- vars/{{ ansible_os_family }}-{{ ansible_distribution_major_version }}.yml |
||||||
|
- vars/{{ ansible_distribution }}.yml |
||||||
|
- vars/{{ ansible_os_family }}.yml |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- block: |
||||||
|
- import_tasks: ../includes/webapps_set_install_mode.yml |
||||||
|
vars: |
||||||
|
- root_dir: "{{ paperless_root_dir }}" |
||||||
|
- version: "{{ paperless_version }}" |
||||||
|
- set_fact: paperless_install_mode={{ (install_mode == 'upgrade' and not paperless_manage_upgrade) | ternary('none',install_mode) }} |
||||||
|
- set_fact: paperless_current_version={{ current_version | default('') }} |
||||||
|
tags: ged |
||||||
|
|
||||||
|
# Create a random pass for the DB if needed |
||||||
|
- when: paperless_db_pass is not defined |
||||||
|
block: |
||||||
|
- import_tasks: ../includes/get_rand_pass.yml |
||||||
|
vars: |
||||||
|
- pass_file: "{{ paperless_root_dir }}/meta/ansible_dbpass" |
||||||
|
- set_fact: paperless_db_pass={{ rand_pass }} |
||||||
|
tags: ged |
||||||
|
|
||||||
|
# Create a random secret key |
||||||
|
- when: paperless_secret_key is not defined |
||||||
|
block: |
||||||
|
- import_tasks: ../includes/get_rand_pass.yml |
||||||
|
vars: |
||||||
|
- pass_file: "{{ paperless_root_dir }}/meta/ansible_secret_key" |
||||||
|
- set_fact: paperless_secret_key={{ rand_pass }} |
||||||
|
tags: ged |
||||||
|
|
||||||
|
# Create a random secret key |
||||||
|
- when: paperless_admin_pass is not defined |
||||||
|
block: |
||||||
|
- import_tasks: ../includes/get_rand_pass.yml |
||||||
|
vars: |
||||||
|
- pass_file: "{{ paperless_root_dir }}/meta/ansible_admin_pass" |
||||||
|
- set_fact: paperless_admin_pass={{ rand_pass }} |
||||||
|
tags: ged |
@ -0,0 +1,97 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Install packages |
||||||
|
package: name={{ paperless_packages }} |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- when: paperless_install_mode != 'none' |
||||||
|
block: |
||||||
|
- name: Download paperless |
||||||
|
get_url: |
||||||
|
url: "{{ paperless_archive_url }}" |
||||||
|
dest: "{{ paperless_root_dir }}/tmp" |
||||||
|
checksum: sha1:{{ paperless_archive_sha1 }} |
||||||
|
|
||||||
|
- name: Extract archive |
||||||
|
unarchive: |
||||||
|
src: "{{ paperless_root_dir }}/tmp/paperless-ng-{{ paperless_version }}.tar.xz" |
||||||
|
dest: "{{ paperless_root_dir }}/tmp" |
||||||
|
remote_src: True |
||||||
|
|
||||||
|
- name: Move paperless app |
||||||
|
synchronize: |
||||||
|
src: "{{ paperless_root_dir }}/tmp/paperless-ng/" |
||||||
|
dest: "{{ paperless_root_dir }}/app/" |
||||||
|
delete: True |
||||||
|
compress: False |
||||||
|
delegate_to: "{{ inventory_hostname }}" |
||||||
|
|
||||||
|
- name: Fix permissions |
||||||
|
file: path={{ paperless_root_dir }}/app/ owner=root group=root recurse=True |
||||||
|
|
||||||
|
- name: Add exec perm on manage.py |
||||||
|
file: path={{ paperless_root_dir }}/app/src/manage.py mode=755 |
||||||
|
|
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Create the virtualenv |
||||||
|
pip: |
||||||
|
requirements: "{{ paperless_root_dir }}/app/requirements.txt" |
||||||
|
state: "{{ (paperless_install_mode == 'upgrade') | ternary('latest', 'present') }}" |
||||||
|
virtualenv: "{{ paperless_root_dir }}/venv" |
||||||
|
virtualenv_command: /bin/python3.9 -m venv |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- block: |
||||||
|
- name: Create the PostgreSQL role |
||||||
|
postgresql_user: |
||||||
|
db: postgres |
||||||
|
name: "{{ paperless_db_user }}" |
||||||
|
password: "{{ paperless_db_pass }}" |
||||||
|
login_host: "{{ paperless_db_server }}" |
||||||
|
login_user: sqladmin |
||||||
|
login_password: "{{ pg_admin_pass }}" |
||||||
|
|
||||||
|
- name: Create the PostgreSQL database |
||||||
|
postgresql_db: |
||||||
|
name: "{{ paperless_db_name }}" |
||||||
|
encoding: UTF-8 |
||||||
|
template: template0 |
||||||
|
owner: "{{ paperless_db_user }}" |
||||||
|
login_host: "{{ paperless_db_server }}" |
||||||
|
login_user: sqladmin |
||||||
|
login_password: "{{ pg_admin_pass }}" |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Install a wrapper for manage.py |
||||||
|
copy: |
||||||
|
content: | |
||||||
|
#!/bin/bash |
||||||
|
cd {{ paperless_root_dir }}/app/src |
||||||
|
{{ paperless_root_dir }}/venv/bin/python ./manage.py $@ |
||||||
|
dest: /usr/local/bin/paperless |
||||||
|
mode: 755 |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Install systemd units |
||||||
|
template: src={{ item }}.service.j2 dest=/etc/systemd/system/{{ item }}.service |
||||||
|
loop: |
||||||
|
- paperless-webserver |
||||||
|
- paperless-scheduler |
||||||
|
- paperless-consumer |
||||||
|
notify: restart paperless |
||||||
|
register: paperless_units |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Reload systemd |
||||||
|
systemd: daemon_reload=True |
||||||
|
when: paperless_units.results | selectattr('changed','equalto',True) | list | length > 0 |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Install backup hooks |
||||||
|
template: src={{ item }}-backup.j2 dest=/etc/backup/{{ item }}.d/paperless mode=700 |
||||||
|
loop: |
||||||
|
- pre |
||||||
|
- post |
||||||
|
tags: ged |
||||||
|
|
@ -0,0 +1,9 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Handle paperless port in the firewall |
||||||
|
iptables_raw: |
||||||
|
name: paperless_port |
||||||
|
state: "{{ (paperless_src_ip | length > 0) | ternary('present','absent') }}" |
||||||
|
rules: "-A INPUT -m state --state NEW -p tcp --dport {{ paperless_port }} -s {{ paperless_src_ip | join(',') }} -j ACCEPT" |
||||||
|
when: iptables_manage | default(True) |
||||||
|
tags: firewall,ged |
@ -0,0 +1,18 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- include: user.yml |
||||||
|
- include: directories.yml |
||||||
|
- include: facts.yml |
||||||
|
- include: archive_pre.yml |
||||||
|
when: paperless_install_mode == 'upgrade' |
||||||
|
- include: install.yml |
||||||
|
- include: conf.yml |
||||||
|
- include: iptables.yml |
||||||
|
when: iptables_manage | default(True) |
||||||
|
- include: selinux.yml |
||||||
|
when: ansible_selinux.status == 'enabled' |
||||||
|
- include: services.yml |
||||||
|
- include: write_version.yml |
||||||
|
- include: archive_post.yml |
||||||
|
when: paperless_install_mode == 'upgrade' |
||||||
|
- include: cleanup.yml |
@ -0,0 +1,15 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Copy SELinux policy |
||||||
|
copy: src=paperless.te dest=/etc/selinux/targeted/local/ |
||||||
|
register: paperless_selinux_policy |
||||||
|
tags: ged |
||||||
|
|
||||||
|
- name: Compile and load SELinux policy |
||||||
|
shell: | |
||||||
|
cd /etc/selinux/targeted/local/ |
||||||
|
checkmodule -M -m -o paperless.mod paperless.te |
||||||
|
semodule_package -o paperless.pp -m paperless.mod |
||||||
|
semodule -i /etc/selinux/targeted/local/paperless.pp |
||||||
|
when: paperless_selinux_policy.changed |
||||||
|
tags: ged |
@ -0,0 +1,9 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Start and enable services |
||||||
|
service: name={{ item }} state=started enabled=True |
||||||
|
loop: |
||||||
|
- paperless-webserver |
||||||
|
- paperless-scheduler |
||||||
|
- paperless-consumer |
||||||
|
tags: ged |
@ -0,0 +1,9 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Create system user |
||||||
|
user: |
||||||
|
name: "{{ paperless_user }}" |
||||||
|
shell: /sbin/nologin |
||||||
|
home: "{{ paperless_root_dir }}" |
||||||
|
system: True |
||||||
|
tags: ged |
@ -0,0 +1,5 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
- name: Write installed version |
||||||
|
copy: content={{ paperless_version }} dest={{ paperless_root_dir }}/meta/ansible_version |
||||||
|
tags: ged |
@ -0,0 +1,36 @@ |
|||||||
|
import os |
||||||
|
|
||||||
|
bind = '0.0.0.0:{{ paperless_port }}' |
||||||
|
workers = int(os.getenv("PAPERLESS_WEBSERVER_WORKERS", 2)) |
||||||
|
worker_class = 'paperless.workers.ConfigurableWorker' |
||||||
|
timeout = 120 |
||||||
|
|
||||||
|
def pre_fork(server, worker): |
||||||
|
pass |
||||||
|
|
||||||
|
def pre_exec(server): |
||||||
|
server.log.info("Forked child, re-executing.") |
||||||
|
|
||||||
|
def when_ready(server): |
||||||
|
server.log.info("Server is ready. Spawning workers") |
||||||
|
|
||||||
|
def worker_int(worker): |
||||||
|
worker.log.info("worker received INT or QUIT signal") |
||||||
|
|
||||||
|
## get traceback info |
||||||
|
import threading, sys, traceback |
||||||
|
id2name = dict([(th.ident, th.name) for th in threading.enumerate()]) |
||||||
|
code = [] |
||||||
|
for threadId, stack in sys._current_frames().items(): |
||||||
|
code.append("\n# Thread: %s(%d)" % (id2name.get(threadId,""), |
||||||
|
threadId)) |
||||||
|
for filename, lineno, name, line in traceback.extract_stack(stack): |
||||||
|
code.append('File: "%s", line %d, in %s' % (filename, |
||||||
|
lineno, name)) |
||||||
|
if line: |
||||||
|
code.append(" %s" % (line.strip())) |
||||||
|
worker.log.debug("\n".join(code)) |
||||||
|
|
||||||
|
def worker_abort(worker): |
||||||
|
worker.log.info("worker received SIGABRT signal") |
||||||
|
|
@ -0,0 +1,22 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Paperless consumer |
||||||
|
After=redis.service postgresql.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
User={{ paperless_user }} |
||||||
|
Group={{ paperless_user }} |
||||||
|
WorkingDirectory={{ paperless_root_dir }}/app/src |
||||||
|
ExecStart={{ paperless_root_dir }}/venv/bin/python3 manage.py document_consumer |
||||||
|
PrivateTmp=yes |
||||||
|
PrivateDevices=yes |
||||||
|
ProtectSystem=full |
||||||
|
ProtectHome=yes |
||||||
|
NoNewPrivileges=yes |
||||||
|
MemoryLimit=200M |
||||||
|
SyslogIdentifier=paperless-scheduler |
||||||
|
Restart=on-failure |
||||||
|
StartLimitInterval=0 |
||||||
|
RestartSec=30 |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
@ -0,0 +1,22 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Paperless scheduler |
||||||
|
After=redis.service postgresql.service |
||||||
|
|
||||||
|
[Service] |
||||||
|
User={{ paperless_user }} |
||||||
|
Group={{ paperless_user }} |
||||||
|
WorkingDirectory={{ paperless_root_dir }}/app/src |
||||||
|
ExecStart={{ paperless_root_dir }}/venv/bin/python3 manage.py qcluster |
||||||
|
PrivateTmp=yes |
||||||
|
PrivateDevices=yes |
||||||
|
ProtectSystem=full |
||||||
|
ProtectHome=yes |
||||||
|
NoNewPrivileges=yes |
||||||
|
MemoryLimit=1024M |
||||||
|
SyslogIdentifier=paperless-scheduler |
||||||
|
Restart=on-failure |
||||||
|
StartLimitInterval=0 |
||||||
|
RestartSec=30 |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
@ -0,0 +1,24 @@ |
|||||||
|
[Unit] |
||||||
|
Description=Paperless webserver |
||||||
|
After=network.target |
||||||
|
After=redis.service |
||||||
|
Wants=network.target |
||||||
|
|
||||||
|
[Service] |
||||||
|
User={{ paperless_user }} |
||||||
|
Group={{ paperless_user }} |
||||||
|
WorkingDirectory={{ paperless_root_dir }}/app/src |
||||||
|
ExecStart={{ paperless_root_dir }}/venv/bin/gunicorn -c {{ paperless_root_dir }}/app/gunicorn.conf.py paperless.asgi:application |
||||||
|
PrivateTmp=yes |
||||||
|
PrivateDevices=yes |
||||||
|
ProtectSystem=full |
||||||
|
ProtectHome=yes |
||||||
|
NoNewPrivileges=yes |
||||||
|
MemoryLimit=1024M |
||||||
|
SyslogIdentifier=paperless-webserver |
||||||
|
Restart=on-failure |
||||||
|
StartLimitInterval=0 |
||||||
|
RestartSec=30 |
||||||
|
|
||||||
|
[Install] |
||||||
|
WantedBy=multi-user.target |
@ -0,0 +1,26 @@ |
|||||||
|
PAPERLESS_REDIS={{ paperless_redis_url }} |
||||||
|
PAPERLESS_DBHOST={{ paperless_db_server }} |
||||||
|
PAPERLESS_DBPORT={{ paperless_db_port }} |
||||||
|
PAPERLESS_DBNAME={{ paperless_db_name }} |
||||||
|
PAPERLESS_DBUSER={{ paperless_db_user }} |
||||||
|
PAPERLESS_DBPASS={{ paperless_db_pass }} |
||||||
|
PAPERLESS_CONSUMPTION_DIR={{ paperless_consume_dir }} |
||||||
|
PAPERLESS_DATA_DIR={{ paperless_root_dir }}/data |
||||||
|
PAPERLESS_MEDIA_ROOT={{ paperless_root_dir }}/media |
||||||
|
PAPERLESS_STATICDIR={{ paperless_root_dir }}/static |
||||||
|
PAPERLESS_FILENAME_FORMAT={created_year}/{created_month}/{title} |
||||||
|
PAPERLESS_LOGGING_DIR={{ paperless_root_dir }}/log |
||||||
|
PAPERLESS_SECRET_KEY={{ paperless_secret_key }} |
||||||
|
PAPERLESS_ALLOWED_HOSTS={{ paperless_public_url | urlsplit('hostname') }} |
||||||
|
PAPERLESS_CORS_ALLOWED_HOSTS={{ paperless_public_url }} |
||||||
|
PAPERLESS_FORCE_SCRIPT_NAME={{ paperless_public_url | urlsplit('path') | regex_replace('/$','') }} |
||||||
|
PAPERLESS_STATIC_URL={{ paperless_public_url | urlsplit('path') | regex_replace('/$','') }}/static/ |
||||||
|
PAPERLESS_OCR_LANGUAGE={{ paperless_ocr_lang }} |
||||||
|
PAPERLESS_TASK_WORKERS=2 |
||||||
|
{% if system_tz is defined %} |
||||||
|
PAPERLESS_TIME_ZONE={{ system_tz }} |
||||||
|
{% endif %} |
||||||
|
PAPERLESS_CONSUMER_DELETE_DUPLICATES=True |
||||||
|
PAPERLESS_CONSUMER_RECURSIVE=True |
||||||
|
PAPERLESS_CONSUMER_SUBDIRS_AS_TAGS=True |
||||||
|
PAPERLESS_CONVERT_TMPDIR={{ paperless_root_dir }}/tmp |
@ -0,0 +1,3 @@ |
|||||||
|
#!/bin/bash -e |
||||||
|
|
||||||
|
rm -f {{ paperless_root_dir }}/backup/* |
@ -0,0 +1,9 @@ |
|||||||
|
#!/bin/bash -e |
||||||
|
|
||||||
|
PGPASSWORD='{{ paperless_db_pass }}' /usr/pgsql-13/bin/pg_dump \ |
||||||
|
--clean \ |
||||||
|
--username={{ paperless_db_user | quote }} \ |
||||||
|
--host={{ paperless_db_server | quote }} \ |
||||||
|
--port={{ paperless_db_port }} \ |
||||||
|
{{ paperless_db_name | quote }} | \ |
||||||
|
zstd -c > {{ paperless_root_dir }}/backup/{{ paperless_db_name | quote }}.sql.zst |
@ -0,0 +1,20 @@ |
|||||||
|
--- |
||||||
|
|
||||||
|
paperless_packages: |
||||||
|
- python39-pip |
||||||
|
- python39-setuptools |
||||||
|
- python39-devel |
||||||
|
- make |
||||||
|
- gcc |
||||||
|
- gcc-c++ |
||||||
|
- ImageMagick |
||||||
|
- liberation-fonts |
||||||
|
- optipng |
||||||
|
- libpq-devel |
||||||
|
- file-libs |
||||||
|
- tesseract |
||||||
|
- tesseract-langpack-fra |
||||||
|
- tesseract-langpack-deu |
||||||
|
- tesseract-langpack-spa |
||||||
|
- tesseract-langpack-ita |
||||||
|
- policycoreutils |
Loading…
Reference in new issue