# Install with existing AI endpoints

Deploy the Dicto core and management app while using separately hosted transcription and text-generation APIs.

## Outcome and requirements

This recipe installs the reference core stack and uses inference endpoints you
already operate or are authorized to use. Follow [requirements](/start/requirements.md)
and [download the setup](/install/reference.md). All commands run from the extracted
`dicto-reference-setup` directory. The pinned server is 2.4.2; see
[validation scope](/reference/versions.md).

Collect a public hostname, ACME email, registry access, bootstrap administrator
credentials, and each provider's full API root, API key and model identifier.
The server's network must reach those providers. A successful `/v1/models` list
alone does not verify audio uploads or generation.

## Configure the files

```sh
cp secrets.env.example secrets.env
chmod 600 secrets.env
openssl rand -hex 32
```

Generate independent random values for database/auth/storage secrets. Replace
every `REPLACE_` placeholder. Set `DICTO_HOST` and `ACME_EMAIL`. Replace
`dicto.example.org` in `server/server.yaml`, `app-management/public.env` and
`config/app.yaml`; the hostname appears in both the public API URL and auth settings.

Set `CHAT_BASE_URL`, `CHAT_API_KEY`, `TRANSCRIPTION_BASE_URL` and
`TRANSCRIPTION_API_KEY` to the actual provider settings. Include required `/v1`
or gateway prefixes. In `server/server.yaml`, change each `provider_model` to an
ID accepted by that provider. The example IDs `llm-default` and `whisper` are
aliases for the self-hosted recipe and may not exist on your external service.

Only advertise capabilities you have verified. See [model configuration](/configure/models.md)
and [authentication](/configure/authentication.md). If chat is not part of the
installation, omit its configured model catalog instead of claiming a working
LLM feature. Scripto may require a separate agent service.

## Validate and start

Authenticate Docker to GHCR using an authorized pull credential, then:

```sh
docker compose --env-file secrets.env config --quiet
docker compose --env-file secrets.env run --rm --no-deps migrator validate-config
docker compose --env-file secrets.env run --rm --no-deps migrator validate-config --resolve-env
docker compose --env-file secrets.env up --build -d postgres storage storage-init
docker compose --env-file secrets.env up --build -d
docker compose --env-file secrets.env ps --all
```

The bucket initializer and migrator must exit zero before API/jobs start.
The GPU overlays and gateway profile are not enabled in this recipe. Leave
their unused variables supplied as placeholders, or remove the unused gateway
definition when creating your own deployment.

## Verify and finish bootstrap

Open `https://YOUR_HOST/management/`, sign in and verify the browser uses your
public `/api` URL. Run the [end-to-end checklist](/operations/troubleshooting.md),
including stored-audio playback, transcription and a separate chat check if enabled.

Disable `seed.admin.enabled` in `server/server.yaml`, then recreate the consumers:

```sh
docker compose --env-file secrets.env up -d --force-recreate server jobs
```

See [management deployment](/components/management.md) for browser routing and
[operations](/operations/backup-upgrade.md) before rolling out to users.
