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邮件知识百科icon-default.png?t=N7T8https://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/

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/bicheng/47425.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

springboot3.2 RedisCacheManager配置

1、启用并配置 添加 EnableCaching 注解 并配置 RedisCacheManager package config;import com.fasterxml.jackson.annotation.JsonAutoDetect; import com.fasterxml.jackson.annotation.JsonTypeInfo; import com.fasterxml.jackson.annotation.PropertyAccessor; import c…

Java基础笔记(面试题)

一、Tomcat中为什么要使用自定义类加载器 Tomcat中可以放多个Java项目的jar文件,如果每个jar文件中都有一个User的类,那么User类在没有自定义类加载器的情况下是只能加载一次;想要加载多次,只能自定义类加载器 二、JDK、JRE、JVM…

项目管理进阶之RACI矩阵

前言 项目管理进阶系列续新篇。 RACI?这个是什么矩阵,有什么用途? 在项目管理过程中,如Team规模超5以上时,则有必要采用科学的管理方式,满足工作需要。否则可能事倍功半。 Q:什么是RACI矩阵 …

【简单介绍Gitea】

🎥博主:程序员不想YY啊 💫CSDN优质创作者,CSDN实力新星,CSDN博客专家 🤗点赞🎈收藏⭐再看💫养成习惯 ✨希望本文对您有所裨益,如有不足之处,欢迎在评论区提出…

【Rust】使用日志记录利器flexi_logger

Flexi_logger简介 ​flexi_logger​是一个功能强大且灵活的日志记录库,用于Rust语言的应用程序。它提供了丰富的配置选项和功能,适用于各种日志记录需求,从简单的控制台输出到复杂的文件日志管理。以下是对flexi_logger​的一些关键功能和特…

观察者模式-C#

在C#中实现观察者模式,通常涉及两个主要的组件:主题(Subject)和观察者(Observer)。主题负责维护观察者列表,并在其状态发生变化时通知所有注册的观察者。观察者则是对主题状态感兴趣的对象&…

吴恩达大模型系列课程《Prompt Compression and Query Optimization》中文学习打开方式

Prompt Compression and Query Optimization GPT-4o详细中文注释的Colab观看视频1 浏览器下载插件2 打开官方视频 GPT-4o详细中文注释的Colab 中文注释链接:https://github.com/Czi24/Awesome-MLLM-LLM-Colab/tree/master/Courses/Prompt-Compression-and-Query-Op…

防溺水预警系统引领水域安全新篇章

一、系统概述 随着人们对水域活动的需求增加,溺水事故频发,给人们的生命安全带来了严重威胁。然而,如今,一项创新科技正在以强大的功能和无限的潜力引领着水域安全的新篇章。智能防溺水预警系统,作为一种集成了智能感知…

乐鑫ESP-IoT-Bridge方案简化设备智能联网通信,启明云端乐鑫代理商

随着物联网技术的快速发展,设备联网已成为实现智能化的关键一步。然而,不同设备之间的通信协议、接口等差异,使得设备联网变得复杂且困难。 乐鑫推出的ESP-IoT-Bridge联网方案,正是为了解决这一难题,为物联网场景下的…

c字符串转go字符串

【1】问题:如何将带中文的char*转utf8 【2】问题分析: 默认的带中文的char*的编码格式是GBK,也就是中文是占两个字节,而数字、字母和其他字符是占一个字节,如“hao好”就是占5个字节 但是UTF-8,汉字是占…

抖音短视频seo矩阵系统源码(搭建技术开发分享)

#抖音矩阵系统源码开发 #短视频矩阵系统源码开发 #短视频seo源码开发 一、 抖音短视频seo矩阵系统源码开发,需要掌握以下技术: 网络编程:能够使用Python、Java或其他编程语言进行网络编程,比如使用爬虫技术从抖音平台获取数据。…

服务器的80和443端口关闭也能申请SSL证书

一、简介 在服务器的80和443端口关闭的情况下,确实可以申请SSL证书,但申请过程和方法会根据证书类型和验证方式的不同而有所差异。 通常如果是网站域名申请SSL证书,哪怕服务器的80、443端口都打不开,也可以通过DNS解析的方式来验…

设计模式-领域逻辑模式-领域模型(Domain Model)

例子 合并了行为和数据的领域的对象模型,如下图所示。 建立收入确认类 建立收入计算策略类 对象的传递过程

EasyExcel 学习之 导出 “WPS 表格在试图打开文件时遇到错误”

目录 1. 版本2. 现象2.1. Postman 文件下载成功且 WPS 可以正常打开2.2. VUE 下载成功但 WPS 无法打开 3. 原因:前端未指定 responseType4. 常见问题4.1. NoSuchMethodError4.1.1. org.apache.logging.log4j.LogBuilder org.apache.logging.log4j.Logger.atTrace()4.1.2. Could…

请解释vue的单页面应用是什么及其优缺点

Vue的单页面应用(Single Page Application, SPA)是一种使用Vue.js框架构建的Web应用程序,它通过动态加载内容来更新页面,而不是每次用户导航时重新加载整个页面。以下是对Vue单页面应用的详细解释及其优缺点的归纳: V…

河南萌新联赛2024第(一)场:河南农业大学

C-有大家喜欢的零食吗_河南萌新联赛2024第&#xff08;一&#xff09;场&#xff1a;河南农业大学 (nowcoder.com) 思路:匈牙利算法的板子题. 二部图 int n; vector<int> vct[505]; int match[505],vis[505]; bool dfs(int s){for(auto v:vct[s]){if(vis[v]) continue;…

Jmeter关联

案例脚本实现&#xff1a;选择商品加入购物车 客户端发送一个登录的HTTP请求&#xff0c;服务端返回一个带着token的响应&#xff0c;后续发出一个带token信息的加入购物车的HTTP请求&#xff0c;返回响应。 关联&#xff1a;当请求直接由依赖关系的时候&#xff0c;比如一个请…

Python项目中的.gitignore配置

在Git项目中&#xff0c;.gitignore 文件用于指定哪些文件和目录应该被Git忽略&#xff0c;不纳入版本控制。对于Python项目&#xff0c;通常需要忽略一些特定的文件和目录&#xff0c;如编译生成的文件、虚拟环境、日志文件等。以下是一个常见的Python项目 .gitignore 配置示例…

FreeRTOS的中断管理、临界资源保护、任务调度

什么是中断&#xff1f; 简介&#xff1a;让CPU打断正常运行的程序&#xff0c;转而去处理紧急的事件&#xff08;程序&#xff09;&#xff0c;就叫中断。 中断优先级分组设置 ARM Cortex-M 使用了 8 位宽的寄存器来配置中断的优先等级&#xff0c;这个寄存器就是中断优先级…

Python | Leetcode Python题解之第242题有效的字母异位词

题目&#xff1a; 题解&#xff1a; class Solution:def isAnagram(self, s: str, t: str) -> bool:s_c Counter(s)t_c Counter(t)if(len(s_c) ! len(t_c)):return Falseelse:for key, value in s_c.items():if t_c.get(key) ! value:return Falsereturn True