diff --git a/.env.sample b/.env.sample index 10a99c497d..49456ae74b 100644 --- a/.env.sample +++ b/.env.sample @@ -1,48 +1,80 @@ -# –––––––––––––––– REQUIRED –––––––––––––––– - NODE_ENV=production -# Generate a hex-encoded 32-byte random key. You should use `openssl rand -hex 32` -# in your terminal to generate a random value. -SECRET_KEY=generate_a_new_key - -# Generate a unique random key. The format is not important but you could still use -# `openssl rand -hex 32` in your terminal to produce this. -UTILS_SECRET=generate_a_new_key - -# For production point these at your databases, in development the default -# should work out of the box. -DATABASE_URL=postgres://user:pass@postgres:5432/outline -DATABASE_CONNECTION_POOL_MIN= -DATABASE_CONNECTION_POOL_MAX= -# Uncomment this to disable SSL for connecting to Postgres -# PGSSLMODE=disable - -# For redis you can either specify an ioredis compatible url like this -REDIS_URL=redis://redis:6379 -# or alternatively, if you would like to provide additional connection options, -# use a base64 encoded JSON connection option object. Refer to the ioredis documentation -# for a list of available options. -# Example: Use Redis Sentinel for high availability -# {"sentinels":[{"host":"sentinel-0","port":26379},{"host":"sentinel-1","port":26379}],"name":"mymaster"} -# REDIS_URL=ioredis://eyJzZW50aW5lbHMiOlt7Imhvc3QiOiJzZW50aW5lbC0wIiwicG9ydCI6MjYzNzl9LHsiaG9zdCI6InNlbnRpbmVsLTEiLCJwb3J0IjoyNjM3OX1dLCJuYW1lIjoibXltYXN0ZXIifQ== - -# URL should point to the fully qualified, publicly accessible URL. If using a -# proxy the port in URL and PORT may be different. +# This URL should point to the fully qualified, publicly accessible, URL. If using a +# proxy this will be the proxy's URL. URL= + +# The port to expose the Outline server on, this should match what is configured +# in your docker-compose.yml PORT=3000 # See [documentation](docs/SERVICES.md) on running a separate collaboration # server, for normal operation this does not need to be set. COLLABORATION_URL= +# If using a Cloudfront/Cloudflare distribution or similar it can be set below. +# This will cause paths to javascript, stylesheets, and images to be updated to +# the hostname defined in CDN_URL. In your CDN configuration the origin server +# should be set to the same as URL. +CDN_URL= + +# How many processes should be spawned. As a reasonable rule divide your servers +# available memory by 512 for a rough estimate +WEB_CONCURRENCY=1 + +# Generate a hex-encoded 32-byte random key. Use `openssl rand -hex 32` in your +# terminal to generate a random value. +SECRET_KEY=generate_a_new_key + +# Generate a unique random key. The format is not important but you could still use +# `openssl rand -hex 32` in your terminal to generate a random value. +UTILS_SECRET=generate_a_new_key + +# The default interface language. See translate.getoutline.com for a list of +# available language codes and their rough percentage translated. +DEFAULT_LANGUAGE=en_US + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––––– DATABASE ––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# The database URL for your production database, including username, password, and database name. +DATABASE_URL=postgres://user:pass@postgres:5432/outline + +# The in-memory database pool per-process settings. Ensure that the pool size that will not exceed +# the maximum number of connections allowed by your database. Defaults to 0 and 5. +DATABASE_CONNECTION_POOL_MIN= +DATABASE_CONNECTION_POOL_MAX= + +# Uncomment this line if you will not use SSL for connecting to Postgres. This is acceptable +# if the database and the application are on the same machine. +# PGSSLMODE=disable + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––––––– REDIS ––––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# The Redis URL for your environment you can either specify an ioredis compatible url or a Base64 +# encoded configuration object. +# DOCS: https://docs.getoutline.com/s/hosting/doc/redis-LGM4BFXYp4 +REDIS_URL=redis://redis:6379 + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––– FILE STORAGE ––––––––––– +# –––––––––––––––––––––––––––––––––––––– + # Specify what storage system to use. Possible value is one of "s3" or "local". -# For "local", the avatar images and document attachments will be saved on local disk. +# For "local" images and document attachments will be saved on local disk, for "s3" they +# will be stored in an S3-compatible network store. +# DOCS: https://docs.getoutline.com/s/hosting/doc/file-storage-N4M0T6Ypu7 FILE_STORAGE=local # If "local" is configured for FILE_STORAGE above, then this sets the parent directory under -# which all attachments/images go. Make sure that the process has permissions to create -# this path and also to write files to it. +# which all attachments/images are stored. Make sure that the process has permissions to +# create this path and also to write files to it. FILE_STORAGE_LOCAL_ROOT_DIR=/var/lib/outline/data # Maximum allowed size for the uploaded attachment. @@ -56,8 +88,8 @@ FILE_STORAGE_IMPORT_MAX_SIZE= # and the files are temporary being automatically deleted after a period of time. FILE_STORAGE_WORKSPACE_IMPORT_MAX_SIZE= -# To support uploading of images for avatars and document attachments in a distributed -# architecture an s3-compatible storage can be configured if FILE_STORAGE=s3 above. +# To support uploading of images for avatars and document attachments in a distributed +# architecture, an s3-compatible storage can be configured if FILE_STORAGE=s3 above. AWS_ACCESS_KEY_ID=get_a_key_from_aws AWS_SECRET_ACCESS_KEY=get_the_secret_of_above_key AWS_REGION=xx-xxxx-x @@ -67,38 +99,55 @@ AWS_S3_UPLOAD_BUCKET_NAME=bucket_name_here AWS_S3_FORCE_PATH_STYLE=true AWS_S3_ACL=private -# –––––––––––––– AUTHENTICATION –––––––––––––– + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––––––––– SSL ––––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Base64 encoded private key and certificate for HTTPS termination. This is one +# of three ways to configure SSL and can be left empty. +# DOCS: https://docs.getoutline.com/s/hosting/doc/ssl-pzk7WO8d1n +SSL_KEY= +SSL_CERT= + +# Auto-redirect to https in production. The default is true but you may set to +# false if you can be sure that SSL is terminated at an external loadbalancer. +FORCE_HTTPS=true + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––– AUTHENTICATION –––––––––– +# –––––––––––––––––––––––––––––––––––––– # Third party signin credentials, at least ONE OF EITHER Google, Slack, -# or Microsoft is required for a working installation or you'll have no sign-in -# options. +# Discord, or Microsoft is required for a working installation or you'll +# have no sign-in options. -# To configure Slack auth, you'll need to create an Application at -# => https://api.slack.com/apps -# -# When configuring the Client ID, add a redirect URL under "OAuth & Permissions": -# https:///auth/slack.callback +# Slack sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/slack-sgMujR8J9J SLACK_CLIENT_ID=get_a_key_from_slack SLACK_CLIENT_SECRET=get_the_secret_of_above_key -# To configure Google auth, you'll need to create an OAuth Client ID at -# => https://console.cloud.google.com/apis/credentials -# -# When configuring the Client ID, add an Authorized redirect URI: -# https:///auth/google.callback +# Google sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/google-hOuvtCmTqQ GOOGLE_CLIENT_ID= GOOGLE_CLIENT_SECRET= -# To configure Microsoft/Azure auth, you'll need to create an OAuth Client. See -# the guide for details on setting up your Azure App: -# => https://wiki.generaloutline.com/share/dfa77e56-d4d2-4b51-8ff8-84ea6608faa4 +# Microsoft Entra / Azure AD sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/microsoft-entra-UVz6jsIOcv AZURE_CLIENT_ID= AZURE_CLIENT_SECRET= AZURE_RESOURCE_APP_ID= -# To configure generic OIDC auth, you'll need some kind of identity provider. -# See documentation for whichever IdP you use to acquire the following info: -# Redirect URI is https:///auth/oidc.callback +# Discord sign-in provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/discord-g4JdWFFub6 +DISCORD_CLIENT_ID= +DISCORD_CLIENT_SECRET= +DISCORD_SERVER_ID= +DISCORD_SERVER_ROLES= + +# Generic OIDC provider +# DOCS: https://docs.getoutline.com/s/hosting/doc/oidc-8CPBm6uC0I OIDC_CLIENT_ID= OIDC_CLIENT_SECRET= OIDC_AUTH_URI= @@ -116,83 +165,54 @@ OIDC_DISPLAY_NAME=OpenID Connect # Space separated auth scopes. OIDC_SCOPES=openid profile email -# To configure the GitHub integration, you'll need to create a GitHub App at -# => https://github.com/settings/apps -# -# When configuring the Client ID, add a redirect URL under "Permissions & events": -# https:///api/github.callback + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––––––– EMAIL ––––––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# To support sending outgoing transactional emails such as "document updated" or +# email sign-in you'll need to connect an SMTP server. Service can be configured +# with any service from this list: https://community.nodemailer.com/2-0-0-beta/setup-smtp/well-known-services/ +# DOCS: https://docs.getoutline.com/s/hosting/doc/smtp-cqCJyZGMIB +SMTP_SERVICE= +SMTP_USERNAME= +SMTP_PASSWORD= +SMTP_FROM_EMAIL= + + +# –––––––––––––––––––––––––––––––––––––– +# –––––––––– RATE LIMITER –––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Whether the rate limiter is enabled or not +RATE_LIMITER_ENABLED=true + +# Individual endpoints have hardcoded rate limits that are enabled +# with the above setting, however this is a global rate limiter +# across all requests +RATE_LIMITER_REQUESTS=1000 +RATE_LIMITER_DURATION_WINDOW=60 + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––– INTEGRATIONS ––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# The GitHub integration allows previewing issue and pull request links +# DOCS: https://docs.getoutline.com/s/hosting/doc/github-GchT3NNxI9 GITHUB_CLIENT_ID= GITHUB_CLIENT_SECRET= GITHUB_APP_NAME= GITHUB_APP_ID= GITHUB_APP_PRIVATE_KEY= -# Linear +# The Linear integration allows previewing issue links as rich mentions LINEAR_CLIENT_ID= LINEAR_CLIENT_SECRET= -# To configure Discord auth, you'll need to create a Discord Application at -# => https://discord.com/developers/applications/ -# -# When configuring the Client ID, add a redirect URL under "OAuth2": -# https:///auth/discord.callback -DISCORD_CLIENT_ID= -DISCORD_CLIENT_SECRET= - -# DISCORD_SERVER_ID should be the ID of the Discord server that Outline is -# integrated with. -# Used to verify that the user is a member of the server as well as server -# metadata such as nicknames, server icon and name. -DISCORD_SERVER_ID= - -# DISCORD_SERVER_ROLES should be a comma separated list of role IDs that are -# allowed to access Outline. If this is not set, all members of the server -# will be allowed to access Outline. -# DISCORD_SERVER_ID and DISCORD_SERVER_ROLES must be set together. -DISCORD_SERVER_ROLES= - -# –––––––––––––– IMPORTS –––––––––––––– -NOTION_CLIENT_ID= -NOTION_CLIENT_SECRET= - -# –––––––––––––––– OPTIONAL –––––––––––––––– - -# Base64 encoded private key and certificate for HTTPS termination. This is only -# required if you do not use an external reverse proxy. See documentation: -# https://wiki.generaloutline.com/share/1c922644-40d8-41fe-98f9-df2b67239d45 -SSL_KEY= -SSL_CERT= - -# If using a Cloudfront/Cloudflare distribution or similar it can be set below. -# This will cause paths to javascript, stylesheets, and images to be updated to -# the hostname defined in CDN_URL. In your CDN configuration the origin server -# should be set to the same as URL. -CDN_URL= - -# Auto-redirect to https in production. The default is true but you may set to -# false if you can be sure that SSL is terminated at an external loadbalancer. -FORCE_HTTPS=true - -# Have the installation check for updates by sending anonymized statistics to -# the maintainers -ENABLE_UPDATES=true - -# How many processes should be spawned. As a reasonable rule divide your servers -# available memory by 512 for a rough estimate -WEB_CONCURRENCY=1 - -# You can remove this line if your reverse proxy already logs incoming http -# requests and this ends up being duplicative -DEBUG=http - -# Configure lowest severity level for server logs. Should be one of -# error, warn, info, http, verbose, debug and silly -LOG_LEVEL=info - # For a complete Slack integration with search and posting to channels the -# following configs are also needed, some more details -# => https://wiki.generaloutline.com/share/be25efd1-b3ef-4450-b8e5-c4a4fc11e02a -# +# following configs are also needed in addition to Slack authentication: +# DOCS: https://docs.getoutline.com/s/hosting/doc/slack-G2mc8DOJHk SLACK_VERIFICATION_TOKEN=your_token SLACK_APP_ID=A0XXXXXXX SLACK_MESSAGE_ACTIONS=true @@ -202,29 +222,34 @@ SLACK_MESSAGE_ACTIONS=true DROPBOX_APP_KEY= # Optionally enable Sentry (sentry.io) to track errors and performance, -# and optionally add a Sentry proxy tunnel for bypassing ad blockers in the UI: -# https://docs.sentry.io/platforms/javascript/troubleshooting/#using-the-tunnel-option) +# DOCS: https://docs.getoutline.com/s/hosting/doc/sentry-jxcFttcDl5 SENTRY_DSN= SENTRY_TUNNEL= -# To support sending outgoing transactional emails such as "document updated" or -# "you've been invited" you'll need to provide authentication for an SMTP server -SMTP_SERVICE= -SMTP_USERNAME= -SMTP_PASSWORD= -SMTP_FROM_EMAIL= +# Enable importing pages from a Notion workspace +# DOCS: https://docs.getoutline.com/s/hosting/doc/notion-2v6g7WY3l3 +NOTION_CLIENT_ID= +NOTION_CLIENT_SECRET= -# The default interface language. See translate.getoutline.com for a list of -# available language codes and their rough percentage translated. -DEFAULT_LANGUAGE=en_US - -# Optionally enable rate limiter at application web server -RATE_LIMITER_ENABLED=true - -# Configure default throttling parameters for rate limiter -RATE_LIMITER_REQUESTS=1000 -RATE_LIMITER_DURATION_WINDOW=60 - -# Iframely API config +# The Iframely integration allows previews of third-party content within Outline. +# For example, hovering over an external link will show a preview. +# DOCS: https://docs.getoutline.com/s/hosting/doc/iframely-HwLF1EZ9mo IFRAMELY_URL= IFRAMELY_API_KEY= + + +# –––––––––––––––––––––––––––––––––––––– +# ––––––––––––– DEBUGGING –––––––––––– +# –––––––––––––––––––––––––––––––––––––– + +# Have the installation check for updates by sending anonymized statistics to +# the maintainers +ENABLE_UPDATES=true + +# Debugging categories to enable – you can remove the default "http" value if +# your proxy already logs incoming http requests and this ends up being duplicative +DEBUG=http + +# Configure lowest severity level for server logs. Should be one of +# error, warn, info, http, verbose, debug, or silly +LOG_LEVEL=info