---
id: architecture-deployment
title: "Storage and deployment"
summary: "Where Viaducta keeps its data (repository, Git, plugins, logs, metrics), which databases flows can use, what an installation needs, and the ways to deploy it - containers, Kubernetes, Windows and the Azure Marketplace."
audience: user
keywords: "deployment, repository, git, storage, opensearch, prometheus, keycloak, docker, kubernetes, azure marketplace, databases, sql server, postgresql, oracle, mysql, mariadb, db2, snowflake, clickhouse"
---
# Storage and deployment

Viaducta needs no database of its own. Flows and settings are files in each environment's repository, logs go to
OpenSearch, and sign-in goes through Keycloak.

## Where data lives

| Data | Kept in |
|---|---|
| Flows, types, expression settings, database links, certificates, network routes, alarm definitions, hosting tags | The **repository** of each execution environment: plain files on its Controller, with a history of every change. |
| Versions and promotion | **Git**. The Controller commits and pulls, so flows move from development to test to production through your Git server. |
| Plugins | The **plugin repository**: the plugin assemblies with their descriptions and readmes. |
| AI assistant threads, memory, skills, attachments and usage | A local store on the Manager, one per execution environment. |
| Logs | **OpenSearch**, written by the log shipper and searched from the designer. |
| Metrics | **Prometheus** endpoints on the processes. |

To back up an environment, back up its repository folder.

## Databases for flows

The database components work with **SQL Server, PostgreSQL, Oracle, MySQL, MariaDB, Db2, Snowflake and
ClickHouse** through one provider layer: the same Table reader, Sql query or Bulk insert works on all of them. A
**database link** holds the connection for each environment, so a flow reads the test database in test and the
production database in production without a change.

## What an installation needs

- **Keycloak** for sign-in. The Azure image includes it, with a Viaducta realm and login theme.
- **OpenSearch** for logs. The Azure image includes it.
- **A message bus between machines**, only when processes run on more than one machine: NATS, or Kafka. Processes on
  one machine use Unix domain sockets and need nothing extra.
- **Git**, if you promote flows between environments with it.
- For Python script components, a CPython runtime on the Hosts.

No database server is required.

## Deployment options

- **Linux containers**, with Docker or **Kubernetes**: the usual production setup. The Manager and the Controllers
  run as containers next to Keycloak and OpenSearch; each Controller starts its Hosts in its own container.
- **Windows or Linux services**: the Controller runs as a Windows service or under systemd.
- **Azure Marketplace**: one container with OpenSearch, Keycloak, the Manager, a Controller and nginx, ready to use
  after deployment from the Marketplace.

A single machine can run everything, with all processes talking over Unix domain sockets. Larger installations
place Controllers in several data centres or customer sites, all driven by one Manager over NATS, and use
[cloud bridges](/documentation/architecture/#cloud-bridge) to reach systems at sites with no direct network connection.

## Tenants and environments

An installation serves one or more **tenants**. Each tenant has its own users and one or more **execution
environments**, for example development, test and production, or one environment per business area with a test
environment for each. Every environment has its own Controller, repository, Hosts and expression settings; the
designer shows the environments the signed-in user may work with.
