.env.example 4.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596
  1. # Database
  2. DATABASE_URL="postgresql://torqvoice:torqvoice@db:5432/torqvoice"
  3. # Docker only (docker-compose.yml): the password of the `db` service, put into
  4. # the app's DATABASE_URL there as it is, so letters and digits only
  5. # (`openssl rand -hex 24`); a `/`, `@`, `#` or `%` breaks the URL. Set it
  6. # before the first start; unset, it is `torqvoice`, and the port is bound to
  7. # 127.0.0.1 so nothing outside the host can try it.
  8. # POSTGRES_PASSWORD=""
  9. # Authentication (generate with: openssl rand -hex 32)
  10. BETTER_AUTH_SECRET="your-secret-here"
  11. # App URL (used by both the app and Better Auth)
  12. NEXT_PUBLIC_APP_URL="http://localhost:3000"
  13. # Where uploaded files and the app's other data live. Unset, it is `data`
  14. # beside the app, which is where everything has always been written; set it to
  15. # put uploads on a disk with room on them. Files already written to the old
  16. # place keep being found, so this can be turned on at any time.
  17. #
  18. # In Docker, move the volume with it: the compose file mounts
  19. # `/app/data/uploads`, and a DATA_ROOT pointing anywhere else would write into
  20. # the container instead, where a redeploy loses it.
  21. # DATA_ROOT="/var/lib/torqvoice"
  22. # Scheduled backups (Settings → Integrations). Both are optional.
  23. # The Docker image ships restic at /usr/local/bin/restic. An install that runs
  24. # outside Docker points this at its own restic binary; unset, `restic` is
  25. # looked up on the PATH.
  26. # RESTIC_BIN="/usr/local/bin/restic"
  27. # Where the Local folder destination keeps its repositories, for self-hosted
  28. # installs only. Unset, it is `backups` under DATA_ROOT, which the compose file
  29. # mounts as a volume of its own. A folder on another disk is a better place.
  30. # BACKUP_LOCAL_ROOT="/mnt/backup-disk/torqvoice"
  31. # The largest backup data file a restore or the restore point explorer reads
  32. # into memory, in MiB; 128 unless set. Parsed, a file takes three to five times
  33. # its size in heap, so raise this only on a server with the memory for it. A
  34. # backup whose data file is over the limit still runs, and says so in its log.
  35. # BACKUP_MAX_DATA_FILE_MB=128
  36. # Set to true only when Cloudflare proxies every request AND the origin
  37. # refuses traffic that did not come through it (Cloudflare IP ranges allowed
  38. # at the firewall or in nginx).
  39. #
  40. # Behind Cloudflare this is required, not optional: the proxy sets X-Real-IP
  41. # from the connection it sees, which is a Cloudflare edge address shared by
  42. # thousands of visitors, so leaving this off collapses everyone into a handful
  43. # of rate-limit buckets and real users start getting 429s.
  44. #
  45. # Without the origin lock it is worse than useless, because cf-connecting-ip is
  46. # then just a header anyone reaching the box directly can write for themselves.
  47. TRUST_CF_CONNECTING_IP=false
  48. # Integrations (Settings → Integrations)
  49. # Key that seals third-party tokens at rest (generate with: openssl rand -hex 32).
  50. # Without it the key is derived from BETTER_AUTH_SECRET, with a warning at startup.
  51. INTEGRATIONS_ENCRYPTION_KEY=""
  52. # OAuth apps the platform registers with each provider. Leave empty on a
  53. # self-hosted install to have each workshop enter its own app credentials.
  54. GOOGLE_INTEGRATION_CLIENT_ID=""
  55. GOOGLE_INTEGRATION_CLIENT_SECRET=""
  56. MICROSOFT_INTEGRATION_CLIENT_ID=""
  57. MICROSOFT_INTEGRATION_CLIENT_SECRET=""
  58. ZOOM_INTEGRATION_CLIENT_ID=""
  59. ZOOM_INTEGRATION_CLIENT_SECRET=""
  60. # Intuit development keys reach sandbox companies, production keys live ones;
  61. # the connector works out which it was given.
  62. QUICKBOOKS_INTEGRATION_CLIENT_ID=""
  63. QUICKBOOKS_INTEGRATION_CLIENT_SECRET=""
  64. # The app registered in Fiken under Rediger konto, API. While it is in
  65. # development only the Fiken users listed on the app can connect.
  66. FIKEN_INTEGRATION_CLIENT_ID=""
  67. FIKEN_INTEGRATION_CLIENT_SECRET=""
  68. # One Open Labor Project key for every workshop on this install. Unset, each
  69. # workshop pastes its own key when it connects the labor guide. Set, a
  70. # workshop that leaves its key empty uses this one, lookups made with it are
  71. # shared between workshops, and each workshop gets the daily number of
  72. # lookups below (40 unless set).
  73. # OPEN_LABOR_PROJECT_API_KEY=""
  74. # REPAIR_DATA_SERVER_KEY_DAILY_LOOKUPS=40
  75. # Torqvoice Codes, the fault code service Torqvoice runs (cloud only: a
  76. # self-hosted install shows the card greyed out and cannot connect it).
  77. # Where the service answers, never typed by a workshop; in the dev
  78. # containers it is http://torqvoice-codes:8090 (http://localhost:8090 from
  79. # the host).
  80. # TORQVOICE_CODES_URL="http://torqvoice-codes:8090"
  81. # A key for every workshop, with read:codes, read:fixes and write:fixes
  82. # (sharing fixes needs the last two). Set, every workshop is connected with
  83. # it on its first page load, sees no key field, and stays disconnected if it
  84. # disconnects. Unset, the connect page asks for a key.
  85. # TORQVOICE_CODES_API_TOKEN=""
  86. # Development only: cloud-only connectors to show on a self-hosted dev
  87. # machine without putting the app in cloud mode. Ignored by any production
  88. # build (it needs `next dev`).
  89. # TORQVOICE_DEV_CLOUD_CONNECTORS="torqvoice-codes"