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/
相关文章:
Postfix+Dovecot+Roundcube开源邮件系统搭建系列1-2:系统搭建目标+MariaDB数据库配置(MySQL)
1. 系统搭建目标 通过本系列文章,最终可以部署一套提供如下服务的邮件系统: SMTP服务:由Postfix提供,监听25、465、587端口。POP3服务:由Dovecot提供,监听110、995端口。IMAP服务:由Dovecot提…...
Flower花所比特币交易及交易费用科普
在加密货币交易中,选择一个可靠的平台至关重要。Flower花所通过提供比特币交易服务脱颖而出。本文将介绍在Flower花所进行比特币交易的基础知识及其交易费用。 什么是Flower花所? Flower花所是一家加密货币交易平台,为新手和资深交易者提供…...
1个Xpath定位可以在Web页面查找到多个元素Selenium
1个Xpath定位可以在Web页面查找到多个元素Selenium//input[id\"transactionId\"] 打开Web页面, 点击F12可以看到压面 点击Ctrl F 可以点图如下图的输入框,输入xpath,看右侧可以找到3个对应的元素 点击Ctrl F 点击Ctrl F 点…...
智慧博物馆的“眼睛”:视频智能监控技术守护文物安全与智能化管理
近日,位于四川德阳的三星堆博物馆迎来了参观热潮。据新闻报道,三星堆博物馆的日均参观量达1.5万人次。随着暑假旅游高峰期的到来,博物馆作为重要的文化场所,也迎来了大量游客。博物馆作为文化和历史的重要载体,其安全保…...
vue中:class、watch、v-show使用
1、:class 指令 在 Vue.js 中,:class 指令(或 v-bind:class)允许你动态地绑定 CSS 类到一个元素。这个指令有两种主要的使用方式:绑定一个对象或者绑定一个数组。 1.1、:class{} 对象语法 对象语法允许你基于条件来添加或移除类…...
中电金信-杭州工商银行|面试真题|2024年
中电金信-杭州工商银行 JAva集合用过哪些? ArrayList、LinkedList、HashSet、TreeSet、HashMap、LinkedHashMap、ConcurrentHashMap Arraylist和linkbist区别 ArrayList底层是数据,查询快,增删慢,线程不安全,效率高LikedList 底…...
搞定前端面试题——ES6同步与异步机制、async/await的使用以及Promise的使用!!!
文章目录 同步和异步async/awaitPromisePromise的概念 同步和异步 同步:代码按照编写顺序逐行执行,后续的代码必须等待当前正在执行的代码完成之后才能执行,当遇到耗时的操作(如网络请求等)时,主线程会…...
Redis数据结构--跳跃表 Skip List
跳跃表(Skip List)是一种高效的随机化数据结构,通过引入多层索引来实现快速的查找、插入和删除操作。它在Redis中被用来实现有序集合(Sorted Set),在处理大量数据时表现出了优越的性能和灵活性。本文将详细…...
线状激光模组定制厂家哪家好?具体怎么收费?
在激光技术领域,线状激光模组因其高精度、高效率的特点,被广泛应用于工业制造、科研实验及医疗设备等多个领域。然而,市场上的线状激光模组种类繁多,品质参差不齐。然后如何选择线状激光模组定制厂家,以及了解其具体收…...
【Python游戏】编程开发贪吃蛇游戏(第一期)
本文收录于 《一起学Python趣味编程》专栏,从零基础开始,分享一些Python编程知识,欢迎关注,谢谢! 文章目录 一、前言二、贪吃蛇游戏开发简介2.1 贪吃蛇游戏规则2.2 贪吃蛇游戏开发步骤 三、贪吃蛇游戏开发实战四、总结…...
【机器学习入门】拥抱人工智能,从机器学习开始
拥抱人工智能,从机器学习开始 目录: 1. 机器学习:一种实现人工智能的方法 2. 机器学习算法:是使计算机具有智能的关键 3. Anaconda:初学Python、入门机器学习的首选 4. 总结 转载链接: 文章-阿里云开发者社…...
【React打卡学习第一天】
React入门 一、简介二、基本使用1.引入相关js库2.babel.js的作用 二、创建虚拟DOM三、JSX(JavaScript XML)1.本质2.作用3.基本语法规则定义虚拟DOM时,不要写引号。标签中混入JS表达式时要用{}。样式的类名指定不要用class,要用className.内联…...
matlab PID tuner整定工具箱的用法
从主页的APP中搜索到它: 按照下图IMPORT导入被控对象的传递函数 在下图的Inspect按钮中可以看到导入的被控对象的传函。 在下图的Type中选择控制器类型: 在下图的Form中选择PID的形式:有两种可选:平行式Parallel和标准式Standard …...
富格林:可信办法阻挠虚假受骗
富格林悉知,在现货黄金中,投资者一定要谦虚谨慎切记不要骄傲自大,否则就可能遭遇投资虚假受骗。在盈利后一定要持续学习可信技巧稳固基础,失败了一定要总结错误教训这样才能阻挠虚假受骗为以后的稳定盈利打好基础。以下是富格林总…...
OPPO 2024届校招正式批笔试题-后端(C卷)
小欧的括号嵌套 题目描述 小欧想要构造一个合法的括号序列满足以下条件: 括号序列长度恰好为 2 n 2n 2n。括号序列的嵌套层数最大值为 r r r。 括号嵌套层数是指在一个字符串中,以左括号 “(” 和右括号 “)” 形成的括号对的最大嵌套深度。 输入…...
HTTP请求五类状态码详细介绍,以及部分处理思路
HTTP请求状态码分为五类: 一. 消息系列 二 成功系列 三. 重定向系列 四. 请求错误系列 五. 服务器端错误系列 302:临时转移成功,请求的内容已转移到新位置 403:禁止访问 500:服务器内部错误 401代表未授权。 以下是常见的一些状态码: 1xx&…...
Log4j的原理及应用详解(三)
本系列文章简介: 在软件开发的广阔领域中,日志记录是一项至关重要的活动。它不仅帮助开发者追踪程序的执行流程,还在问题排查、性能监控以及用户行为分析等方面发挥着不可替代的作用。随着软件系统的日益复杂,对日志管理的需求也日益增长,因此,一个高效、灵活且易于使用的…...
【深度学习】PyTorch框架(4):初始网络、残差网络 和密集连接网络
1、引言 在本篇文章中,我们将深入探讨并实现一些现代卷积神经网络(CNN)架构的变体。近年来,学界提出了众多新颖的网络架构。其中一些最具影响力,并且至今仍然具有重要地位的架构包括:GoogleNet/Inception架…...
【关于PHP性能优化,内存优化,日志工具等问题处理】
目录 PHP 性能优化: 如何优化 PHP 代码以提高性能? 通用优化策略: 框架特定优化: 性能优化最佳实践: 描述一下你使用过的 PHP 性能分析工具。 检测内存泄漏的方法 使用工具检测内存泄漏 常见内存泄漏场景及解决…...
R-CNN、Fast R-CNN和Faster R-CNN:目标检测的进化之路
在计算机视觉的世界里,目标检测是一个重要的任务,它的目标是找到图像中的特定物体,并标注出它们的位置。这项技术广泛应用于自动驾驶、安防监控等领域。为了让计算机能够准确高效地完成这一任务,科学家们提出了许多优秀的算法,其中最具代表性的就是R-CNN、Fast R-CNN和Fas…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
dedecms 织梦自定义表单留言增加ajax验证码功能
增加ajax功能模块,用户不点击提交按钮,只要输入框失去焦点,就会提前提示验证码是否正确。 一,模板上增加验证码 <input name"vdcode"id"vdcode" placeholder"请输入验证码" type"text&quo…...
反射获取方法和属性
Java反射获取方法 在Java中,反射(Reflection)是一种强大的机制,允许程序在运行时访问和操作类的内部属性和方法。通过反射,可以动态地创建对象、调用方法、改变属性值,这在很多Java框架中如Spring和Hiberna…...
拉力测试cuda pytorch 把 4070显卡拉满
import torch import timedef stress_test_gpu(matrix_size16384, duration300):"""对GPU进行压力测试,通过持续的矩阵乘法来最大化GPU利用率参数:matrix_size: 矩阵维度大小,增大可提高计算复杂度duration: 测试持续时间(秒&…...
【OSG学习笔记】Day 16: 骨骼动画与蒙皮(osgAnimation)
骨骼动画基础 骨骼动画是 3D 计算机图形中常用的技术,它通过以下两个主要组件实现角色动画。 骨骼系统 (Skeleton):由层级结构的骨头组成,类似于人体骨骼蒙皮 (Mesh Skinning):将模型网格顶点绑定到骨骼上,使骨骼移动…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
人机融合智能 | “人智交互”跨学科新领域
本文系统地提出基于“以人为中心AI(HCAI)”理念的人-人工智能交互(人智交互)这一跨学科新领域及框架,定义人智交互领域的理念、基本理论和关键问题、方法、开发流程和参与团队等,阐述提出人智交互新领域的意义。然后,提出人智交互研究的三种新范式取向以及它们的意义。最后,总结…...
C++课设:简易日历程序(支持传统节假日 + 二十四节气 + 个人纪念日管理)
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、为什么要开发一个日历程序?1. 深入理解时间算法2. 练习面向对象设计3. 学习数据结构应用二、核心算法深度解析…...
C# 表达式和运算符(求值顺序)
求值顺序 表达式可以由许多嵌套的子表达式构成。子表达式的求值顺序可以使表达式的最终值发生 变化。 例如,已知表达式3*52,依照子表达式的求值顺序,有两种可能的结果,如图9-3所示。 如果乘法先执行,结果是17。如果5…...
