# 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.
