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

<AgentInstructions>

## Submitting Feedback

If you encounter incorrect, outdated, or confusing documentation on this page, submit feedback:

POST https://docs.prowler.com/feedback

```json
{
  "path": "/getting-started/installation/prowler-app",
  "feedback": "Description of the issue"
}
```

Only submit feedback when you have something specific and actionable to report.

</AgentInstructions>

# Installation

### Installation

Prowler App offers flexible installation methods tailored to various environments.

Refer to the [Prowler App Tutorial](/user-guide/tutorials/prowler-app) for detailed usage instructions.

<Warning>
  Prowler configuration is based on `.env` files. Every version of Prowler can have differences on that file, so, please, use the file that corresponds with that version or repository branch or tag.
</Warning>

<Tabs>
  <Tab title="Docker Compose">
    *Requirements*:

    * `Docker Compose` installed: [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/).

    *Commands*:

    ```bash theme={null}
    VERSION=$(curl -s https://api.github.com/repos/prowler-cloud/prowler/releases/latest | jq -r .tag_name)
    curl -sLO "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/${VERSION}/docker-compose.yml"
    # Environment variables can be customized in the .env file. Using default values in production environments is not recommended.
    curl -sLO "https://raw.githubusercontent.com/prowler-cloud/prowler/refs/tags/${VERSION}/.env"
    docker compose up -d
    ```

    <Callout icon="lock" iconType="regular" color="#e74c3c">
      For a secure setup, the API auto-generates a unique key pair, `DJANGO_TOKEN_SIGNING_KEY` and `DJANGO_TOKEN_VERIFYING_KEY`, and stores it in `~/.config/prowler-api` (non-container) or the bound Docker volume in `_data/api` (container). Never commit or reuse static/default keys. To rotate keys, delete the stored key files and restart the API.
    </Callout>
  </Tab>

  <Tab title="GitHub">
    *Requirements*:

    * `git` installed.
    * `poetry` installed: [poetry installation](https://python-poetry.org/docs/#installation).
    * `npm` installed: [npm installation](https://docs.npmjs.com/downloading-and-installing-node-js-and-npm).
    * `Docker Compose` installed: [https://docs.docker.com/compose/install/](https://docs.docker.com/compose/install/).

    <Warning>
      Make sure to have `api/.env` and `ui/.env.local` files with the required environment variables. You can find the required environment variables in the [`api/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/api/.env.example) and [`ui/.env.template`](https://github.com/prowler-cloud/prowler/blob/master/ui/.env.template) files.
    </Warning>

    *Commands to run the API*:

    ```bash theme={null}
    git clone https://github.com/prowler-cloud/prowler \
    cd prowler/api \
    poetry install \
    eval $(poetry env activate) \
    set -a \
    source .env \
    docker compose up postgres valkey -d \
    cd src/backend \
    python manage.py migrate --database admin \
    gunicorn -c config/guniconf.py config.wsgi:application
    ```

    <Warning>
      Starting from Poetry v2.0.0, `poetry shell` has been deprecated in favor of `poetry env activate`.

      If your poetry version is below 2.0.0 you must keep using `poetry shell` to activate your environment. In case you have any doubts, consult the Poetry environment activation guide: [https://python-poetry.org/docs/managing-environments/#activating-the-environment](https://python-poetry.org/docs/managing-environments/#activating-the-environment)
    </Warning>

    > Now, you can access the API documentation at [http://localhost:8080/api/v1/docs](http://localhost:8080/api/v1/docs).

    *Commands to run the API Worker*:

    ```bash theme={null}
    git clone https://github.com/prowler-cloud/prowler \
    cd prowler/api \
    poetry install \
    eval $(poetry env activate) \
    set -a \
    source .env \
    cd src/backend \
    python -m celery -A config.celery worker -l info -E
    ```

    *Commands to run the API Scheduler*:

    ```bash theme={null}
    git clone https://github.com/prowler-cloud/prowler \
    cd prowler/api \
    poetry install \
    eval $(poetry env activate) \
    set -a \
    source .env \
    cd src/backend \
    python -m celery -A config.celery beat -l info --scheduler django_celery_beat.schedulers:DatabaseScheduler
    ```

    *Commands to run the UI*:

    ```bash theme={null}
    git clone https://github.com/prowler-cloud/prowler \
    cd prowler/ui \
    npm install \
    npm run build \
    npm start
    ```

    > Enjoy Prowler App at [http://localhost:3000](http://localhost:3000) by signing up with your email and password.

    <Warning>
      Google and GitHub authentication is only available in [Prowler Cloud](https://prowler.com).
    </Warning>
  </Tab>
</Tabs>

### Updating Prowler App

Upgrade Prowler App installation using one of two options:

#### Option 1: Updating the Environment File

To update the environment file:

Edit the `.env` file and change version values:

```env theme={null}
PROWLER_UI_VERSION="5.25.3"
PROWLER_API_VERSION="5.25.3"
```

<Note>
  You can find the latest versions of Prowler App in the [Releases Github section](https://github.com/prowler-cloud/prowler/releases) or in the [Container Versions](#container-versions) section of this documentation.
</Note>

#### Option 2: Using Docker Compose Pull

```bash theme={null}
docker compose pull --policy always
```

The `--policy always` flag ensures that Docker pulls the latest images even if they already exist locally.

<Note>
  **What Gets Preserved During Upgrade**

  Everything is preserved, nothing will be deleted after the update.
</Note>

### Troubleshooting Installation Issues

If containers don't start, check logs for errors:

```bash theme={null}
# Check logs for errors
docker compose logs

# Verify image versions
docker images | grep prowler
```

If issues are encountered, rollback to the previous version by changing the `.env` file back to the previous version and running:

```bash theme={null}
docker compose pull
docker compose up -d
```

### Container Versions

The available versions of Prowler App are the following:

* `latest`: in sync with `master` branch (please note that it is not a stable version)
* `v4-latest`: in sync with `v4` branch (please note that it is not a stable version)
* `v3-latest`: in sync with `v3` branch (please note that it is not a stable version)
* `<x.y.z>` (release): you can find the releases [here](https://github.com/prowler-cloud/prowler/releases), those are stable releases.
* `stable`: this tag always point to the latest release.
* `v4-stable`: this tag always point to the latest release for v4.
* `v3-stable`: this tag always point to the latest release for v3.

The container images are available here:

* Prowler App:
  * [DockerHub - Prowler UI](https://hub.docker.com/r/prowlercloud/prowler-ui/tags)
  * [DockerHub - Prowler API](https://hub.docker.com/r/prowlercloud/prowler-api/tags)
