> ## Documentation Index
> Fetch the complete documentation index at: https://docs.chartbrew.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Run on Docker

> How to run Chartbrew on Docker

<Warning>
  The setup is not yet updated for PostgreSQL. Please [open a PR](https://github.com/chartbrew/chartbrew/compare) if you have a `docker-compose.yml` file that works for PostgreSQL.
</Warning>

## Using the docker image directly

A [Chartbrew docker image](https://hub.docker.com/r/razvanilin/chartbrew) is built whenever a new version is released.

Before running the commands below, make sure you have a MySQL server already running and an empty database that Chartbrew can use. The database name should match the value of the `CB_DB_NAME` variable.

You will need a 32 bytes AES encryption key for the `CB_ENCRYPTION_KEY` variable. Run the following command to generate one:

```sh theme={null}
node -e "console.log(require('crypto').randomBytes(32).toString('hex'))"
```

```sh theme={null}
docker pull razvanilin/chartbrew

docker run -p 4019:4019 -p 4018:4018 \
  -e CB_ENCRYPTION_KEY=your_32_bytes_key \
  -e CB_API_HOST=0.0.0.0 \
  -e CB_API_PORT=4019 \
  -e CB_DB_HOST=host.docker.internal \
  -e CB_DB_PORT=3306 \
  -e CB_DB_NAME=chartbrew \
  -e CB_DB_USERNAME=root \
  -e CB_DB_PASSWORD=password \
  -e CB_REDIS_HOST=host.docker.internal \
  -e CB_REDIS_PORT=6379 \
  -e CB_REDIS_PASSWORD=password \
  -e VITE_APP_CLIENT_HOST=http://localhost:4018 \
  -e VITE_APP_CLIENT_PORT=4018 \
  -e VITE_APP_API_HOST=http://localhost:4019 \
  razvanilin/chartbrew
```

### Changing environment variables

If you change any of the `VITE_APP_*` variables after the first run, **it's important** to build the client application again from inside the image. This is done by running the following command:

```sh theme={null}
# replace 'your_container_name' with the name of your docker container where Chartbrew is running

docker exec -it -w /code/client your_container_name npm run build
```

**Now let's analyse what is needed for the docker image to run properly**.

The `4019` port is used by the API and `4018` for the client app (UI). Feel free to map these to any other ports on your system (e.g `4523:4019`).

* `CB_ENCRYPTION_KEY` this string will be used to encrypt passwords and tokens. Use a secure 32 bytes string. [You can generate one here](/quickstart/#generate-the-encryption-key).
* `CB_API_HOST` needs to point to the home address of the system. Usually for a docker image this is `0.0.0.0`.
* `CB_DB_HOST` is the host of your database and determines how the application can reach it. `host.docker.internal` is used when you want the container to connect to a service on your host such as a database running on your server already.
* `CB_DB_PORT` is the port number of your database.
* `CB_DB_NAME` the name of the database (make sure the database exists before running the image).
* `CB_DB_USERNAME` and `CB_DB_PASSWORD` are used for authentication with the DB.
* `CB_REDIS_HOST`, `CB_REDIS_PORT`, and `CB_REDIS_PASSWORD` are used for the Redis queue.
* `VITE_APP_CLIENT_HOST` is the address of the client application and is used by the client to be aware of its own address (not as important)
* `VITE_APP_CLIENT_PORT` The port number where your client application will run from.
* `VITE_APP_API_HOST` this is used for the client application to know where to make the API requests. This is the address of the API (backend).

If the setup fails in any way, please double-check that the environment variables are set correctly. Check that both API and Client apps are running, and if you can't get it running, please [open a new issue](https://github.com/chartbrew/chartbrew/issues/new) with as much info as you can share (logs, vars).

## Using docker-compose

If you want to use docker-compose, you can use the `docker-compose.yml` file from the root of the project as an example.

> [Go to the docker-compose.yml file](https://github.com/chartbrew/chartbrew/blob/master/docker-compose.yml)

The `docker-compose.yml` file is using the `.env` file to set the environment variables. Ensure you have the file in the root of the project and complete it with the required values. You can copy the `.env-template` file and check the [Environment variables](/environment-variables) section for more information.

Once you have the `.env` file, you can run the following command to start the application:

```sh theme={null}
docker-compose up -d
```
