大家好!SOGo是历史悠久、免费开源的网页邮件与协作系统。和Roundcube, SnappyMail等程序类似,SOGo能够提供网页邮件的收发,联系人和日历管理,SieveScript管理等等多种邮件与协作相关功能,并且拥有现代化的、简介明晰的用户使用界面。很多收费的邮件服务提供商,比如Netcup, 就是使用的SOGo作为自己的网页邮件系统。
和Roundcube/Snappymail等程序不同,SOGo的安装和配置较为复杂。因此,我单独写了一期教程,介绍如何部署SOGo网页邮件系统。
本文作者为香菇肥牛,原文连接为 https://qing.su/article/sogo-webmail-installation-configuration.html, 转载请注明原文链接。谢谢!
1. SOGo的安装
这里,我将使用Ubuntu 24.04操作系统安装SOGo,并且使用MySQL作为SOGo的存储数据库。如果您使用其他版本的操作系统,或者选择使用PostgreSQL,您可以参考官方的安装手册.
完整的SOGo 安装 + MySQL + Nginx需要约600 MB左右的系统内存。建议您使用至少有1 GB内存的VPS. SOGo也可以直接安装在邮件服务器上,同样地,需要预留至少600 MB的空余内存。
在安装SOGo之前,我们首先安装MySQL或者MariaDB,这两者没有显著区别. 如果您习惯使用MariaDB, 可以直接通过apt安装。如果您在邮件服务器上安装SOGo,并且邮件服务器已经装好了MySQL/MariaDB, 那么就可以跳过这一步。
1 | apt-get install mariadb-server -y |
如果您更习惯MySQL,需要首先添加源,再通过apt安装。
1 2 3 4 | wget https://dev.mysql.com/get/mysql-apt-config_0.8.33-1_all.deb dpkg -i mysql*.deb apt-get update -y apt-get install mysql-server -y |
安装MySQL之后,配置默认的安全选项。
1 | mysql_secure_installation |
接下来就可以安装SOGo了。
1 2 3 4 5 6 | wget -O- "https://keys.openpgp.org/vks/v1/by-fingerprint/74FFC6D72B925A34B5D356BDF8A27B36A6E2EAE9" | gpg --dearmor | apt-key add - apt-get update apt-get install apt-transport-https -y echo "deb https://packages.sogo.nu/nightly/5/ubuntu/ noble noble" >> /etc/apt/sources.list.d/SOGo.list apt-get update apt-get install sogo sope4.9-gdl1-mysql -y |
安装好SOGo之后,需要在MySQL中建立对应的账户和数据库。这里,我将建立一个 sogodb 数据库,以及对应的 sogouser 用户和 sogopassword 密码,供SOGo使用。
1 2 3 4 | CREATE DATABASE `sogodb` CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; CREATE USER 'sogouser'@'localhost' IDENTIFIED BY 'sogopassword'; GRANT ALL PRIVILEGES ON `sogodb`.* TO 'sogouser'@'localhost' WITH GRANT OPTION; FLUSH PRIVILEGES; |
然后回到SSH, 在SOGo中设置数据库连接信息。需要注意的是,SOGo使用Unix Socket连接数据库;如果您的数据库用户名和密码中有特殊字符,需要首先转化为对应的URL编码(比如%20这种)。
1 2 3 | defaults -u sogo write sogod OCSFolderInfoURL "mysql://sogouser:sogopassword@localhost:3306/sogodb/sogo_folder_info" defaults -u sogo write sogod SOGoProfileURL "mysql://sogouser:sogopassword@localhost:3306/sogodb/sogo_user_profile" defaults -u sogo write sogod OCSSessionsFolderURL "mysql://sogouser:sogopassword@localhost:3306/sogodb/sogo_sessions_folder" |
最后,重启SOGo
1 | service sogo restart |
这样,我们完成了最基础的SOGo安装和MySQL数据库的初始化。但是,SOGo的配置到这里还远没有结束。我们继续配置其余部分。
2. 安装和配置Nginx反代
第一部分安装完毕的SOGo默认运行于服务器的20000端口。我们需要安装服务器程序来反代。这里,我是用最简单的Nginx来反代;您也可以按照您自己的情况选择Apache, Litespeed, HAProxy, Traefik等程序来配置反代。
首先,安装Nginx和Certbot.
1 | apt-get install nginx python3-certbot-nginx -y |
新建一个配置文件
1 | vi /etc/nginx/conf.d/sogo.conf |
填入下面的配置信息。请注意,将 mail.qing.su 替换为您自己的网页邮箱的域名。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 | server { listen 80 default; server_name mail.qing.su; root /usr/lib/GNUstep/SOGo/WebServerResources/; location = / { rewrite ^ https://$server_name/SOGo; allow all; } location = /principals/ { rewrite ^ https://$server_name/SOGo/dav; allow all; } location ^~/SOGo { proxy_pass http://127.0.0.1:20000; proxy_redirect http://127.0.0.1:20000 default; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header Host $host; proxy_set_header x-webobjects-server-protocol HTTP/1.0; proxy_set_header x-webobjects-remote-host 127.0.0.1; proxy_set_header x-webobjects-server-name $server_name; proxy_set_header x-webobjects-server-url $scheme://$host; proxy_connect_timeout 90; proxy_send_timeout 90; proxy_read_timeout 90; proxy_buffer_size 4k; proxy_buffers 4 32k; proxy_busy_buffers_size 64k; proxy_temp_file_write_size 64k; client_max_body_size 50m; client_body_buffer_size 128k; break; } location /SOGo.woa/WebServerResources/ { alias /usr/lib/GNUstep/SOGo/WebServerResources/; allow all; } location /SOGo/WebServerResources/ { alias /usr/lib/GNUstep/SOGo/WebServerResources/; allow all; } location ^/SOGo/so/ControlPanel/Products/([^/]*)/Resources/(.*)$ { alias /usr/lib/GNUstep/SOGo/$1.SOGo/Resources/$2; } location ^/SOGo/so/ControlPanel/Products/[^/]*UI/Resources/.*\.(jpg|png|gif|css|js)$ { alias /usr/lib/GNUstep/SOGo/$1.SOGo/Resources/$2; } } |
保存退出后,测试配置文件并重新载入Nginx使其生效。
1 2 | nginx -t service nginx reload |
最后,使用Certbot配置SSL安全证书。以域名 mail.qing.su 为例,执行:
1 | certbot --nginx --redirect -d mail.qing.su |
这样,我们就配置好了Nginx反代,并且安装了免费的 Let’s Encrypt SSL 安全证书。
此时,打开网站 https://mail.qing.su, 就能看到SOGo的登录界面了。
当然,到这里,我们仅仅是能打开登录界面而已,还没有办法登录邮箱。我们将继续配置SOGo连接邮件服务器。
3. SOGo的用户验证配置
和Snappymail等程序不同,SOGo不支持将用户验证直接代理给IMAP服务器。因此,我们需要配置目录服务,以支持SOGo用户验证。SOGo支持通过SQL数据库,LDAP, OpenID, SAML2等方式实现用户验证。
这里,我们将以SQL数据库为例,结合自己的Stalwart邮件服务器,配置用户验证。由官方配置文件说明可知,SOGo在调用SQL数据库查询验证的时候会查询下面5个字段:c_uid, c_name, c_password, c_cn, mail. 其中,c_uid和c_name可以相同,作为独立的登录用户名;c_password是密码;c_cn是用户的姓名(或者描述名);mail是用户的邮箱。
接入Stalwart的MySQL用户数据库结构已在前文中详述。具体地看,用户名、邮件、密码等字段存储与 stalwartmail 数据库的两个表 accounts 和 emails 中。因此,最方便的方法是从 stalwartmail 数据库中新建一个View (SQL视图), 用来给SOGo进行登录验证。在MySQL中执行:
1 2 3 4 5 6 7 8 9 10 11 12 | USE stalwartmail; CREATE VIEW sogo_view AS SELECT a.name AS c_uid, a.name AS c_name, a.secret AS c_password, a.description AS c_cn, e.address AS mail FROM accounts a LEFT JOIN emails e ON a.name = e.name AND e.type = 'primary'; |
这样,就新建了一个名为 sogo_view 的SQL视图,用于SOGo的用户验证。
接着,赋予 sogouser 用户访问这个SQL视图的权限。
1 2 | GRANT SELECT ON `stalwartmail`.`sogo_view` TO 'sogouser'@'localhost'; FLUSH PRIVILEGES; |
这样,sogouser 就可以读取 stalwartmail.sogo_view 这个视图的数据了,进行用户登录验证了。
以域名 qing.su 为例,完整的用户登录验证配置如下。
1 2 3 4 5 6 7 8 9 10 | SOGoUserSources = ( { type = sql; id = directory_example.com; viewURL = "mysql://sogousr:sogopassword@127.0.0.1:3306/stalwartmail/sogo_view"; canAuthenticate = YES; isAddressBook = YES; userPasswordAlgorithm = sha512-crypt; } ); |
每一个域名对应一个directory id. 如果您有多个域名,您需要在这里添加多个directory id.
4. 完整SOGo配置
作为功能完备的Webmail, 除了用户验证外,我们还需要配置SMTP, IMAP, Sieve服务器等信息。以我试用的Stalwart邮件服务器为例,假设服务器地址为 mx.qing.su , SMTP服务器配置:
1 2 3 | SOGoMailingMechanism = smtp; SOGoSMTPServer = "smtps://mx.qing.su:465"; SOGoSMTPAuthenticationType = PLAIN; |
IMAP服务器配置:
1 | SOGoIMAPServer = "smtps://mx.qing.su:993"; |
Sieve服务器配置:
1 2 | SOGoSieveScriptsEnabled = YES; SOGoSieveServer = "sieve://mx.qing.su:4190/?tls=YES"; |
其他的各类配置您可以自行参考官方文档 (https://www.sogo.nu/files/docs/SOGoInstallationGuide.pdf)。
以下是我的完整的SOGo配置文件 /etc/sogo/sogo.conf.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 | { SOGoProfileURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_user_profile"; OCSFolderInfoURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_folder_info"; OCSSessionsFolderURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_sessions_folder"; OCSAdminURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_admin"; SOGoSuperUsernames = ("postmaster@qing.su"); OCSEMailAlarmsFolderURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_alarms_folder"; OCSStoreURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_store"; OCSAclURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_acl"; OCSCacheFolderURL = "mysql://sogouser:sogopasswd@localhost:3306/sogodb/sogo_cache_folder"; SOGoAppointmentSendEMailNotifications = YES; SOGoCalendarDefaultRoles = ( PublicViewer, ConfidentialDAndTViewer ); SOGoLanguage = English; SOGoTimeZone = America/Los_Angeles; SOGoMailDomain = qing.su; SOGoIMAPServer = "smtps://mx.qing.su:993"; SOGoDraftsFolderName = Drafts; SOGoSentFolderName = Sent; SOGoTrashFolderName = Trash; SOGoJunkFolderName = Junk; SOGoMailingMechanism = smtp; SOGoSMTPServer = "smtps://mx.qing.su:465"; SOGoSMTPAuthenticationType = PLAIN; SOGoUserSources = ( { type = sql; id = sql_directory_qing.su; viewURL = "mysql://sogouser:sogopasswd@localhost:3306/stalwartmail/sogo_view"; canAuthenticate = YES; isAddressBook = YES; displayName = "Contacts"; userPasswordAlgorithm = sha512-crypt; } ); SOGoSieveScriptsEnabled = YES; SOGoSieveServer = "sieve://mx.qing.su:4190/?tls=YES"; WOWorkersCount = 15; SOGoMaximumPingInterval = 3540; SOGoMaximumSyncInterval = 3540; SOGoInternalSyncInterval = 30; } |
配置完毕后,重启sogo服务器。
1 | service sogo restart |
这样,我们就可以登录并使用SOGo网页邮件啦!
至此,我们完整地安装好了SOGo网页邮件系统,使用Nginx配置了反代,并且配置了SOGo SQL用户验证和各类服务器信息,可以使用网页邮箱来收发邮件了。
如果您有任何疑问,欢迎在这里留言,我将尽力解答。
本文作者为香菇肥牛,原文连接为 https://qing.su/article/sogo-webmail-installation-configuration.html, 转载请注明原文链接。谢谢!
历害。