Postfix+Dovecot+Roundcube开源邮件系统搭建系列1-2:系统搭建目标+MariaDB数据库配置(MySQL)

1. 系统搭建目标

通过本系列文章,最终可以部署一套提供如下服务的邮件系统:

  • SMTP服务:由Postfix提供,监听25、465、587端口。
  • POP3服务:由Dovecot提供,监听110、995端口。
  • IMAP服务:由Dovecot提供,监听143、993端口。
  • WebMail服务:由Roundcube提供。通过Nginx+PHP的组合运行web服务,监听80、443端口。

2. 开源组件列表

由于开源软件的配置与相关组件的版本有很大关系,不同版本配置可能略有不同,在配置过程中需要仔细甄别。本系列文章涉及的相关组件版本如下:

  • 操作系统:Rocky Linux release 8.6 (Green Obsidian)
  • Postfix:3.5.8
  • Dovecot:2.3.16
  • Roundcube:1.6.7
  • PHP:8.3
  • MariaDB:10.6.18
  • Nginx:1.14.1

3. 注意事项

如您参考本系列文章进行测试、安装,需要注意如下事项:

  • 本系列文章参考了商业邮件系统的相关安全配置,在测试过程中非必需,请根据个人需要进行取舍。
  • 涉及配置文件编辑部分均采用vi编辑器,根据个人喜好,您也可以选择nano等,下文不再强调说明。
  • 本系列文章中以mailab.cn域名为例,凡是涉及该域名的地方请自行修改为您需要的域名。
  • 本系列文中中涉及SSL证书。如果需要申请证书,可以到相关证书机构咨询,也可以参考ACME进行证书自动化续期。本文将不再详述如何申请SSL证书。
  • 如果需要与站外进行发信测试,还需要涉及域名的MX记录配置。
  • 本系列文章适用于对Linux系统、电子邮件服务有一定了解的用户。即使您具备这方面知识,在配置过程中难免还是会遇到各种问题,请保持耐心。

4. MariaDB数据库配置(MySQL)

4.1 背景信息

为了模拟真实的使用场景,邮件用户采用虚拟用户(区别于采用操作系统账号方式),用户信息存储在数据库中。数据库采用MariaDB(和mysql几乎相同)。

4.2 MariaDB数据库安装

关于MariaDB数据库安装方案在此不做赘述,可以参考其他文章处理。

启动数据库:

systemctl start mariadb
systemctl enable mariadb

进入数据库:

mysql -u root

设置数据库root账户密码:

alter user root@localhost identified via mysql_native_password using password('admin@123');

4.3 创建数据库

建立为Postfix提供访问权限的数据库、及授权账户,数据库名称、账户名称可以自行定义。

/* 创建数据库,名称可以自定义 */
create database maildb;

/* 授权mailuser用户对maildb数据库select权限,并设置密码*/
GRANT SELECT ON maildb.* TO 'mailuser'@'127.0.0.1' IDENTIFIED BY 'admin@123';
FLUSH PRIVILEGES;

4.4 初始化数据表

/* 域名表 */
CREATE TABLE `vt_domain` (
`id`  INT NOT NULL AUTO_INCREMENT,
`name` VARCHAR(50) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/* 虚拟用户表 */
CREATE TABLE `vt_user` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`password` VARCHAR(106) NOT NULL,
`email` VARCHAR(120) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY `email` (`email`),
FOREIGN KEY (domain_id) REFERENCES vt_domain(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

/* 别名表 */
CREATE TABLE `vt_alias` (
`id` INT NOT NULL AUTO_INCREMENT,
`domain_id` INT NOT NULL,
`source` varchar(100) NOT NULL,
`destination` varchar(100) NOT NULL,
PRIMARY KEY (`id`),
FOREIGN KEY (domain_id) REFERENCES vt_domain(id) ON DELETE CASCADE
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

4.5 初始化虚拟用户数据

初始化部分用户数据,方便后续测试:

/* 新增两个域名 */
INSERT INTO `maildb`.`vt_domain`
(`id` ,`name`)
VALUES
('1', 'mailabc.cn'),
('2', 'mail.mailabc.cn');

/* 新增两个虚拟账号,并设置密码为admin@123, 这里的密码做了加密处理,如需使用其他加密方式可以查询官方文档 */
INSERT INTO `maildb`.`vt_user`
(`id`, `domain_id`, `password` , `email`)
VALUES
('1', '1', ENCRYPT('admin@123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'admin@mailabc.cn'),
('2', '1', ENCRYPT('admin@123', CONCAT('$6$', SUBSTRING(SHA(RAND()), -16))), 'dmarck-reports@mailabc.cn');

/* 新增一个别名账号,本文用不到,直接借鉴的其他文档设置,后续文章再研究具体用法 */
INSERT INTO `maildb`.`vt_alias`
(`id`, `domain_id`, `source`, `destination`)
VALUES
('1', '1', 'postmaster@mailabc.cn', 'admin@mailabc.cn');

至此,数据库配置完毕。其他配置请查看本系列其他文章。

参考来源:Postfix+Dovecot+Roundcube开源邮件系统搭建系列2:MariaDB数据库配置(MySQL) | MailABC邮件知识百科https://www.mailabc.cn/blog/2024/06/15/postfixdovecotroundcube%E5%BC%80%E6%BA%90%E9%82%AE%E4%BB%B6%E7%B3%BB%E7%BB%9F%E6%90%AD%E5%BB%BA%E7%B3%BB%E5%88%972%EF%BC%9Amariadb%E6%95%B0%E6%8D%AE%E5%BA%93%E9%85%8D%E7%BD%AE%EF%BC%88mysql%EF%BC%89/

相关推荐
计算机程序设计开发2 分钟前
计算机毕业设计体育资讯个性化推荐网站网站内容留言评论前台注册后台管理/springboot/javaWEB/J2EE/MYSQL数据库/vue前后分离小程序
数据库·spring boot·mysql·课程设计·计算机毕业设计
2401_858120264 小时前
探索Oracle数据库的多租户特性:架构、优势与实践
数据库·oracle·架构
pokemon..5 小时前
MySQL主从复制与读写分离
数据库·mysql
码农鑫哥的日常5 小时前
MySQL高可用配置及故障切换
数据库·mysql
longlongqin5 小时前
redis的 stream数据类型实现 消息队列?
数据库·redis·缓存
wrx繁星点点6 小时前
多个线程同时写入一个共享变量,会发生什么问题?如何解决?
java·开发语言·数据库
鲨鱼辣椒ii6 小时前
sql中索引查看是否生效
数据库·sql
leidata6 小时前
MySQL系列—10.Innodb行格式
数据库·mysql
阿维的博客日记7 小时前
聚簇索引和二级索引
数据库·聚簇索引·二级索引
璇嘟嘟7 小时前
springboot-创建连接池
数据库