diff --git a/site.yml b/site.yml index 2debb6fa8102508ed92730f40f402d886d8b112e..8f05a79dcef5b7b86d0cf42237bf7d8410e7d65e 100644 --- a/site.yml +++ b/site.yml @@ -82,6 +82,12 @@ basedir: "/srv/{{ servicename }}", domain: "verwaltung.test-warpzone.de" } + - { + role: testserver/docker_paperless, tags: [ test_paperless, docker_services ], + servicename: "paperless", + basedir: "/srv/{{ servicename }}", + domain: "docs.test-warpzone.de" + } - { role: testserver/docker_tandoor, tags: [ test_tandoor, docker_services ], servicename: "tandoor", diff --git a/testserver/docker_paperless/tasks/main.yml b/testserver/docker_paperless/tasks/main.yml new file mode 100644 index 0000000000000000000000000000000000000000..c45ac0658c53d1193f7ff19fd9a62606311d7dc0 --- /dev/null +++ b/testserver/docker_paperless/tasks/main.yml @@ -0,0 +1,50 @@ +--- +- include_tasks: ../functions/get_secret.yml + with_items: + - { path: "{{ basedir }}/postgres_user_pass", type: create, length: 12 } + - { path: "{{ basedir }}/paperless_admin_pass", type: create, length: 24 } + - { path: "{{ basedir }}/paperless_secret_key", type: create, length: 24 } + - { path: "{{ basedir }}/openid_client_secret", type: create, length: 64 } + + +- name: Setup OAuth Client Info + ansible.builtin.debug: + msg: "Client ID: {{ servicename }} // Client Secret: {{ openid_client_secret }} // Redirect-URI: https://{{ domain }}/accounts/oidc/uffd/login/callback/" + + +- name: "create folder struct for {{ servicename }}" + file: + path: "{{ item }}" + state: "directory" + with_items: + - "{{ basedir }}/db" + - "{{ basedir }}/data" + - "{{ basedir }}/media" + - "{{ basedir }}/consume" + - "{{ basedir }}/export" + + +# Copy config files +- name: deploy {{ servicename }} config + template: + dest: "{{ basedir }}/{{ item }}" + src: "{{ item }}" + mode: 0644 + with_items: + - docker-compose.yml + register: config + + +# Start containers +- name: "stop {{ servicename }} docker" + community.docker.docker_compose_v2: + project_src: "{{ basedir }}" + state: absent + when: config.changed + + +- name: "start {{ servicename }} docker" + community.docker.docker_compose_v2: + project_src: "{{ basedir }}" + state: present + diff --git a/testserver/docker_paperless/templates/docker-compose.yml b/testserver/docker_paperless/templates/docker-compose.yml new file mode 100644 index 0000000000000000000000000000000000000000..162ba5317aa31984d0f70353d872ce7ab830ec4b --- /dev/null +++ b/testserver/docker_paperless/templates/docker-compose.yml @@ -0,0 +1,86 @@ + + +services: + + broker: + image: redis:7-alpine + restart: always + networks: + - default + + + db: + image: postgres:13 + restart: always + volumes: + - "{{ basedir }}/db:/var/lib/postgresql/data" + environment: + POSTGRES_DB: paperless + POSTGRES_USER: paperless + POSTGRES_PASSWORD: {{ postgres_user_pass }} + networks: + - default + + + app: + image: ghcr.io/paperless-ngx/paperless-ngx:latest + restart: always + depends_on: + - db + - broker + volumes: + - "{{ basedir }}/data:/usr/src/paperless/data" + - "{{ basedir }}/media:/usr/src/paperless/media:z" + - "{{ basedir }}/consume:/usr/src/paperless/consume" + - "{{ basedir }}/export:/usr/src/paperless/export" + environment: + USERMAP_UID: 1000 + USERMAP_GID: 1000 + PAPERLESS_DEBUG: 0 + PAPERLESS_REDIS: redis://broker:6379 + PAPERLESS_DBENGINE: postgress + PAPERLESS_DBHOST: db + PAPERLESS_DBNAME: paperless + PAPERLESS_DBUSER: paperless + PAPERLESS_DBPASS: {{ postgres_user_pass }} + PAPERLESS_URL: "https://{{ domain }}" + PAPERLESS_OCR_MODE: skip + PAPERLESS_OCR_OUTPUT_TYPE: pdfa + PAPERLESS_OCR_LANGUAGES: deu eng + PAPERLESS_OCR_LANGUAGE: deu + PAPERLESS_OCR_SKIP_ARCHIVE_FILE: with_text + PAPERLESS_TIME_ZONE: Europe/Berlin + PAPERLESS_SECRET_KEY: {{ paperless_secret_key }} + PAPERLESS_TASK_WORKERS: 2 + PAPERLESS_OPTIMIZE_THUMBNAILS: 1 + PAPERLESS_FILENAME_FORMAT: "{correspondent}/{created_year}/{created_year}-{created_month}-{created_day}_{correspondent}_{document_type}_{title}" + PAPERLESS_ADMIN_USER: paperlessadmin + PAPERLESS_ADMIN_PASSWORD: {{ paperless_admin_pass }} + PAPERLESS_APPS: "allauth.socialaccount.providers.openid_connect" + PAPERLESS_SOCIALACCOUNT_PROVIDERS: '{"openid_connect": {"APPS": [{"provider_id": "uffd","name": "uffd","client_id": "{{ servicename }}","secret": "{{ openid_client_secret }}","settings": { "server_url": "{{ oidc_global.provider_url }}/.well-known/openid-configuration"}}]}}' + PAPERLESS_SOCIAL_AUTO_SIGNUP: True + PAPERLESS_SOCIAL_AUTO_SIGNUPS: True + PAPERLESS_ACCOUNT_ALLOW_SIGNUPS: False + PAPERLESS_ACCOUNT_DEFAULT_HTTP_PROTOCOL: https + PAPERLESS_ACCOUNT_EMAIL_VERIFICATION: optional + PAPERLESS_DISABLE_REGULAR_LOGIN: True + PAPERLESS_REDIRECT_LOGIN_TO_SSO: True + healthcheck: + test: ["CMD", "curl", "-f", "http://localhost:8000"] + interval: 30s + timeout: 10s + retries: 5 + labels: + - traefik.enable=true + - traefik.http.routers.{{ servicename }}.rule=Host(`{{ domain }}`) + - traefik.http.routers.{{ servicename }}.entrypoints=websecure + - traefik.http.services.{{ servicename }}.loadbalancer.server.port=8000 + - traefik.http.middlewares.limit.buffering.maxRequestBodyBytes=5368709120 + networks: + - default + - web + + +networks: + web: + external: true