ちょっと試しにRoundcubeを入れてみた。
環境
- FreeBSD 14.1
- nginx 1.26.1
- Roundcube 1.6.7
- MariaDB 11.4.2
インストールと設定
パッケージインストール
portsからインストール。
# sudo portmaster mail/roundcube
/usr/local/www/roundcube
にインストールされる。
データベース作成
Roundcube用のデータベースを用意する。mysql
コマンドから行う。
# mysql -u root -p
ここではデータベース名をroundcubemail
、管理ユーザをrcadmin@localhost
とする。
root@localhost [(none)]> CREATE USER 'rcadmin'@'localhost';
root@localhost [(none)]> CREATE DATABASE roundcubemail;
root@localhost [(none)]> GRANT ALL PRIVILEGES ON roundcubemail.* TO 'rcadmin'@'localhost' IDENTIFIED BY 'password';
root@localhost [(none)]> QUIT
Roundcubeの初期化スクリプトを実行する。
# mysql -u root -p roundcubemail < /usr/local/www/roundcube/SQL/mysql.initial.sql
Roundcube設定
サンプルファイルをコピーして、設定ファイルを作成する。
# cd /usr/local/www/roundcube/config
# sudo cp config.inc.php.sample config.inc.php
# sudo chown www:www config.inc.php
$config['db_dsnw']
の行を編集し、データベースのユーザ名とパスワードを書き換える。
$config['db_dsnw'] = 'mysql://rcadmin:password@localhost/roundcubemail';
次の行を追加する。
$config['mime_types'] = '/usr/local/etc/nginx/mime.types';
$config['enable_installer'] = true;
PHP設定
databases/php83-pdo_mysql
が必要なので、入っていなければインストールする。
# portmaster databases/php83-pdo_mysql
これが入っていないと、/usr/local/www/roundcube/logs/errors.log
に次のようにエラーが記録される。
[29-Jul-2024 05:49:51 UTC] PHP Fatal error: Uncaught Error: Undefined constant PDO::MYSQL_ATTR_FOUND_ROWS in /usr/local/www/roundcube/program/lib/Roundcube/db/mysql.php:129
/usr/local/etc/php.ini
を編集し、[Pdo_mysql]
セクションのpdo_mysql.default_socket
の値を設定する。
[Pdo_mysql]
pdo_mysql.default_socket=/var/run/mysql/mysql.sock
ソケットの場所を指定しておかないと、/usr/local/www/roundcube/logs/errors.log
に次のようにエラーが記録される。
[29-Jul-2024 06:01:42 +0000]: <ut21154h> DB Error: SQLSTATE[HY000] [2002] No such file or directory in /usr/local/www/roundcube/program/lib/Roundcube/rcube_db.php on line 201 (GET /)
「No such file or directory」がソケットのこと。
nginx設定
/usr/local/etc/nginx/nginx.conf
を編集して、次の行を追加する。
location /webmail {
alias /usr/local/www/roundcube;
# Favicon
location ~ ^/webmail/favicon.ico$ {
root /usr/local/www/skins/elastic/images;
log_not_found off;
access_log off;
expires max;
}
# Robots file
location ~ ^/webmail/robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Deny Protected directories
location ~ ^/webmail/(config|temp|logs)/ {
deny all;
}
location ~ ^/webmail/(README|INSTALL|LICENSE|CHANGELOG|UPGRADING)$ {
deny all;
}
location ~ ^/webmail/(bin|SQL)/ {
deny all;
}
# Hide .md files
location ~ ^/webmail/(.+\.md)$ {
deny all;
}
# Hide all dot files
location ~ ^/webmail/\. {
deny all;
access_log off;
log_not_found off;
}
# Roundcube fastcgi config
location ~ /webmail(/.*\.php)$ {
include fastcgi.conf;
fastcgi_pass unix:/run/php-fpm/php-fpm.sock;
fastcgi_split_path_info ^/webmail/(.+\.php)(/.*)$;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PHP_VALUE open_basedir="/tmp/:/usr/local/www/roundcube:";
}
}
動作確認
ブラウザでアクセスし、Roundcubeのログイン画面が表示されることを確認する。
インストーラ削除
/usr/local/www/roundcube/config/config.inc.php
を編集し、次の行を削除する。
$config['enable_installer'] = true;
参考
- Roundcube (archlinux wiki)
- Roundcube Settings Reference Guide