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

# Deploy with Docker

> Run Presenton with Docker Run or Docker Compose and keep its data persistent.

Docker is the recommended self-hosted deployment. Use Docker Run for the shortest path to a working instance and Compose when configuration must be repeatable.

## Docker Run

<Tabs>
  <Tab title="Linux and macOS">
    ```bash theme={null}
    mkdir -p app_data

    docker run --detach --name presenton \
      --publish 5001:80 \
      --volume "./app_data:/app_data" \
      ghcr.io/presenton/presenton:v0.9.0-beta
    ```
  </Tab>

  <Tab title="Windows PowerShell">
    ```powershell theme={null}
    New-Item -ItemType Directory -Force app_data

    docker run --detach --name presenton `
      --publish 5001:80 `
      --volume "${PWD}\app_data:/app_data" `
      ghcr.io/presenton/presenton:v0.9.0-beta
    ```
  </Tab>
</Tabs>

Open [http://localhost:5001](http://localhost:5001). Container port `80` serves the browser, REST API, and `/mcp`; the value before the colon is the host port and can be changed.

<Warning>
  Keep the `/app_data` mount whenever you replace the container. It contains presentations, uploads, templates, settings, authentication state, the default database, exports, and local memory.
</Warning>

## Docker Compose

```bash theme={null}
git clone https://github.com/presenton/presenton.git
cd presenton
docker compose up --detach production
```

Place repeatable settings in `.env` beside `docker-compose.yml`. The repository provides `production`, `production-gpu`, `development`, and `development-gpu` services; use a production service for hosted instances.

```dotenv theme={null}
PRESENTON_HTTP_HOST_PORT=5001
AUTH_USERNAME=admin
AUTH_PASSWORD=replace-with-a-long-password
LLM=openai
OPENAI_API_KEY=replace-with-your-key
OPENAI_MODEL=gpt-4.1
CAN_CHANGE_KEYS=false
```

## Ports and networking

| Mapping     | Use                               |
| ----------- | --------------------------------- |
| `5001:80`   | Browser, REST API, and MCP        |
| `1455:1455` | ChatGPT/Codex OAuth callback only |

`localhost` inside a container is the container itself. Reach another Compose service by its service name, or a host service through a supported host gateway such as `host.docker.internal`.

## Operate the container

```bash theme={null}
docker logs --follow presenton
docker stop presenton
docker start presenton
docker ps --filter name=presenton
```

For NVIDIA workloads, install the NVIDIA Container Toolkit, verify Docker GPU access independently, and use `docker compose up --detach production-gpu`. A GPU benefits compatible local providers only.

## Verify

Generate a small presentation, restart the container, and confirm the presentation remains. Then test export and any API or MCP integration you intend to expose.
