如何在 Ubuntu 22.04 上安装 Rainloop Webmail
本教程适用于这些操作系统版本
- Ubuntu 22.04(果酱水母)
- Ubuntu 18.04(仿生海狸)
在此页
- 先决条件
- 第 1 步 - 配置防火墙
- 第 2 步 - 安装 Nginx
- 第 3 步 - 安装和配置 PHP
- 第 4 步 - 安装 MySQL
- 第 5 步 - 配置 MySQL
- 第 6 步 - 安装 Rainloop
- 第 7 步 - 安装 SSL
- 第 8 步 - 配置 Nginx
- 第 9 步 - 配置和访问 Rainloop
- 结论
Rainloop 是一个开源的、基于 Web 的电子邮件客户端,用 PHP 编写。它速度快、轻量级,并支持 SMTP 和 IMAP 协议。
本指南将教您在 Ubuntu 22.04 服务器上安装 Rainloop 客户端。
先决条件
-
A server running Ubuntu 22.04.
-
A domain name pointing to the server. For our tutorial, we will use the
rainloop.example.com
domain. -
A non-root user with sudo privileges.
-
Make sure everything is updated.
$ sudo apt update && sudo apt upgrade
-
Install basic utility packages. Some of them may already be installed.
$ sudo apt install wget curl nano unzip -y
第 1 步 - 配置防火墙
安装 Rainloop 之前的第一步是配置防火墙。检查防火墙的状态。
$ sudo ufw status
您应该会看到如下内容。
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
Rainloop 需要 HTTP 和 HTTPs 端口才能运行。
$ sudo ufw allow http
$ sudo ufw allow https
为您使用的邮件帐户打开端口。
$ sudo ufw allow 587/tcp
$ sudo ufw allow 993/tcp
$ sudo ufw allow 465/tcp
再次检查状态以确认。
$ sudo ufw status
Status: active
To Action From
-- ------ ----
OpenSSH ALLOW Anywhere
80/tcp ALLOW Anywhere
443 ALLOW Anywhere
587/tcp ALLOW Anywhere
993/tcp ALLOW Anywhere
465/tcp ALLOW Anywhere
OpenSSH (v6) ALLOW Anywhere (v6)
80/tcp (v6) ALLOW Anywhere (v6)
443 (v6) ALLOW Anywhere (v6)
587/tcp (v6) ALLOW Anywhere (v6)
993/tcp (v6) ALLOW Anywhere (v6)
465/tcp (v6) ALLOW Anywhere (v6)
第 2 步 - 安装 Nginx
Ubuntu 22.04 附带旧版本的 Nginx。要安装最新版本,您需要下载官方 Nginx 存储库。
导入 Nginx 签名密钥。
$ curl https://nginx.org/keys/nginx_signing.key | gpg --dearmor \
| sudo tee /usr/share/keyrings/nginx-archive-keyring.gpg >/dev/null
添加 Nginx 稳定版本的存储库。
$ echo "deb [signed-by=/usr/share/keyrings/nginx-archive-keyring.gpg arch=amd64] \
http://nginx.org/packages/ubuntu `lsb_release -cs` nginx" \
| sudo tee /etc/apt/sources.list.d/nginx.list
更新系统存储库。
$ sudo apt update
安装 Nginx。
$ sudo apt install nginx
验证安装。
$ nginx -v
nginx version: nginx/1.22.0
第 3 步 - 安装和配置 PHP
默认情况下,Ubuntu 22.04 附带 PHP 8.1。但要使 Rainloop 正常工作,我们需要安装 PHP 8.0。第一步是添加 Ondrejs PHP 存储库。
$ sudo add-apt-repository ppa:ondrej/php
安装 PHP 和 Rainloop 所需的扩展。
$ sudo dnf install php8.0-fpm php8.0-curl php8.0-mbstring php8.0-mysql php8.0-xml php8.0-cli
验证安装。
$ php --version
PHP 8.0.20 (cli) (built: Jun 25 2022 08:12:05) ( NTS )
Copyright (c) The PHP Group
Zend Engine v4.0.20, Copyright (c) Zend Technologies
with Zend OPcache v8.0.20, Copyright (c), by Zend Technologies
检查 PHP 服务的状态。
$ sudo systemctl status php8.0-fpm
? php8.0-fpm.service - The PHP 8.0 FastCGI Process Manager
Loaded: loaded (/lib/systemd/system/php8.0-fpm.service; enabled; vendor preset: enabled)
Active: active (running) since Mon 2022-07-04 01:52:55 UTC; 1min 22s ago
Docs: man:php-fpm8.0(8)
Process: 12463 ExecStartPost=/usr/lib/php/php-fpm-socket-helper install /run/php/php-fpm.sock /etc/php/8.0/fpm/pool.d/www.conf 80 (code=exited, status=0/SUCCESS)
Main PID: 12460 (php-fpm8.0)
Status: "Processes active: 0, idle: 2, Requests: 0, slow: 0, Traffic: 0req/sec"
Tasks: 3 (limit: 2241)
Memory: 8.7M
CPU: 89ms
CGroup: /system.slice/php8.0-fpm.service
??12460 "php-fpm: master process (/etc/php/8.0/fpm/php-fpm.conf)
打开 php.ini
文件进行编辑。
$ sudo nano /etc/php/8.0/fpm/php.ini
更改以下变量的值以将邮件附件大小设置为 25MB。
upload_max_filesize = 25M
post_max_size = 25M
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
打开文件 /etc/php/8.0/fpm/pool.d/www.conf
。
$ sudo nano /etc/php/8.0/fpm/pool.d/www.conf
找到文件中的 user=apache
和 group=apache
行并按如下方式更改它们。
...
; Unix user/group of processes
; Note: The user is mandatory. If the group is not set, the default user's group
; will be used.
; RPM: apache user chosen to provide access to the same directories as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx
...
此外,找到行 listen.owner=www-data
和 listen.group=www-data
并按如下方式更改它们。
...
; Set permissions for unix socket, if one is used. In Linux, read/write
; permissions must be set in order to allow connections from a web server. Many
; BSD-derived systems allow connections regardless of permissions. The owner
; and group can be specified either by name or by their numeric IDs.
; Default Values: user and group are set as the running user
; mode is set to 0660
listen.owner = nginx
listen.group = nginx
...
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
重新启动 PHP-FPM 服务。
$ sudo systemctl restart php8.0-fpm
第 4 步 - 安装 MySQL
Ubuntu 22.04 附带最新版本的 MySQL。您可以使用单个命令安装它。
$ sudo apt install mysql-server
检查MySQL的版本。
$ mysql --version
mysql Ver 8.0.29-0ubuntu0.22.04.2 for Linux on x86_64 ((Ubuntu))
此步骤对于 MySQL 8.0.28 及以上版本是必需的。进入 MySQL 外壳。
$ sudo mysql
运行以下命令为您的 root 用户设置密码。确保它混合了数字、大写字母、小写字母和特殊字符。
mysql> ALTER USER 'root'@'localhost' IDENTIFIED WITH mysql_native_password BY 'YourPassword12!';
退出外壳。
mysql> exit
运行 MySQL 安全安装脚本。
$ sudo mysql_secure_installation
首先,系统会要求您输入 root 密码。输入它。接下来,系统将要求您安装验证密码组件。它检查 MySQL 中使用的密码强度。按 Y 进行安装。
接下来,系统将要求您设置密码验证策略的级别。选择 2,因为它是最强的。
接下来,按 N 拒绝更改您的 root 密码。此外,按 Y 删除匿名用户、禁止远程 root 登录、删除测试数据库并重新加载权限表。
第 5 步 - 配置 MySQL
登录到 MySQL 外壳。出现提示时输入您的根密码。
$ sudo mysql -u root -p
为 Rainloop 创建一个数据库。
mysql> CREATE DATABASE rainloop;
创建一个 SQL 用户来访问数据库。将 yourpassword
替换为您选择的密码。
mysql> CREATE USER 'rainuser'@'localhost' IDENTIFIED BY 'YourPassword23!';
授予 rainuser
访问数据库的权限。
mysql> GRANT ALL ON rainloop.* TO 'rainuser'@'localhost';
重新加载权限表。
mysql> FLUSH PRIVILEGES;
退出外壳。
mysql> exit
第 6 步 - 安装 Rainloop
为 Rainloop 创建公共目录。
$ sudo mkdir /var/www/html/rainloop -p
下载最新版本的 Rainloop。
$ wget http://www.rainloop.net/repository/webmail/rainloop-community-latest.zip
将下载的文件解压到公共目录。
$ sudo unzip rainloop-community-latest.zip -d /var/www/html/rainloop
将目录的所有权更改为 Nginx。
$ sudo chown -R nginx:nginx /var/www/html/rainloop
设置 Rainloop 需要的读写权限。
$ sudo find /var/www/html/rainloop -type d -exec chmod 755 {} \;
$ sudo find /var/www/html/rainloop -type f -exec chmod 644 {} \;
第 7 步 - 安装 SSL
我们需要安装 Certbot 来生成 Lets Encrypt 提供的免费 SSL 证书。
您可以使用 Ubuntu 存储库安装 Certbot,也可以使用 Snapd 工具获取最新版本。我们将使用 Snapd 版本。
Ubuntu 22.04 默认安装了 Snapd。运行以下命令以确保您的 Snapd 版本是最新的。
$ sudo snap install core
安装 Certbot。
$ sudo snap install --classic certbot
使用以下命令通过创建指向 /usr/bin
目录的符号链接来确保可以运行 Certbot 命令。
$ sudo ln -s /snap/bin/certbot /usr/bin/certbot
为 Rainloop 生成 SSL 证书。
$ sudo certbot certonly --standalone --agree-tos --no-eff-email --staple-ocsp --preferred-challenges http -m -d rainloop.example.com
生成 Diffie-Hellman 组证书。
$ sudo openssl dhparam -out /etc/ssl/certs/dhparam.pem 4096
打开文件 /etc/letsencrypt/renewal/rainloop.example.com.conf
进行编辑。
$ sudo nano /etc/letsencrypt/renewal/rainloop.example.com.conf
在底部粘贴以下代码。
pre_hook = systemctl stop nginx
post_hook = systemctl start nginx
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
我们使用 Certbot 的独立选项生成了 SSL 证书。它运行其 Web 服务器来创建证书,这意味着 Nginx 应该在续订期间关闭。 pre_hook 和 post_hook 命令在续费前后运行,自动关闭和重启 Nginx 服务器,无需人工干预。
要检查 SSL 续订是否正常工作,请试运行该过程。
$ sudo certbot renew --dry-run
如果您没有看到任何错误,则一切就绪。您的证书将自动更新。
第 8 步 - 配置 Nginx
打开文件 nginx.conf
进行编辑。
$ sudo nano /etc/nginx/nginx.conf
找到行 include /etc/nginx/conf.d/*.conf;
并将以下代码粘贴到它下面。
server_names_hash_bucket_size 64;
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
为 Nginx 创建 Rainloop 配置文件并打开它进行编辑。
$ sudo nano /etc/nginx/conf.d/rainloop.conf
将以下代码粘贴到其中。
server {
listen 443 ssl http2;
listen [::]:443 ssl http2;
server_name rainloop.example.com;
root /var/www/html/rainloop;
index index.php;
client_max_body_size 25M;
access_log /var/log/nginx/rainloop.access.log;
error_log /var/log/nginx/rainloop.error.log;
ssl_certificate /etc/letsencrypt/live/rainloop.example.com/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/rainloop.example.com/privkey.pem;
ssl_trusted_certificate /etc/letsencrypt/live/rainloop.example.com/chain.pem;
ssl_session_timeout 5m;
ssl_session_cache shared:MozSSL:10m;
ssl_session_tickets off;
ssl_protocols TLSv1.2 TLSv1.3;
ssl_prefer_server_ciphers on;
ssl_ciphers ECDHE-ECDSA-AES128-GCM-SHA256:ECDHE-RSA-AES128-GCM-SHA256:ECDHE-ECDSA-AES256-GCM-SHA384:ECDHE-RSA-AES256-GCM-SHA384:ECDHE-ECDSA-CHACHA20-POLY1305:ECDHE-RSA-CHACHA20-POLY1305:DHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384;
ssl_ecdh_curve X25519:prime256v1:secp384r1:secp521r1;
ssl_stapling on;
ssl_stapling_verify on;
ssl_dhparam /etc/ssl/certs/dhparam.pem;
location / {
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_index index.php;
fastcgi_split_path_info ^(.+\.php)(.*)$;
fastcgi_keep_conn on;
include fastcgi_params;
fastcgi_pass unix:/run/php/php8.0-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}
location ~ /\.ht {
deny all;
}
location ^~ /data {
deny all;
}
}
# enforce HTTPS
server {
listen 80;
listen [::]:80;
server_name rainloop.example.com;
return 301 https://$host$request_uri;
}
通过按 Ctrl + X 并在出现提示时输入 Y 来保存文件。
验证 Nginx 配置语法。
$ sudo nginx -t
重启 Nginx 服务。
$ sudo systemctl restart nginx
第 9 步 - 配置和访问 Rainloop
通过 URL https://rainloop.example.com/?admin
打开 Rainloops 管理员页面,您将看到以下登录屏幕。

输入以下凭据,然后按 enter 键登录。
Username: admin
Password: 12345
Rainloop 管理员仪表板将打开并显示一条警告,要求您更改默认密码。

使用仪表板中的链接更改默认密码。

输入您的新密码,然后单击“更新密码”按钮继续。
Rainloop 使用 MySQL 来存储联系信息。打开联系人页面并从下拉菜单中选择 MySQL。

输入之前创建的数据库凭据。

按测试按钮检查连接并安装表格。如果按钮变为绿色,则表示连接成功。
您可以通过添加您的邮件帐户来开始使用 Rainloop。
结论
您已在 Ubuntu 22.04 服务器上成功安装 Rainloop。如果您有任何问题,请在下面的评论中发表。