\section{Configuration}
\subsection{Build and Release}
A single Docker Compose file is used to start the whole application stack. 
It is responsible for:
\begin{itemize}
    \item Starting Traefik with the necessary parameters
    \item Loading the database files from the disk and starting it
    \item Constructing the Blazor application using a unique Dockerfile
\end{itemize}
\subsubsection{Blazor Dockerfile}
The Blazor application's Dockerfile uses a multi-stage construction procedure. 
This approach produces an image that is as lightweight as possible, which improves the amount of resources needed by the docker container. 
This is accomplished by separating the build step, in which all required dependencies and build tools are included, from the final runtime stage, in which the produced program is transferred into a ASP.NET environment free of dependencies and build tools.

\subsection{Startup}
We use a makefile and run the command \texttt{make start i=n} to start the application. 
The number of concurrent service instances that should be started is indicated by the variable \texttt{i} in this case. 
Blazor will raise an error if there are more than 128 occurrences, despite the fact that \texttt{n} can be any integer value. 
The load balancing in Traefik is made to automatically detect the number of services and change as necessary.

\subsection{Sticky Cookie}
To make sure that the client connects with the same server during a session, the Blazor Services use a sticky cookie. 
This is necessary because Blazor connects to the client via WebSockets through a SignalR connection.\\
SignalR maintains a stateful connection between the client and server, and if the client was redirected to a different server with each request (or upon reloading), 
the state information could be lost or mismatched, resulting in application problems or unexpected behavior. 
When a service fails and is shut down, the whole SignalR connection is re-established and no state is maintained (outside the database).

\subsection{HTTP/3}
It is important to switch on the experimental feature in Traefik's setup in order to enable HTTP/3 communication between Traefik and the client. 
Additionally, the entrypoint for which HTTP/3 should be activated must be specified.\\
It employs the QUIC protocol, which runs using UDP rather than TCP. As a result, port 443 needs to be expressly opened for UDP transmission. 
However, we also had to make sure that port 443 is kept open for TCP traffic in order to guarantee backwards compatibility.\\
As a result, we explicitly open port 443 for both TCP and UDP.