> Markdown version of [Production](https://vaadin.com/docs/latest/building-apps/production). Section index: [llms.txt](https://vaadin.com/docs/latest/building-apps/llms.txt)

# Take Your Application to Production

These guides take a Vaadin application from your development machine to production. They assume a Spring Boot application built with Maven, such as a project from [`start.vaadin.com`](https://start.vaadin.com). Each guide covers the essentials and the pitfalls that are specific to Vaadin, and links to the [Deploying to Production](https://vaadin.com/docs/latest/flow/production.md) reference for the details.

Before you start, read [How a Vaadin Application Works](https://vaadin.com/docs/latest/building-apps/architecture/runtime-model.md). A Vaadin application keeps the UI state of each user in server memory. This affects most of the decisions in these guides: how much memory to give the JVM, how to configure the proxy, which URLs to use for health checks, and what happens to users when an instance stops.

## <a id="reading-order"></a>Reading Order

Read the guides in this order. Each one builds on the previous ones.

1. [Build for Production](https://vaadin.com/docs/latest/building-apps/production/build.md) creates a JAR that runs in production mode, and explains when the build needs Node.js and a license key.

2. [Configure the Application](https://vaadin.com/docs/latest/building-apps/production/configure.md) keeps production settings in a Spring profile, and secrets out of the source code.

3. [Build a Container Image](https://vaadin.com/docs/latest/building-apps/production/container.md) packages the JAR in an image, and gives the JVM enough memory for the sessions.

4. [Deploy Behind a Proxy](https://vaadin.com/docs/latest/building-apps/production/reverse-proxy.md) terminates TLS in a reverse proxy, and lets server push through it.

5. [Add Health Checks](https://vaadin.com/docs/latest/building-apps/production/health-checks.md) gives the load balancer and the container platform URLs to check, without creating sessions.

6. [Collect Logs & Metrics](https://vaadin.com/docs/latest/building-apps/production/logs-and-metrics.md) makes logs machine-readable, and exposes metrics on a port that users can’t reach.

7. [Build on CI](https://vaadin.com/docs/latest/building-apps/production/ci.md) builds, tests, and packages the application on every change.

## <a id="running-more-than-one-instance"></a>Running More Than One Instance

These guides deploy a single instance. To run several instances behind a load balancer, you need sticky sessions, so that all requests of a user reach the instance that holds their session. When an instance stops, its users lose their UI state, unless the sessions are replicated to other instances. [Measure Capacity and Test Failover](https://vaadin.com/docs/latest/building-apps/architecture/capacity-and-failover.md) shows how to measure what an instance can hold, and how to choose between accepting the reload, draining instances, and replicating sessions. For the architecture, see [Distributed Deployment Architecture](https://vaadin.com/docs/latest/flow/production/distributed-deployment.md).

To deploy to a servlet container instead of running an executable JAR, to a specific cloud provider, or as a GraalVM native image, see the [Deploying to Production](https://vaadin.com/docs/latest/flow/production.md) reference.

## <a id="topics"></a>Topics

- [Build for Production](https://vaadin.com/docs/latest/building-apps/production/build.md): Create a JAR that runs in production mode, and understand what the build needs.
- [Configure the Application](https://vaadin.com/docs/latest/building-apps/production/configure.md): Keep production settings in a Spring profile, and secrets out of the source code.
- [Build a Container Image](https://vaadin.com/docs/latest/building-apps/production/container.md): Package a Vaadin application in a container image, and give the JVM enough memory.
- [Deploy Behind a Proxy](https://vaadin.com/docs/latest/building-apps/production/reverse-proxy.md): Run a Vaadin application behind a reverse proxy that handles TLS, let server push through it, and keep users on the same instance.
- [Add Health Checks](https://vaadin.com/docs/latest/building-apps/production/health-checks.md): Give load balancers and container platforms URLs to check, without creating user sessions.
- [Collect Logs & Metrics](https://vaadin.com/docs/latest/building-apps/production/logs-and-metrics.md): Make logs machine-readable, and expose metrics on a port that users can't reach.
- [Build on CI](https://vaadin.com/docs/latest/building-apps/production/ci.md): Build, test, and package a Vaadin application on every change, with a license key when needed.
