Roundcube

ちょっと試しに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;

参考

タイトルとURLをコピーしました