defaults = { 'apt': { 'packages': { # for paperless itself 'fonts-liberation': {}, 'gnupg': {}, 'imagemagick': {}, 'libmagic-dev': {}, 'default-libmysqlclient-dev': {}, 'libpq-dev': {}, 'mariadb-client': {}, 'mime-support': {}, 'optipng': {}, 'poppler-utils': {}, 'python3-wheel': {}, # for OCRmyPDF 'ghostscript': {}, 'icc-profiles-free': {}, 'liblept5': {}, 'libxml2': {}, 'pngquant': {}, 'qpdf': {}, 'tesseract-ocr': {}, 'tesseract-ocr-deu': {}, 'tesseract-ocr-eng': {}, 'unpaper': {}, 'zlib1g': {}, }, }, 'backups': { 'paths': { '/mnt/paperless', }, }, 'nodejs': { 'version': 22, }, 'postgresql': { 'roles': { 'paperless': { 'password': repo.vault.password_for(f'{node.name} postgresql paperless'), }, }, 'databases': { 'paperless': { 'owner': 'paperless', }, }, }, } @metadata_reactor.provides( 'apt/packages', ) def paperless_tesseract_languages(metadata): packages = {} for lang in metadata.get('paperless/ocr_languages', {'deu', 'eng'}): packages[f'tesseract-ocr-{lang}'] = {} return { 'apt': { 'packages': packages, }, } @metadata_reactor.provides( 'icinga2_api/paperless/services', ) def icinga_check_for_new_release(metadata): return { 'icinga2_api': { 'paperless': { 'services': { 'PAPERLESS UPDATE': { 'command_on_monitored_host': '/usr/local/share/icinga/plugins/check_github_for_new_release paperless-ngx/paperless-ngx {}'.format(metadata.get('paperless/version')), 'vars.notification.mail': True, 'check_interval': '60m', }, }, }, }, } @metadata_reactor.provides( 'nginx/vhosts/paperless', ) def nginx(metadata): if not node.has_bundle('nginx'): raise DoNotRunAgain return { 'nginx': { 'vhosts': { 'paperless': { 'domain': metadata.get('paperless/domain'), 'locations': { '/': { 'target': 'http://127.0.0.1:22070', 'websockets': True, 'proxy_set_header': { 'X-Forwarded-Host': '$server_name', }, }, '/static/': { 'alias': '/opt/paperless/src/paperless-ngx/static/', }, }, 'max_body_size': '100M', 'website_check_path': '/accounts/login/', 'website_check_string': 'Paperless-ngx', }, }, }, }