{"id":18747881,"url":"https://github.com/drosocode/paperless-launcher","last_synced_at":"2025-09-15T02:13:05.161Z","repository":{"id":114486410,"uuid":"471171466","full_name":"drosoCode/paperless-launcher","owner":"drosoCode","description":null,"archived":false,"fork":false,"pushed_at":"2022-03-18T20:44:57.000Z","size":10,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-05-20T09:08:17.277Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/drosoCode.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-03-17T23:15:11.000Z","updated_at":"2022-03-17T23:23:11.000Z","dependencies_parsed_at":"2023-05-16T23:15:07.590Z","dependency_job_id":null,"html_url":"https://github.com/drosoCode/paperless-launcher","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/drosoCode/paperless-launcher","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drosoCode%2Fpaperless-launcher","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drosoCode%2Fpaperless-launcher/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drosoCode%2Fpaperless-launcher/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drosoCode%2Fpaperless-launcher/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/drosoCode","download_url":"https://codeload.github.com/drosoCode/paperless-launcher/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/drosoCode%2Fpaperless-launcher/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":275194018,"owners_count":25421441,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-09-15T02:00:09.272Z","response_time":75,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-11-07T16:31:48.921Z","updated_at":"2025-09-15T02:13:05.133Z","avatar_url":"https://github.com/drosoCode.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Paperless-launcher\r\n\r\nA docker container used to mount/unmount an encypted [veracrypt](https://www.veracrypt.fr/en/Home.html) volume and start [paperless](https://github.com/paperless-ngx/paperless-ngx) on demand.\r\n\r\n## Usage\r\n\r\nEdit the volume line in the `docker-compose.yml` file to map your folder with your veracrypt volumes, and the traefik-related settings.\r\nThen run `docker-compose up -d` to start the container.\r\n\r\n|CLI flag|Env var|Default|Description|\r\n|-----|---|-------|-----------|\r\n|serve|PLL_SERVE|0.0.0.0:3000|the bind address of the server|\r\n|user-header|PLL_USER_HEADER|Remote-User|the header used to authenticate the user|\r\n|email-header|PLL_EMAIL_HEADER|Remote-Email|the header that contains the user's email address|\r\n|registration|PLL_REGISTRATION|false|Enable auto creation of volumes for new users|\r\n|size|PLL_SIZE|2G|The default size of a veracrypt volume for the auto creation|\r\n|mount-path|PLL_MOUNT_PATH|/app/mount/%user%|the path where the veracrypt volume will be mounted, `%user%` will be repaced by the username\r\n|volume-path|PLL_VOLUME_PATH|/data/%user%.hc|the path to the veracrypt volume for a specific user, this can be overwritten in the `mappings.json` file with `\"youruser\": \"yourpath\"`|\r\n|mapping|PLL_MAPPING|mapping.json|Path to the user to path mapping file|\r\n|timeout|PLL_TIMEOUT|1|Inactivity timeout before unmounting the volume (in minutes)|\r\n|startPort|PLL_START_PORT|10000|First port to be used to bind the paperless container|\r\n|redis-image|PLL_REDIS_IMAGE|redis:latest|the redis docker image to use|\r\n|paperless-image|PLL_PAPERLESS_IMAGE|ghcr.io/paperless-ngx/paperless-ngx:latest|the paperless docker image to use|\r\n\r\n## How it works\r\n\r\nThis is a simple container running dind (docker-in-docker) with veracrypt.\r\n\r\nEach user have his own veracrypt volume that stores his documents and the paperless database (sqlite).\r\n\r\nWhen the user wants to login, the request is handled by the forward-auth of the reverse-proxy (here, [authelia](https://github.com/authelia/authelia)) that adds a `Remote-User` header which is used to authenticate the user.\r\n\r\nThen this application will ask the user for the password of the veracrypt volume to decrypt it, if it is not mounted and will mount the volume, start a paperless container and redirect the user to his paperless instance.\r\n\r\nWhen the user have finished, he can click on logout or wait for the inactivity timeout, after this, the application will stop the paperless container and unmount the volume.\r\n\r\nNote that this is not a 100% secure since the files remains unencrypted when you are accessing paperless, but one you are finished, the volume is unmounted, and the files cannot be accessed without the volume password. It is of course strongly recommanded to use https to connect to this application, as the volume password could be intercepted if only using http.\r\n\r\n\r\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrosocode%2Fpaperless-launcher","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdrosocode%2Fpaperless-launcher","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdrosocode%2Fpaperless-launcher/lists"}