Selfhost
Environment Variables
If you selfhost, please make sure to create your own oAuth app and report the credentials in the dashboard or directly fill these env vars in your .env here!
Backend
Secrets
Variable | Example | Purpose |
---|---|---|
JWT_SECRET | secret_jwt | Jwt token used to authenticate requests coming from the webapp to the server |
ENCRYPT_CRYPTO_SECRET_KEY | 0123456789abcdef0123456789abcdef | 256-Bit Encryption key used to encrypt sensitive data |
Configuration
Variable | Example | Purpose |
---|---|---|
ENV | dev | Values are dev, prod or sandbox |
DISTRIBUTION | selfhost | Values are selfhost or managed |
PANORA_BASE_API_URL | http://localhost:3000 | |
REDIS_HOST | redis | The redis host |
REDIS_PASS | A3vniod98Zbuvn9u5 | The redis password |
REDIS_PORT | 6379 | The redis port |
EMAIL_SENDING_ADDRESS | ||
SMTP_HOST | ||
SMTP_PORT | ||
SMTP_USER | ||
SMTP_PASSWORD |
Errors & Analytics (Optional in Selfhost)
Variable | Example | Purpose |
---|---|---|
SENTRY_DSN | Sentry Dsn | |
SENTRY_ENABLED | Flag which indicates if you want to enable Sentry | |
POSTHOG_HOST | ||
POSTHOG_KEY | ||
PH_TELEMETRY |
Database
Variable | Example | Purpose |
---|---|---|
POSTGRES_USER | my_user | username to get access access to the db |
POSTGRES_DB | panora_db | database name to get access access to the db |
POSTGRES_HOST | postgres | host to get access access to the db |
POSTGRES_PASSWORD | my_password | password to get access access to the db |
Ingress
Check here to set up Ngrok !
Variable | Example | Purpose |
---|---|---|
REDIRECT_TUNNEL_INGRESS | https://MY-NGROK-DOMAIN.ngrok-free.app | Mandatory only when DISTRIBUTION=selfhost. Endpoint (an Ngrok tunnel domain) when you have to test your OAuth App and needs a HTTPS redirectUri that redirects to your localhost (useful for contributors that might need to test their oAuth flow) |
WEBHOOK_INGRESS | https://MY-NGROK-DOMAIN.ngrok-free.app | If you plan to use the Backend SDK to receive data, if your receiving server is running locally you must use a Ngrok redirect as well. (our main API is runnning within docker and doesnt have localhost context so requests must be https). Alternatively, you can just input it using the dashboard. |
Providers Specific Credentials
You must manually create a custom OAuth2 App inside the 3rd party and copy the critical values (likely client id and client secret)
You have the option to manage a custom 3rd party OAuth App.
Each custom 3rd party environment variable must be of the form PROVIDER_category_SOFTWAREMODE_ATTRIBUTE
where
PROVIDER
is any 3rd party namecategory
is for example [CRM, TICKETING, MARKETINGAUTOMATION, …]SOFTWAREMODE
is [ CLOUD, ONPREMISE ]ATTRIBUTE
is for example [ CLIENT_ID, CLIENT_SECRET, SUBDOMAIN, … ]
Example :
HUBSPOT_CRM_CLOUD_CLIENT_ID = client_id_value_pasted_from_hubspot_developer_app
HUBSPOT_CRM_CLOUD_CLIENT_SECRET = client_secret_value_pasted_from_hubspot_developer_app
Variable | Example | Purpose |
---|---|---|
HUBSPOT_CRM_CLOUD_CLIENT_ID | ||
HUBSPOT_CRM_CLOUD_CLIENT_SECRET | ||
ZOHO_CRM_CLOUD_CLIENT_ID | ||
ZOHO_CRM_CLOUD_CLIENT_SECRET | ||
PIPEDRIVE_CRM_CLOUD_CLIENT_ID | ||
PIPEDRIVE_CRM_CLOUD_CLIENT_SECRET | ||
ZENDESK_CRM_CLOUD_CLIENT_ID | ||
ZENDESK_CRM_CLOUD_CLIENT_SECRET | ||
ATTIO_CRM_CLOUD_CLIENT_ID | ||
ATTIO_CRM_CLOUD_CLIENT_SECRET | ||
CLOSE_CRM_CLOUD_CLIENT_ID | ||
CLOSE_CRM_CLOUD_CLIENT_SECRET | ||
CAPSULE_CRM_CLOUD_CLIENT_ID | ||
CAPSULE_CRM_CLOUD_CLIENT_SECRET | ||
TEAMLEADER_CRM_CLOUD_CLIENT_ID | ||
TEAMLEADER_CRM_CLOUD_CLIENT_SECRET | ||
ZENDESK_TICKETING_CLOUD_CLIENT_ID | ||
ZENDESK_TICKETING_CLOUD_CLIENT_SECRET | ||
ZENDESK_TICKETING_CLOUD_SUBDOMAIN | ||
JIRA_TICKETING_CLOUD_CLIENT_ID | ||
JIRA_TICKETING_CLOUD_CLIENT_SECRET | ||
FRONT_TICKETING_CLOUD_CLIENT_ID | ||
FRONT_TICKETING_CLOUD_CLIENT_SECRET | ||
GORGIAS_TICKETING_CLOUD_CLIENT_ID | ||
GORGIAS_TICKETING_CLOUD_CLIENT_SECRET | ||
LINEAR_TICKETING_CLOUD_CLIENT_ID | ||
LINEAR_TICKETING_CLOUD_CLIENT_SECRET | ||
CLICKUP_TICKETING_CLOUD_CLIENT_ID | ||
CLICKUP_TICKETING_CLOUD_CLIENT_SECRET | ||
ASANA_TICKETING_CLOUD_CLIENT_ID | ||
ASANA_TICKETING_CLOUD_CLIENT_SECRET | ||
AHA_TICKETING_CLOUD_CLIENT_ID | ||
AHA_TICKETING_CLOUD_CLIENT_SECRET | ||
AHA_TICKETING_CLOUD_SUBDOMAIN | ||
HELPSCOUT_TICKETING_CLOUD_CLIENT_ID | ||
HELPSCOUT_TICKETING_CLOUD_CLIENT_SECRET | ||
IRONCLAD_TICKETING_CLOUD_CLIENT_ID | ||
IRONCLAD_TICKETING_CLOUD_CLIENT_SECRET | ||
GITHUB_TICKETING_CLOUD_CLIENT_ID | ||
GITHUB_TICKETING_CLOUD_CLIENT_SECRET | ||
WRIKE_TICKETING_CLOUD_CLIENT_ID | ||
WRIKE_TICKETING_CLOUD_CLIENT_SECRET | ||
GITLAB_TICKETING_CLOUD_CLIENT_ID | ||
GITLAB_TICKETING_CLOUD_CLIENT_SECRET | ||
SAGE_ACCOUNTING_CLOUD_CLIENT_ID | ||
SAGE_ACCOUNTING_CLOUD_CLIENT_SECRET | ||
PENNYLANE_ACCOUNTING_CLOUD_CLIENT_ID | ||
PENNYLANE_ACCOUNTING_CLOUD_CLIENT_SECRET | ||
FREEAGENT_ACCOUNTING_CLOUD_CLIENT_ID | ||
FREEAGENT_ACCOUNTING_CLOUD_CLIENT_SECRET | ||
FRESHBOOKS_ACCOUNTING_CLOUD_CLIENT_ID | ||
FRESHBOOKS_ACCOUNTING_CLOUD_CLIENT_SECRET | ||
MONEYBIRD_ACCOUNTING_CLOUD_CLIENT_ID | ||
MONEYBIRD_ACCOUNTING_CLOUD_CLIENT_SECRET | ||
QUICKBOOKS_ACCOUNTING_CLOUD_CLIENT_ID | ||
QUICKBOOKS_ACCOUNTING_CLOUD_CLIENT_SECRET | ||
XERO_ACCOUNTING_CLOUD_CLIENT_ID | ||
XERO_ACCOUNTING_CLOUD_CLIENT_SECRET | ||
DEEL_HRIS_CLOUD_CLIENT_ID | ||
DEEL_HRIS_CLOUD_CLIENT_SECRET | ||
RIPPLING_HRIS_CLOUD_CLIENT_ID | ||
RIPPLING_HRIS_CLOUD_CLIENT_SECRET | ||
GUSTO_HRIS_CLOUD_CLIENT_ID | ||
GUSTO_HRIS_CLOUD_CLIENT_SECRET | ||
FACTORIAL_HRIS_CLOUD_CLIENT_ID | ||
FACTORIAL_HRIS_CLOUD_CLIENT_SECRET | ||
NAMELY_HRIS_CLOUD_CLIENT_ID | ||
NAMELY_HRIS_CLOUD_CLIENT_SECRET | ||
NAMELY_HRIS_CLOUD_SUBDOMAIN | ||
GOOGLEDRIVE_FILESTORAGE_CLOUD_CLIENT_ID | ||
GOOGLEDRIVE_FILESTORAGE_CLOUD_CLIENT_SECRET | ||
ONEDRIVE_FILESTORAGE_CLOUD_CLIENT_ID | ||
ONEDRIVE_FILESTORAGE_CLOUD_CLIENT_SECRET | ||
SHAREPOINT_FILESTORAGE_CLOUD_CLIENT_ID | ||
SHAREPOINT_FILESTORAGE_CLOUD_CLIENT_SECRET | ||
DROPBOX_FILESTORAGE_CLOUD_CLIENT_ID | ||
DROPBOX_FILESTORAGE_CLOUD_CLIENT_SECRET | ||
BOX_FILESTORAGE_CLOUD_CLIENT_ID | ||
BOX_FILESTORAGE_CLOUD_CLIENT_SECRET | ||
KEAP_MARKETINGAUTOMATION_CLOUD_CLIENT_ID | ||
KEAP_MARKETINGAUTOMATION_CLOUD_CLIENT_SECRET | ||
MAILCHIMP_MARKETINGAUTOMATION_CLOUD_CLIENT_ID | ||
MAILCHIMP_MARKETINGAUTOMATION_CLOUD_CLIENT_SECRET | ||
KLAVIYO_TICKETING_CLOUD_CLIENT_ID | ||
KLAVIYO_TICKETING_CLOUD_CLIENT_SECRET | ||
NOTION_PRODUCTIVITY_CLOUD_CLIENT_ID | ||
NOTION_PRODUCTIVITY_CLOUD_CLIENT_SECRET | ||
SLACK_PRODUCTIVITY_CLOUD_CLIENT_ID | ||
SLACK_PRODUCTIVITY_CLOUD_CLIENT_SECRET | ||
GREENHOUSE_ATS_CLOUD_CLIENT_ID | ||
GREENHOUSE_ATS_CLOUD_CLIENT_SECRET | ||
JOBADDER_ATS_CLOUD_CLIENT_ID | ||
JOBADDER_ATS_CLOUD_CLIENT_SECRET | ||
LEVER_ATS_CLOUD_CLIENT_ID | ||
LEVER_ATS_CLOUD_CLIENT_SECRET | ||
SHOPIFY_ECOMMERCE_CLOUD_CLIENT_ID | ||
SHOPIFY_ECOMMERCE_CLOUD_CLIENT_SECRET | ||
SHOPIFY_ECOMMERCE_CLOUD_SUBDOMAIN | ||
SQUARESPACE_ECOMMERCE_CLOUD_CLIENT_ID | ||
SQUARESPACE_ECOMMERCE_CLOUD_CLIENT_SECRET | ||
EBAY_ECOMMERCE_CLOUD_CLIENT_ID | ||
EBAY_ECOMMERCE_CLOUD_CLIENT_SECRET | ||
EBAY_ECOMMERCE_CLOUD_RUVALUE | ||
FAIRE_ECOMMERCE_CLOUD_CLIENT_ID | ||
FAIRE_ECOMMERCE_CLOUD_CLIENT_SECRET | ||
WEBFLOW_ECOMMERCE_CLOUD_CLIENT_ID | ||
WEBFLOW_ECOMMERCE_CLOUD_CLIENT_SECRET | ||
AMAZON_ECOMMERCE_CLOUD_CLIENT_ID | ||
AMAZON_ECOMMERCE_CLOUD_CLIENT_SECRET | ||
AMAZON_ECOMMERCE_CLOUD_APPLICATION_ID | ||
MICROSOFTDYNAMICSSALES_CRM_CLOUD_CLIENT_ID | ||
MICROSOFTDYNAMICSSALES_CRM_CLOUD_CLIENT_SECRET | ||
SALESFORCE_CRM_CLOUD_CLIENT_ID | ||
SALESFORCE_CRM_CLOUD_CLIENT_SECRET |
RAG
Embedding Models
Just use 1 model, it’s not required of course to have them all.
Variable | Example | Purpose |
---|---|---|
OPENAI_API_KEY | ||
JINA_API_KEY | ||
COHERE_API_KEY |
Variable | Example | Purpose |
---|---|---|
UNSTRUCTURED_API_KEY | ||
UNSTRUCTURED_API_URL |
Vector Database
Just use 1 Vector DB, it’s not required of course to have them all.
Variable | Example | Purpose |
---|---|---|
PINECONE_API_KEY | ||
PINECONE_INDEX_NAME | ||
QDRANT_BASE_URL | ||
QDRANT_API_KEY | ||
QDRANT_COLLECTION_NAME | ||
CHROMADB_URL | ||
CHROMADB_COLLECTION_NAME | ||
WEAVIATE_URL | ||
WEAVIATE_API_KEY | ||
WEAVIATE_CLASS_NAME | ||
TURBOPUFFER_API_KEY | ||
MILVUS_ADDRESS | ||
MILVUS_COLLECTION_NAME |
Frontend
Configuration
Variable | Example | Purpose |
---|---|---|
NEXT_PUBLIC_BACKEND_DOMAIN | http://localhost:3000 | Server url. Values are [http://localhost:3000, https://api-dev.panora.dev, https://api-sandbox.panora.dev, https://api.panora.dev] |
NEXT_PUBLIC_MAGIC_LINK_DOMAIN | http://localhost:81 | Magic link server. Values are [http://localhost:81, https://connect-dev.panora.dev, https://connect.panora.dev ] |
NEXT_PUBLIC_DISTRIBUTION | managed | Values are selfhost or managed |
NEXT_PUBLIC_WEBAPP_DOMAIN | http://localhost | Webapp client url. Values are [http://localhost, https://app-dev.panora.dev, https://app.panora.dev, ] |
NEXT_PUBLIC_POSTHOG_HOST | Host domain of your posthog | |
NEXT_PUBLIC_POSTHOG_KEY | Key of your posthog account |
Storage (Optional)
If you selfhost, and you want the RAG feature you must fill these values.Just choose either AWS or Minio ! We already put variables for Minio, so you dont have to do anything. If you’d like to use AWS contact us for more info.
Minio bucket is available at http://localhost:9000
Variable | Example | Purpose |
---|---|---|
MINIO_ROOT_USER | myaccesskey13 | |
MINIO_ROOT_PASSWORD | mysecretkey12 | |
AWS_S3_REGION | ||
AWS_ACCESS_KEY_ID | ||
AWS_SECRET_ACCESS_KEY |
Was this page helpful?