sostituire horde con roundcube su plesk 10

Scenario: avete un server (dedicato, virtualizzato, cloud, ecc..) su cui gestite diversi domini per i vostri clienti tramite il pannello di controllo plesk.

In questa guida sostituiremo il client di posta horde fornito insieme a plesk con il più semplice ed intuitivo roundcube per ciascuno dei domini attivi sul server. Non verrà sostituita o alterata l’installazione di horde, pertanto sarà semplicissimo tornare alla configurazione di default e non ci saranno problemi con gli aggiornamenti di plesk.

Per ottenere questo risultato, creeremo su plesk un template personalizzato (come descritto su questa guida) per la generazione della configurazione di apache che permetterà di raggiungere roundcube tramite il terzo livello ‘webmail’ per ciascun dominio configurato con plesk (es. http://webmail.nomedominio.it).

Prerequisiti:

  • accesso come root al server
  • plesk 10 già installato e configurato con almeno un dominio

Iniziamo:

  1. scarichiamo roundcube (per questa guida è stata utilizzata l’attuale versione stabile 0.6) ed installiamolo su un dominio già configurato con plesk tramite il wizard all’indirizzo
    http://www.nomedominio.it/roundcube/installer/ (la parte in corsivo è da modificare in base al dominio scelto ed al percorso utilizzato per installare roundcube)
  2. spostiamo roundcube appena installato in un percorso indipendente dal dominio, per esempio in /usr/share/roundcube (questo percorso è lo stesso che dovrà essere utilizzato nel file descritto nel punto seguente, alla riga 4), tramite il comando:
    mv /var/www/vhosts/nomedominio.it/httpdocs/roundcubemail-0.6 /usr/share/roundcube
  3. creiamo (tramite vi o qualunque altro editor) il file /opt/psa/admin/conf/templates/custom/horde.php (che è la versione adattata al nostro scopo del template di default fornito con plesk per la generazione della parte di configurazione di apache necessaria a far funzionare horde), in cui inseriamo il seguente codice:
    [php]
    <?php
    $ipAddresses = $VAR->server->ipAddresses->all;
    $ipLimit = $VAR->server->webserver->apache->vhostIpCapacity;
    $hordeDocroot = "/usr/share/roundcube";
    $domainsBootstrap = $VAR->domainsWebmailHordeBootstrap;
    $modPHPAvailiable = $VAR->server->php->ModAvailable;
    ?>
    
    
    <?php
    for($ipAddress = reset($ipAddresses);
    $ipAddress;
    $ipAddress = next($ipAddresses)):
    ?>
    <VirtualHost \
    <?php echo "{$ipAddress->escapedAddress}:{$VAR->server->webserver->httpPort}" ?> \
    <?php for ($n = 1;
    $n < $ipLimit && $ipAddress = next($ipAddresses);
    ++$n):
    ?>
    <?php echo "{$ipAddress->escapedAddress}:{$VAR->server->webserver->httpPort}" ?> \
    <?php endfor; ?>
    >
    
    ServerName roundcube.webmail
    ServerAlias roundcube.webmail.*
    ServerAdmin "<?php echo $VAR->server->admin->email ?>"
    
    Include "<?php echo $domainsBootstrap ?>"
    <?php if (!file_exists($domainsBootstrap)) {
    $writer = new Template_Writer_Apache($domainsBootstrap);
    $writer->write(Template_Bootstrap_Apache::WARNING_MESSAGE);
    }
    ?>
    UseCanonicalName Off
    
    DocumentRoot "<?php echo $hordeDocroot ?>"
    
    <?php echo $VAR->includeTemplate('domain/PCI_compliance.php') ?>
    
    <Directory "<?php echo $hordeDocroot ?>">
    <?php if ($modPHPAvailiable): ?>
    <IfModule <?php echo $VAR->server->webserver->apache->php4ModuleName ?>>
    php_admin_flag engine on
    php_admin_flag magic_quotes_gpc off
    php_admin_flag safe_mode off
    
    php_admin_value upload_tmp_dir "/tmp/"
    php_admin_value open_basedir "<?php
    echo "$hordeDocroot:/tmp/:/var/tmp/" ?>"
    
    </IfModule>
    
    <IfModule mod_php5.c>
    php_admin_flag engine on
    php_admin_flag magic_quotes_gpc off
    php_admin_flag safe_mode off
    
    php_admin_value upload_tmp_dir "/tmp/"
    php_admin_value open_basedir "<?php
    echo "$hordeDocroot:/tmp/:/var/tmp/" ?>"
    </IfModule>
    <?php else: ?>
    
    SetHandler None
    AddHandler php-script .php
    Options +ExecCGI
    
    <?php endif; ?>
    
    Order allow,deny
    Allow from all
    </Directory>
    </VirtualHost>
    <?php endfor; ?>
    
    <IfModule mod_ssl.c>
    <?php
    for($ipAddress = reset($ipAddresses);
    $ipAddress;
    $ipAddress = next($ipAddresses)):
    ?>
    <?php if ($ipAddress->sslCertificate->ce): ?>
    <VirtualHost \
    <?php echo "{$ipAddress->escapedAddress}:{$VAR->server->webserver->httpsPort}" ?>
    >
    
    ServerName roundcube.webmail
    ServerAlias roundcube.webmail.*
    ServerAdmin "<?php echo $VAR->server->admin->email ?>"
    
    Include "<?php echo $domainsBootstrap ?>"
    
    UseCanonicalName Off
    
    DocumentRoot "<?php echo $hordeDocroot ?>"
    
    SSLEngine on
    SSLVerifyClient none
    SSLCertificateFile "<?php echo $ipAddress->sslCertificate->ceFilePath ?>"
    
    <?php echo $VAR->includeTemplate('domain/PCI_compliance.php') ?>
    
    <Directory "<?php echo $hordeDocroot ?>">
    <?php if ($modPHPAvailiable): ?>
    <IfModule <?php echo $VAR->server->webserver->apache->php4ModuleName ?>>
    php_admin_flag engine on
    php_admin_flag magic_quotes_gpc off
    php_admin_flag safe_mode off
    
    php_admin_value upload_tmp_dir "/tmp/"
    php_admin_value open_basedir "<?php
    echo "$hordeDocroot:/tmp/:/var/tmp/" ?>"
    
    </IfModule>
    
    <IfModule mod_php5.c>
    php_admin_flag engine on
    php_admin_flag magic_quotes_gpc off
    php_admin_flag safe_mode off
    
    php_admin_value upload_tmp_dir "/tmp/"
    php_admin_value open_basedir "<?php
    echo "$hordeDocroot:/tmp/:/var/tmp/" ?>"
    </IfModule>
    <?php else: ?>
    
    SetHandler None
    AddHandler php-script .php
    Options +ExecCGI
    
    <?php endif; ?>
    
    SSLRequireSSL
    Order allow,deny
    Allow from all
    </Directory>
    </VirtualHost>
    <?php endif; ?>
    <?php endfor; ?>
    
    </IfModule>
    [/php]
  4. creiamo la cartella imp all’interno di roundcube:
    mkdir /usr/share/roundcube/imp
  5. creiamo il file /usr/share/roundcube/imp/login.php in cui inseriamo il seguente codice:
    [php]
    <?php
    $user = $_REQUEST["imapuser"];
    header("Location: /?_user=" . $user);
    ?>
    [/php]
  6. rigeneriamo la parte server della configurazione di apache, tramite il comando:
    /opt/psa/admin/sbin/httpdmng --reconfigure-server
  7. facciamo leggere ad apache la nuova configurazione:
    /etc/init.d/apache reload

Adesso dovreste poter raggiungere roundcube all’indirizzo http://webmail.nomedominio.it
(i punti 4 e 5 di questa procedura servono a far funzionare anche i link al client roundcube in corrispondenza a ciascuna casella di posta, all’interno della pagina “posta” in plesk)

Per ritornare alla situazione precedente, con horde al posto di roundcube, basterà cancellare il file /opt/psa/admin/conf/templates/custom/horde.php ed eseguire i punti 6 e 7.