# Environment Variables > Each Directus project supports a number of environment variables for configuration. These variables are added to the `/api/.env` file, with an example file at `/api/example.env` for easier boilerplate setup. ## General ### `PORT` What port to run the API under.
**Default: `8055`** ### `PUBLIC_URL` URL where your API can be reached on the web.
**Default: `/`** ### `LOG_LEVEL` What level of detail to log. One of `fatal`, `error`, `warn`, `info`, `debug`, `trace` or `silent`.
**Default: `info`** ### `LOG_STYLE` Render the logs human readable (pretty) or as JSON. One of `pretty`, `raw`.
**Default: `pretty`** ## Database ### `DB_CLIENT` What database client to use. One of `pg`, `mysql`, `mysql2`, `oracledb`, `mssql`, or `sqlite3`. For all database clients except SQLite, you will also need to configure the following variables: ### `DB_HOST` Database host. Required when using `pg`, `mysql`, `mysql2`, `oracledb`, or `mssql`. ### `DB_PORT` Database port. Required when using `pg`, `mysql`, `mysql2`, `oracledb`, or `mssql`. ### `DB_DATABASE` Database name. Required when using `pg`, `mysql`, `mysql2`, `oracledb`, or `mssql`. ### `DB_USER` Database user. Required when using `pg`, `mysql`, `mysql2`, `oracledb`, or `mssql`. ### `DB_PASSWORD` Database user's password. Required when using `pg`, `mysql`, `mysql2`, `oracledb`, or `mssql`. ### `DB_FILENAME` (SQLite Only) Where to read/write the SQLite database. Required when using `sqlite3`. ::: Additional Database Variables All `DB_*` environment variables are passed to the `connection` configuration of a [`Knex` instance](http://knexjs.org). Based on your project's needs, you can extend the `DB_*` environment variables with any config you need to pass to the database instance. ::: ## Security ### `KEY` Unique identifier for the project. ### `SECRET` Secret string for the project. Generated on installation. ### `ACCESS_TOKEN_TTL` The duration that the access token is valid.
**Default: `15m`** ### `REFRESH_TOKEN_TTL` The duration that the refresh token is valid, and also how long users stay logged-in to the App.
**Default: `7d`** ### `REFRESH_TOKEN_COOKIE_SECURE` Whether or not to use a secure cookie for the refresh token in cookie mode.
**Default: `false`** ### `REFRESH_TOKEN_COOKIE_SAME_SITE` Value for `sameSite` in the refresh token cookie when in cookie mode.
**Default: `lax`** ## CORS ### `CORS_ENABLED` Whether or not to enable the CORS headers.
**Default: `true`** ### `CORS_METHODS` Value for the `Access-Control-Allow-Methods` header.
**Default: `GET,POST,PATCH,DELETE`** ### `CORS_ALLOWED_HEADERS` Value for the `Access-Control-Allow-Headers` header.
**Default: `Content-Type,Authorization`** ### `CORS_EXPOSED_HEADERS` Value for the `Access-Control-Expose-Headers` header.
**Default: `Content-Range`** ### `CORS_CREDENTIALS` Whether or not to send the `Access-Control-Allow-Credentials` header.
**Default: `true`** ### `CORS_MAX_AGE` Value for the `Access-Control-Max-Age` header.
**Default: `18000`** ## Rate Limiting ### `RATE_LIMITER_ENABLED` Whether or not to enable rate limiting on the API.
**Default: `false`** ### `RATE_LIMITER_POINTS` The amount of allowed hits per duration.
**Default: `50`** ### `RATE_LIMITER_DURATION` The time window in seconds in which the points are counted.
**Default: `1`** ### `RATE_LIMITER_STORE` Where to store the rate limiter counts. Either `memory`, `redis`, or `memcache`. Based on the rate limiter used, you must also provide the following configurations.
**Default: `memory`** * **Memory** * No additional configuration required * **Redis** * **`RATE_LIMITER_REDIS`** — Redis connection string * eg: `redis://:authpassword@127.0.0.1:6380/4` * Alternatively, you can enter individual connection parameters: * **`RATE_LIMITER_REDIS_HOST`** * **`RATE_LIMITER_REDIS_PORT`** * **`RATE_LIMITER_REDIS_PASSWORD`** * **`RATE_LIMITER_REDIS_DB`** * **Memcache** * **`RATE_LIMITER_MEMCACHE`** — Location of your memcache instance ::: Additional Rate Limiter Variables All `RATE_LIMITER_*` variables are passed directly to a `rate-limiter-flexible` instance. Depending on your project's needs, you can extend the above environment variables to configure any of [the `rate-limiter-flexible` options](https://github.com/animir/node-rate-limiter-flexible/wiki/Options). ::: ## Cache ### `CACHE_ENABLED` Whether or not caching is enabled.
**Default: `false`** ### `CACHE_TTL` How long the cache is persisted.
**Default: `30m`** :::warning Forced Flush Regardless of TTL, the cache is always flushed for every create, update, and delete action. ::: ### `CACHE_NAMESPACE` How to scope the cache data.
**Default: `directus-cache`** ### `CACHE_STORE` Where to store the cache data. Either `memory`, `redis`, or `memcache`. Based on the cache used, you must also provide the following configurations.
**Default: `memory`** * **Memory** * No additional configuration required * **Redis** * **`CACHE_REDIS`** — Redis connection string * eg: `redis://:authpassword@127.0.0.1:6380/4` * Alternatively, you can enter individual connection parameters: * **`CACHE_REDIS_HOST`** * **`CACHE_REDIS_PORT`** * **`CACHE_REDIS_PASSWORD`** * **`CACHE_REDIS_DB`** * **Memcache** * **`CACHE_MEMCACHE`** — Location of your memcache instance ## File Storage ### `STORAGE_LOCATIONS` A CSV of storage locations (eg: `local,digitalocean,amazon`) to use. You can use any names you'd like for these keys, but each must have a matching `` configuration.
**Default: `local`** For each of the storage locations listed, you must provide the following configuration: * **`STORAGE__PUBLIC_URL`** — Location on the internet where the files are accessible * **`STORAGE__DRIVER`** — Which driver to use, either `local`, `s3`, or `gcl` Based on your configured driver, you must also provide the following configurations. * **Local** * `STORAGE__ROOT` — Where to store the files on disk * **S3** * **`STORAGE__KEY`** — User key * **`STORAGE__SECRET`** — User secret * **`STORAGE__ENDPOINT`** — S3 Endpoint * **`STORAGE__BUCKET`** — S3 Bucket * **`STORAGE__REGION`** — S3 Region * **Google Cloud** * **`STORAGE__KEY_FILENAME`** — Path to key file on disk * **`STORAGE__BUCKET`** — Google Cloud Storage bucket ## oAuth ### `OAUTH_PROVIDERS` CSV of oAuth providers you want to use. For each of the oAuth providers you list, you must also provide the following configurations. * **`OAUTH__KEY`** — oAuth key for the external service * **`OAUTH__SECRET`** — oAuth secret for the external service. ## Extensions ### `EXTENSIONS_PATH` Path to your local extensions folder.
**Default: `./extensions`** ## Email ### `EMAIL_FROM` Email address from which emails are sent.
**Default: `no-reply@directus.io`** ### `EMAIL_TRANSPORT` What to use to send emails. One of `sendmail`, `smtp`. Based on the transport used, you must also provide the following configurations.
**Default: `sendmail`** * **Sendmail** (`sendgrid`) * **`EMAIL_SENDMAIL_NEW_LINE`** — What new line style to use in sendmail. **Default: `unix`** * **`EMAIL_SENDMAIL_PATH`** — Path to your sendmail executable. **Default: `/usr/sbin/sendmail`** * **SMTP** (`smtp`) * **`EMAIL_SMTP_HOST`** — SMTP Host * **`EMAIL_SMTP_PORT`** — SMTP Port * **`EMAIL_SMTP_USER`** — SMTP User * **`EMAIL_SMTP_PASSWORD`** — SMTP Password * **`EMAIL_SMTP_POOL`** — Use SMTP pooling * **`EMAIL_SMTP_SECURE`** — Enable TLS