|
|
|
INTRODUCTION
|
|
|
|
============
|
|
|
|
|
|
|
|
This file describes the basic steps to install Roundcube Webmail on your
|
|
|
|
web server. For additional information, please also consult the project's
|
|
|
|
wiki page at https://github.com/roundcube/roundcubemail/wiki
|
|
|
|
|
|
|
|
|
|
|
|
REQUIREMENTS
|
|
|
|
============
|
|
|
|
|
|
|
|
* An IMAP, HTTP and SMTP server
|
|
|
|
* .htaccess support allowing overrides for DirectoryIndex
|
|
|
|
* PHP Version 5.4 or greater including:
|
|
|
|
- PCRE, DOM, JSON, Session, Sockets, OpenSSL, Mbstring (required)
|
|
|
|
- PHP PDO with driver for either MySQL, PostgreSQL, SQL Server, Oracle or SQLite (required)
|
|
|
|
- Iconv, Zip, Fileinfo, Intl, Exif (recommended)
|
|
|
|
- LDAP for LDAP addressbook support (optional)
|
|
|
|
* PEAR and PEAR packages distributed with Roundcube or external:
|
|
|
|
- Mail_Mime 1.10.0 or newer
|
|
|
|
- Net_SMTP 1.7.1 or newer
|
|
|
|
- Net_Socket 1.0.12 or newer
|
|
|
|
- Net_IDNA2 0.1.1 or newer
|
|
|
|
- Auth_SASL 1.0.6 or newer
|
|
|
|
- Net_Sieve 1.3.2 or newer (for managesieve plugin)
|
|
|
|
- Crypt_GPG 1.6.0 or newer (for enigma plugin)
|
|
|
|
- Endroid/QrCode 1.6.0 or newer (https://github.com/endroid/QrCode)
|
|
|
|
* php.ini options (see .htaccess file):
|
|
|
|
- error_reporting E_ALL & ~E_NOTICE & ~E_STRICT
|
|
|
|
- memory_limit > 16MB (increase as suitable to support large attachments)
|
|
|
|
- file_uploads enabled (for attachment upload features)
|
|
|
|
- session.auto_start disabled
|
|
|
|
- suhosin.session.encrypt disabled
|
|
|
|
- mbstring.func_overload disabled
|
|
|
|
* A MySQL, PostgreSQL, MS SQL Server (2005 or newer), Oracle database
|
|
|
|
or SQLite support in PHP - with permission to create tables
|
|
|
|
* Composer installed either locally or globally (https://getcomposer.org)
|
|
|
|
|
|
|
|
|
|
|
|
INSTALLATION
|
|
|
|
============
|
|
|
|
|
|
|
|
1. Decompress and put this folder somewhere inside your document root
|
|
|
|
2. Install dependencies using composer:
|
|
|
|
- get composer from https://getcomposer.org/download/
|
|
|
|
- rename the composer.json-dist file into composer.json
|
|
|
|
- if you want to use LDAP address books, enable the LDAP libraries in your
|
|
|
|
composer.json file by moving the items from "suggest" to the "require"
|
|
|
|
section (remove the explanation texts after the version!).
|
|
|
|
- run `php composer.phar install --no-dev`
|
|
|
|
3. Make sure that the following directories (and the files within)
|
|
|
|
are writable by the webserver
|
|
|
|
- /temp
|
|
|
|
- /logs
|
|
|
|
4. Create a new database and a database user for Roundcube (see DATABASE SETUP)
|
|
|
|
5. Point your browser to http://url-to-roundcube/installer/
|
|
|
|
6. Follow the instructions of the install script (or see MANUAL CONFIGURATION)
|
|
|
|
7. After creating and testing the configuration, remove the installer directory
|
|
|
|
8. Check Known Issues section of this file
|
|
|
|
|
|
|
|
|
|
|
|
CONFIGURATION HINTS
|
|
|
|
===================
|
|
|
|
|
|
|
|
IMPORTANT! Read all comments in defaults.inc.php, understand them
|
|
|
|
and configure your installation to be not surprised by default behaviour.
|
|
|
|
|
|
|
|
Roundcube writes internal errors to the 'errors' log file located in the logs
|
|
|
|
directory which can be configured in config/config.inc.php. If you want ordinary
|
|
|
|
PHP errors to be logged there as well, enable the 'php_value error_log' line
|
|
|
|
in the .htaccess file and set the path to the log file accordingly.
|
|
|
|
|
|
|
|
By default the session_path settings of PHP are not modified by Roundcube.
|
|
|
|
However if you want to limit the session cookies to the directory where
|
|
|
|
Roundcube resides you can uncomment and configure the according line
|
|
|
|
in the .htaccess file.
|
|
|
|
|
|
|
|
|
|
|
|
DATABASE SETUP
|
|
|
|
==============
|
|
|
|
|
|
|
|
Note: Database for Roundcube must use UTF-8 character set.
|
|
|
|
Note: See defaults.inc.php file for examples of DSN configuration.
|
|
|
|
|
|
|
|
* MySQL
|
|
|
|
-------
|
|
|
|
Setting up the mysql database can be done by creating an empty database,
|
|
|
|
importing the table layout and granting the proper permissions to the
|
|
|
|
roundcube user. Here is an example of that procedure:
|
|
|
|
|
|
|
|
# mysql
|
|
|
|
> CREATE DATABASE roundcubemail /*!40101 CHARACTER SET utf8 COLLATE utf8_general_ci */;
|
|
|
|
> GRANT ALL PRIVILEGES ON roundcubemail.* TO roundcube@localhost
|
|
|
|
IDENTIFIED BY 'password';
|
|
|
|
> quit
|
|
|
|
|
|
|
|
# mysql roundcubemail < SQL/mysql.initial.sql
|
|
|
|
|
|
|
|
Note 1: 'password' is the master password for the roundcube user. It is strongly
|
|
|
|
recommended you replace this with a more secure password. Please keep in
|
|
|
|
mind: You need to specify this password later in 'config/db.inc.php'.
|
|
|
|
|
|
|
|
|
|
|
|
* SQLite
|
|
|
|
--------
|
|
|
|
Versions of sqlite database engine older than 3 aren't supported.
|
|
|
|
Database file and structure is created automatically by Roundcube.
|
|
|
|
Make sure your configuration points to some file location and that the
|
|
|
|
webserver can write to the file and the directory containing the file.
|
|
|
|
|
|
|
|
|
|
|
|
* PostgreSQL
|
|
|
|
------------
|
|
|
|
To use Roundcube with PostgreSQL support you have to follow these
|
|
|
|
simple steps, which have to be done as the postgres system user (or
|
|
|
|
which ever is the database superuser):
|
|
|
|
|
|
|
|
$ createuser -P roundcube
|
|
|
|
$ createdb -O roundcube -E UNICODE roundcubemail
|
|
|
|
$ psql -U roundcube -f SQL/postgres.initial.sql roundcubemail
|
|
|
|
|
|
|
|
Note: in some system configurations you might need to add '-U postgres' to
|
|
|
|
createuser and createdb commands.
|
|
|
|
|
|
|
|
|
|
|
|
* Microsoft SQL Server
|
|
|
|
----------------------
|
|
|
|
Language/locale of the database must be set to us_english (1033). More info
|
|
|
|
on this at https://github.com/roundcube/roundcubemail/issues/4078.
|
|
|
|
|
|
|
|
|
|
|
|
Database cleaning
|
|
|
|
-----------------
|
|
|
|
To keep your database slick and clean we recommend to periodically execute
|
|
|
|
bin/cleandb.sh which finally removes all records that are marked as deleted.
|
|
|
|
Best solution is to install a cronjob running this script daily.
|
|
|
|
|
|
|
|
|
|
|
|
MANUAL CONFIGURATION
|
|
|
|
====================
|
|
|
|
|
|
|
|
First of all, copy the sample configuration file config/config.inc.php.sample
|
|
|
|
to config/config.inc.php and make the necessary adjustments according to your
|
|
|
|
environment and your needs. More configuration options can be copied from the
|
|
|
|
config/defaults.inc.php file into your local config.inc.php file as needed.
|
|
|
|
Read the comments above the individual configuration options to find out what
|
|
|
|
they do or read https://github.com/roundcube/roundcubemail/wiki/Installation
|
|
|
|
for even more guidance.
|
|
|
|
|
|
|
|
You can also modify the default .htaccess file. This is necessary to
|
|
|
|
increase the allowed size of file attachments, for example:
|
|
|
|
php_value upload_max_filesize 2M
|
|
|
|
|
|
|
|
|
|
|
|
SECURE YOUR INSTALLATION
|
|
|
|
========================
|
|
|
|
|
|
|
|
Access through the webserver to the following directories should be denied:
|
|
|
|
|
|
|
|
/config
|
|
|
|
/temp
|
|
|
|
/logs
|
|
|
|
|
|
|
|
Roundcube uses .htaccess files to protect these directories, so be sure to
|
|
|
|
allow override of the Limit directives to get them taken into account. The
|
|
|
|
package also ships a .htaccess file in the root directory which defines some
|
|
|
|
rewrite rules. In order to properly secure your installation, please enable
|
|
|
|
mod_rewrite for Apache webserver and double check access to the above listed
|
|
|
|
directories and their contents is denied.
|
|
|
|
|
|
|
|
NOTE: In Apache 2.4, support for .htaccess files has been disabled by
|
|
|
|
default. Therefore you first need to enable this in your Apache main or
|
|
|
|
virtual host config by with:
|
|
|
|
|
|
|
|
AllowOverride all
|
|
|
|
|
|
|
|
|
|
|
|
UPGRADING
|
|
|
|
=========
|
|
|
|
|
|
|
|
If you already have a previous version of Roundcube installed,
|
|
|
|
please refer to the instructions in UPGRADING guide.
|
|
|
|
|
|
|
|
|
|
|
|
OPTIMISING
|
|
|
|
==========
|
|
|
|
|
|
|
|
There are two forms of optimisation here, compression and caching, both aimed
|
|
|
|
at increasing an end user's experience using Roundcube Webmail. Compression
|
|
|
|
allows the static web pages to be delivered with less bandwidth. The index.php
|
|
|
|
of Roundcube Webmail already enables compression on its output. The settings
|
|
|
|
below allow compression to occur for all static files. Caching sets HTTP
|
|
|
|
response headers that enable a user's web client to understand what is static
|
|
|
|
and how to cache it.
|
|
|
|
|
|
|
|
The caching directives used are:
|
|
|
|
* Etags - sets at tag so the client can request is the page has changed
|
|
|
|
* Cache-control - defines the age of the page and that the page is 'public'
|
|
|
|
This enables clients to cache javascript files that don't have private
|
|
|
|
information between sessions even if using HTTPS. It also allows proxies
|
|
|
|
to share the same cached page between users.
|
|
|
|
* Expires - provides another hint to increase the lifetime of static pages.
|
|
|
|
|
|
|
|
For more information refer to RFC 2616.
|
|
|
|
|
|
|
|
Side effects:
|
|
|
|
-------------
|
|
|
|
These directives are designed for production use. If you are using this in
|
|
|
|
a development environment you may get horribly confused if your webclient
|
|
|
|
is caching stuff that you changed on the server. Disabling the expires
|
|
|
|
parts below should save you some grief.
|
|
|
|
|
|
|
|
If you are changing the skins, it is recommended that you copy content to
|
|
|
|
a different directory apart from 'default'.
|
|
|
|
|
|
|
|
Apache:
|
|
|
|
-------
|
|
|
|
To enable these features in apache the following modules need to be enabled:
|
|
|
|
* mod_deflate
|
|
|
|
* mod_expires
|
|
|
|
* mod_headers
|
|
|
|
|
|
|
|
The optimisation is already included in the .htaccess file in the top
|
|
|
|
directory of your installation.
|
|
|
|
|
|
|
|
If you are using Apache version 2.2.9 and later, in the .htaccess file
|
|
|
|
change the 'append' word to 'merge' for a more correct response. Keeping
|
|
|
|
as 'append' shouldn't cause any problems though changing to merge will
|
|
|
|
eliminate the possibility of duplicate 'public' headers in Cache-control.
|
|
|
|
|
|
|
|
Lighttpd:
|
|
|
|
---------
|
|
|
|
With Lightty the addition of Expire: tags by mod_expire is incompatible with
|
|
|
|
the addition of "Cache-control: public". Using Cache-control 'public' is
|
|
|
|
used below as it is assumed to give a better caching result.
|
|
|
|
|
|
|
|
Enable modules in server.modules:
|
|
|
|
"mod_setenv"
|
|
|
|
"mod_compress"
|
|
|
|
|
|
|
|
Mod_compress is a server side cache of compressed files to improve its performance.
|
|
|
|
|
|
|
|
$HTTP["host"] == "www.example.com" {
|
|
|
|
|
|
|
|
static-file.etags = "enable"
|
|
|
|
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Etag.use-mtimeDetails
|
|
|
|
etag.use-mtime = "enable"
|
|
|
|
|
|
|
|
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModSetEnv
|
|
|
|
$HTTP["url"] =~ "^/roundcubemail/(plugins|skins|program)" {
|
|
|
|
setenv.add-response-header = ( "Cache-Control" => "public, max-age=2592000")
|
|
|
|
}
|
|
|
|
|
|
|
|
# http://redmine.lighttpd.net/projects/lighttpd/wiki/Docs:ModCompress
|
|
|
|
# set compress.cache-dir to somewhere outside the docroot.
|
|
|
|
compress.cache-dir = var.statedir + "/cache/compress"
|
|
|
|
|
|
|
|
compress.filetype = ("text/plain", "text/html", "text/javascript", "text/css", "text/xml", "image/gif", "image/png")
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
|
|
KNOWN ISSUES
|
|
|
|
============
|
|
|
|
|
|
|
|
Installations with uw-imap server should set imap_disabled_caps = array('ESEARCH')
|
|
|
|
in main configuration file. ESEARCH implementation in this server is broken (#1489184).
|