# Setting your environment variables

Below is an example of what your `.env` file might look like:

```plaintext
DB_HOST=postgres
DB_NAME=shipwithdjango
DB_PASSWORD=Abc123!!
DB_USER=postgres
DB_PORT=5432

DEBUG=True

EMAIL_HOST=smtp.office365.com
EMAIL_PORT=587
EMAIL_HOST_USER=example@example.com
EMAIL_HOST_USER_NAME="Example Name"
EMAIL_HOST_PASSWORD=examplepassword
EMAIL_USE_TLS=True
SENDGRID_API_KEY=your_sendgrid_api_key_here

REDIS_HOST=redis

SECRET_KEY=your_secret_key_here

STRIPE_LIVE_MODE=False
STRIPE_PUBLIC_API_KEY=your_stripe_public_key_here
STRIPE_SECRET_API_KEY=your_stripe_secret_key_here
STRIPE_WEBHOOK_SECRET=your_stripe_webhook_secret_here
STRIPE_TEST_PUBLIC_API_KEY=your_stripe_test_public_key_here
STRIPE_TEST_SECRET_API_KEY=your_stripe_test_secret_key_here
STRIPE_TEST_WEBHOOK_SECRET=your_stripe_test_webhook_secret_here

OPENAI_API_KEY=your_openai_api_key_here
```

It is not necessary to modify all these variables at once. You can update them as needed based on the specific requirements of your application. Below is a breakdown of the key sections and what each set of environment variables controls.

### Database

These variables define the connection details for your application's database:

* `DB_HOST`: The hostname of your database server. If using Docker, this should be set to `postgres`, matching the service name in the Docker Compose file.
* `DB_NAME`: The name of the database your application will use.
* `DB_USER`: The username for accessing the database.
* `DB_PASSWORD`: The password for the database user.
* `DB_PORT`: The port number on which your database server is listening (default is 5432 for PostgreSQL).

### Debug

The `DEBUG` variable controls the debugging mode of your application:

* `DEBUG`: Set this to `True` during development to enable detailed error pages and logs. **Important: Set this to `False` before deploying your application to production to prevent exposure of sensitive information.**

### Email

These variables configure your application's email delivery settings:

* `EMAIL_HOST`: The SMTP server your application will use to send emails.
* `EMAIL_PORT`: The port on which the SMTP server is running.
* `EMAIL_HOST_USER`: The username for the SMTP server.
* `EMAIL_HOST_USER_NAME`: The name that will appear in the "From" field of outgoing emails.
* `EMAIL_HOST_PASSWORD`: The password for the SMTP server.
* `EMAIL_USE_TLS`: Whether to use TLS for secure email transmission (`True` or `False`).
* `SENDGRID_API_KEY`: If using SendGrid for email, set your API key here.

If using SMTP, ensure that the `EMAIL_HOST`, `EMAIL_PORT`, `EMAIL_HOST_USER`, `EMAIL_HOST_USER_NAME`, and `EMAIL_HOST_PASSWORD` are configured.&#x20;

For SendGrid, use `EMAIL_HOST_USER`, `EMAIL_HOST_USER_NAME`, and `SENDGRID_API_KEY`.

### Redis

The `REDIS_HOST` variable specifies the address of your Redis instance:

* `REDIS_HOST`: If using Docker, set this to `redis`, which matches the service name in the Docker Compose file.

### Secret Key

The `SECRET_KEY` is a critical component for the security of your Django application:

* `SECRET_KEY`: This should be a unique, secret key used for cryptographic signing. You can generate a strong secret key [here](https://djecrety.ir/).

### Stripe

To enable payment processing and subscription management, configure the following Stripe-related environment variables:

* `STRIPE_LIVE_MODE`: Set to `True` to enable live mode, or `False` for testing.
* `STRIPE_PUBLIC_API_KEY`: Your public Stripe API key for live mode.
* `STRIPE_SECRET_API_KEY`: Your secret Stripe API key for live mode.
* `STRIPE_WEBHOOK_SECRET`: The webhook secret for Stripe in live mode.
* `STRIPE_TEST_PUBLIC_API_KEY`: Your public Stripe API key for test mode.
* `STRIPE_TEST_SECRET_API_KEY`: Your secret Stripe API key for test mode.
* `STRIPE_TEST_WEBHOOK_SECRET`: The webhook secret for Stripe in test mode.

Ensure these variables are correctly set to integrate Stripe into your application effectively.<br>

### OpenAI

To enable OpenAI capabilities, set the `OPENAI_API_KEY` to your key.

By configuring these environment variables, you can fine-tune how ShipWithDjango operates, ensuring it meets your project's specific needs.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.shipwithdjango.com/secret-management/setting-your-environment-variables.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
