## Installare e mantenere l'applicativo

Solitamente questo processo prevede quattro passaggi:

1. Pacchettizzare l'applicativo in modo che sia di facile messa in produzione.

2. Finalizzare il sistema in modo che l'applicativo possa essere eseguito. In questo esempio verrà creato semplicemente un utente MySQL da far usare all'applicazione.

3. Installare l'applicativo. In questo esempio verrà aggiunto un singolo file in `/opt/sample-app/` e configurato Apache affinché vi acceda.

4. Impostare il sistema in modo tale che si aggiorni automaticamente ogni giorno.

### Pacchettizzare l'applicativo

Sono disponibili due opzioni:

- Il metodo raccomandato è quello di creare un pacchetto Debian. Dato che questo argomento esula da questa guida, non verrà spiegato questo metodo e si rimanda alla Ubuntu Packaging Guide. In questo caso è anche utile creare un repository per contenere il pacchetto in modo tale che gli aggiornamenti vengano prelevati da questo. Per ulteriori informazioni, consultare Debian Administration.

- Installare manualmente l'applicativo in `/opt` come consigliato dalle linee guida FHS. All'interno di questa guida, per maggiore semplicità, verrà utilizzato questo approccio, anche se non è raccomandato per qualsiasi applicativo dato che comporta una maggiore complessità nella gestione. Per maggiori informazioni, consultare la sezione chiamata «Come aggiornare l'applicativo».

### Impostare un utente MySQL

L'applicazione richiede di accedere al database MySQL. Per ragioni di sicurezza, questo utente non deve essere l'utente root di MySQL, viene quindi creato un utente www-data che ha accesso in scrittura al database locale e può solamente connettersi localmente attraverso una password.

- Per prima cosa è necessario connettersi al monitor MySQL utilizzando la password predefinito specificata precedentemente:

    user@JeOS:$ mysql -p --user=root
    Enter password:
    Welcome to the MySQL monitor.  Commands end with ; or \g.
    Your MySQL connection id is 9
    Server version: 5.0.45-Debian_1ubuntu3-log Debian etch distribution

    Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

    mysql>

- Quindi creare l'utente e uscire dal monitor di mysql:

    mysql> GRANT SELECT ON *.* TO 'www-data'@'localhost' IDENTIFIED BY 'password';
    Query OK, 0 rows affected (0.00 sec)

    mysql> exit
    Bye
    user@JeOS:$

### Installare l'applicativo

In questo esempio, l'applicazione è una semplice pagina PHP che elenca i database disponibili in MySQL:

    <?php
    session_start();
    ?>

    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <html>
    <head>
       <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
       <meta name="description" content="Database List">
       <title>Database List>/title>
    </head>
    <body>
    <h1>Database list</h1>

    <ul>
    <?php
    error_reporting(E_ALL);

    $link = mysql_connect('localhost', 'www-data', 'password');
    $db_list = mysql_list_dbs($link);

    $i = 0;
    $cnt = mysql_num_rows($db_list);
    while ($i < $cnt) {
        echo "<li>" . mysql_db_name($db_list, $i) . "</li>\n";
        $i++;
    }
    ?>
    </ul>

    </body>
    </html>

Per installarla:

- sudo mkdir /opt/sample-app/

- Aprire il file `/opt/sample-app/index.php` usando sudo e un editor di testo.

- Incollare il contenuto indicato precedentemente nell'editor di testo, salvare e chiudere.

- sudo chown -R www-data:www-data /opt/sample-app per permettere ad Apache di leggerlo.

Quindi basta solo modificare la configurazione predefinita di Apache affinché punti alla directory dell'applicazione:

- Aprire il file `/etc/apache2/sites-enabled/000-default` usando sudo e un editor di testo.

- Modificare tutte le istanze di `/var/www/` in `/opt/sample-app`

- Salvare ed uscire.

- sudo /etc/init.d/apache2 reload

È ora possibile provare la propria applicazione utilizzando il proprio browser e l'indirizzo IP dell'applicativo virtuale.

### Configurazione degli aggiornamenti automatici

Affinché il sistema sia configurato per aggiornarsi automaticamente, basta installare il pacchetto unattended-upgrades:

    sudo aptitude install unattended-upgrades

#### Come aggiornare l'applicativo

Se è stato deciso di pacchettizzare l'applicazione come un pacchetto Debian ed è stato creato un repository, basta aggiungere il repository al file `/etc/apt/source.list.d/`. L'evento cron precedente, scaricherà gli aggiornamenti ogni qual volta vengano aggiunti al repository. Un altro vantaggio nell'uso dei pacchetti è che se le dipendenze vengono modificate durante l'evoluzione dell'applicativo, verranno installate automaticamente durante il processo di aggiornamento.

Se si è deciso di installare l'applicativo manualmente, dipende da come si vuole procedere con l'aggiornamento. Una possibile soluzione potrebbe essere:

- Caricare un file tar con la propria applicazione in un server HTTP assieme a un file di versione.

- Creare uno script in `/etc/cron.daily` che regolarmente confronta il file di versione sul server con quello archiviato in `/opt/sample-app/`

- Scaricare e applicare il nuovo file tar se il numero di versione disponibile è maggiore di quello installato.

- Ricaricare Apache.

Preparare il sistema operativo |  | Preparare l'avvio per il primo utente