\section{Requisiti}

L'applicazione è stata sviluppata, eseguita e testata su sistemi \textit{UNIX Like}, in particolare sulla distribuzione \textit{GNU/Linux Debian}.

Per questo questo motivo le istruzioni che seguono saranno incentrate su questo ambiente, ma dovrebbero valere per tutti gli altri sistemi.

Per rendere la propria macchina pronta ad eseguire l'applicazione è necessario installare i pacchetti \code{openjdk} (la versione 8 è sufficiente) e \code{mvn} corrispondenti rispettivamente a \textit{Open Java Development Kit} ed al tool \textit{Apache Maven} \cite{maven}; in caso di Debian o derivate si usa il seguente comando:
\newline
\begin{lstlisting}[style=BashInputStyle]
    $ sudo apt-get install openjdk-8-jdk mvn
\end{lstlisting}

In caso si volesse usare \textit{Docker} allora le dipendenze sono \textit{docker-compose}\cite{docker}, ed ovviamente \textit{docker} stesso. \textit{Compose} è presente nella maggior parte delle repo delle distro, il problema è che non è sempre aggiornato, per cui si ovvierà a questo possibile problema per mezzo di \code{pip}. \cite{pip}

La serie di comandi è la seguente, in caso di distro diversa da Debian usare il relativo gestore di pacchetti in sostituzione ad apt:
\newline
\begin{lstlisting}[style=BashInputStyle]
    $ sudo apt-get install docker-ce python3-pip
    $ sudo pip3 install docker-compose
\end{lstlisting}


\section{Test}

Per eseguire i test è necessario spostarsi all'interno della cartella del sorgente dell'applicazione e poi lanciare il relativo comando:
\newline
\begin{lstlisting}[style=BashInputStyle]
    $ cd mivan
    $ ./mvnw clean verify
\end{lstlisting}


\section{Build}

L'operazione di build genera un file \code{.jar} all'interno della cartella di nome \code{target}, la quale se non è già presente \textit{verrà creata a runtime}.

Per eseguire la build è necessario spostarsi all'interno della cartella del sorgente dell'applicazione e poi lanciare il wrapper \code{mvnw}:
\newline
\begin{lstlisting}[style=BashInputStyle]
    $ cd mivan
    $ ./mvnw clean package spring-boot:repackage
\end{lstlisting}

\section{Avvio tramite linea di comando}

L'avvio immediato dell'applicazione, utile durante lo sviluppo si esegue con un solo comando. Si ricorda che prima è necessario spostarsi all'interno della cartella del sorgente dell'applicazione:
\newline
\begin{lstlisting}[style=BashInputStyle]
    $ cd mivan
    $ ./mvnw spring-boot:run
\end{lstlisting}

\section{Avvio tramite Docker}

Per poter eseguire l'applicazione per mezzo di Docker container è necessario soddisfare i requisiti indicati all'inizio di questo capitolo. Il vantaggio di usare Docker è che semplifica \textit{notevolmente} sia la fase di sviluppo che di \textit{deploy} dell'applicazione, specialmente per l'ultimo punto che ne riduce in maniera sensibile sia il tempo che la complessità.

\begin{leftbar}
      \noindent\textbf{Nota:}\newline Per poter utilizzare docker è necessario avere i privilegi di root od essere nel gruppo \code{docker}!
\end{leftbar}

Un comodo strumento di cui faremo uso per gestire i container è \textit{Compose}, di cui, dato il file \code{.yml} già compilato alla radice della repository eseguiamo il comando di build:
\newline
\begin{lstlisting}[style=BashInputStyle]
    $ sudo docker-compose build
\end{lstlisting}

E poi, una volta buildate l'immagine del container, lo lanciamo:
\newline
\begin{lstlisting}[style=BashInputStyle]
    $ sudo docker-compose up
\end{lstlisting}
