Postfix+Dovecot+Roundcube开源邮件系统搭建系列5:Roundcube安装配置(含Nginx+PHP部署配置)

1. PHP安装配置

参考wordpress 6.5.2版本安装记录 中关于PHP安装方法,此处不再详述。

修改php-fpm的启动用户和组为vmail,这一步是和nginx配置相呼应。配置文件/etc/opt/remi/php83/php-fpm.d/www.conf 下面几个配置:

user vmail
group vmail
listen.acl_users = vmail
#access.log = /var/opt/remi/php83/log/php-fpm/$pool.access.log #可选配置
listen = /var/opt/remi/php83/run/php-fpm/www.sock # 这个配置需要记录一下,下面nginx的配置需要用到

配置启动php-fpm:

systemctl enable php83-php-fpm
systemctl start php83-php-fpm

2. Nginx安装配置

2.1 安装nginx

yum install nginx

2.2 /etc/nginx/nginx.conf 配置文件

user  vmail; #以vmail身份运行,下面会涉及相关的配置
worker_processes  auto;error_log  /var/log/nginx/error.log notice;
pid        /var/run/nginx.pid;events {worker_connections  1024;
}http {include       /etc/nginx/mime.types;default_type  application/octet-stream;log_format  main  '$remote_addr - $remote_user [$time_local] "$request" ''$status $body_bytes_sent "$http_referer" ''"$http_user_agent" "$http_x_forwarded_for"';# 日志文件位置access_log  /var/log/nginx/access.log  main;sendfile        on;#tcp_nopush     on;keepalive_timeout  65;#gzip  on;include /etc/nginx/conf.d/*.conf;
}

2.3 /etc/nginx/conf.d/roundcube.conf 配置文件

在/etc/nginx/conf.d目录创建roundcube.conf配置文件,配置相关参数(下面参数仅供参考,里面很多是跟安全有关的配置):

    send_timeout            60;client_body_timeout     60;client_header_timeout   60;client_max_body_size            50m;client_body_buffer_size         1m;client_header_buffer_size       1k;large_client_header_buffers     4 8k;proxy_read_timeout              180;server_tokens                   off; # default onserver_names_hash_bucket_size   512;map_hash_max_size               13107200;gzip on;gzip_disable     "msie6";gzip_vary on;gzip_proxied any;gzip_comp_level 2;gzip_http_version 1.1;gzip_min_length 256;gzip_types text/plain text/css text/xml text/javascript text/x-json application/json application/x-javascript application/javascript application/xmlapplication/xml+rss;ssl_session_timeout  5m;ssl_session_cache    shared:SSL:10m;ssl_session_tickets  off;ssl_protocols        TLSv1.2 TLSv1.3;ssl_ciphers          "ECDHE-RSA-AES256-GCM-SHA384:ECDHE-RSA-AES128-GCM-SHA256:DHE-RSA-AES256-GCM-SHA384:DHE-RSA-AES128-GCM-SHA256:ECDHE-RSA-AES256-S
HA384:ECDHE-RSA-AES256-SHA:DHE-RSA-AES256-SHA256:DHE-RSA-AES256-SHA:AES256-GCM-SHA384:AES128-GCM-SHA256:AES256-SHA256:AES256-SHA:HIGH:!MEDIUM:!LOW:!aNUL
L:!eNULL:!EXPORT:!DES:!MD5:!PSK:!RC4:@STRENGTH";ssl_prefer_server_ciphers   on;proxy_ssl_verify     off;server {listen 80;server_name www.mailabc.cn;rewrite ^(.*)$ https://$host$1 permanent;
}server {listen 443 ssl http2;# server_name  @web_nameserver_name www.mailabc.cn;# 这里配SSL证书ssl_certificate     /var/sslcert/www.mailabc.cn.pem;ssl_certificate_key /var/sslcert/www.mailabc.cn.key;ssl_dhparam         /etc/nginx/dhparam.pem;ssl_stapling        on;ssl_stapling_verify on;# 配置roundcube的数据目录,需要提前创建root /var/www/roundcube;index index.php;# 配置fastcgi相关内容location ~ \.php$ {fastcgi_pass unix:/var/opt/remi/php83/run/php-fpm/www.sock; #该配置对应上述php-fpm的设置fastcgi_index index.php;fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;include fastcgi_params;}
}

2.4 创建 /var/www/roundcube 目录

mkdir /var/www/roundcube
chown vmail:vmail /var/www/roundcube

2.5 启动服务

systemctl start nginx
systemctl enable nginx

3. Roundcube配置

3.1 下载程序

下载链接单击此处。

3.2 部署Roundcube

3.2.1 解压程序:
tar -zxvf roundcubemail-1.6.7-complete.tar.gz -C /var/www/
cd /var/www/ && mv roundcubemail-1.6.7/* roundcube/
# 设置目录权限为vmail:vmail
chown vmail:vmail -R /var/www/roundcube
3.2.2 初始化数据库:
/* 创建数据库,名称可以自定义 */
CREATE DATABASE roundcube;/* 初始化数据库 */
USE roundcube;
source /var/www/roundcube/SQL/mysql.initial.sql /* 授权用户roundcube对roundcube数据库操作权限,可以自行定义账户名和密码 */
grant all on roundcube.* to roundcube@localhost identified by 'admin123';
FLUSH PRIVILEGES;
3.2.3 config.inc.php 配置文件:

创建配置文件:

cp /var/www/roundcube/config/config.inc.php.sample /var/www/roundcube/config/config.inc.php

修改配置文件内容:

# 配置数据库连接方式,见上面数据库初始化内容
$config['db_dsnw'] = 'mysql://roundcube:admin123@localhost/roundcube';
# smtp采用tls方式连接587端口
$config['smtp_host'] = 'tls://localhost:587';
# 启用installer进行图形界面初始化测试,测试完毕需要删除。我不打算用该配置
#$config['enable_installer'] = true; 
# 忽略检查ssl证书有效性,方便测试用。生产环境不建议启用
$config['smtp_conn_options'] = [
'ssl' => [
'verify_peer' => false,
'verify_peer_name' => false,
],
];
3.2.4 安全起见,删除installer目录:
rm -rf /var/www/roundcube/installer/

4. 测试

4.1 登录测试

通过域名或者ip访问roundcube界面,显示如下:

Roundcube登录界面

Roundcube登录界面

登录之后,界面如下:

roundcube主界面

Roundcube主界面

4.2 信件收发测试

写信:

Roundcube写信界面

Roundcube写信界面

读信:

Roundcube读信界面

Roundcube读信界面

至此,本系列文章结束。但是,实际上我们的工作刚开始,还有大量功能等着我们去探索,例如如何修改附件大小、别名邮箱如何处理、自动转发如何配置等等。后续我们将针对相关主题更新文档进行讨论。

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

如若内容造成侵权/违法违规/事实不符,请联系瞎胡闹网进行投诉反馈,一经查实,立即删除!

相关文章

【电路笔记】-放大器的输入和输出阻抗

放大器的输入和输出阻抗 文章目录 放大器的输入和输出阻抗1、概述2、输入和输出阻抗的定义3、阻抗的重要性4、阻抗设置5、设置方法6、总结1、概述 从非常简单的角度来看,放大器由一个“盒子”组成,实现输入信号和输出信号之间的放大功能。 输入进入系统和输出离开系统的方式…

数电基础 - 555定时器

目录 一. 简介 二. 工作原理 三. 应用场景 四. 结成施密特触发器 五. 结成单稳态触发器 六. 结成多携振荡器 七. 优缺点 一. 简介 555 定时器是一种集成电路芯片,在电子电路中应用广泛。 它包含两个比较器、一个基本 RS 触发器、一个放电三极管以及分压器等…

Leetcode二分搜索法浅析

文章目录 1.二分搜索法1.1什么是二分搜索法?1.2解法思路 1.二分搜索法 题目原文: 给定一个 n 个元素有序的(升序)整型数组 nums 和一个目标值 target ,写一个函数搜索 nums 中的 target,如果目标值存在返…

【BUG】已解决:raise KeyError(key) from err KeyError: (‘name‘, ‘age‘)

已解决:raise KeyError(key) from err KeyError: (‘name‘, ‘age‘) 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页,我是博主英杰,211科班出身,就职于医疗科技公司,热衷分享知识&#xf…

“社群+”生态下的开源AI智能名片源码:驱动商业与社会连接的新引擎

摘要:在“社群”生态日益成为主流趋势的今天,开源AI智能名片源码作为技术创新与社群运营的深度融合体,正逐步展现出其重塑商业格局、深化社会连接的巨大潜力。本文旨在深入探讨开源AI智能名片源码的技术特性、在“社群”生态中的具体应用、对…

VisualRules-Web案例展示(一)

VisualRules单机版以其卓越的功能深受用户喜爱。现在,我们进一步推出了VisualRules-Web在线版本,让您无需安装任何软件,即可在任何浏览器中轻松体验VisualRules的强大功能。无论是数据分析、规则管理还是自动化决策,VisualRules-W…

【D3.js in Action 3 精译_016】第二章 DOM 的操作方法

当前内容所在位置 第一部分 D3.js 基础知识 第一章 D3.js 简介(已完结) 1.1 何为 D3.js?1.2 D3 生态系统——入门须知1.3 数据可视化最佳实践(上)1.3 数据可视化最佳实践(下)1.4 本章小结 第二章…

数据结构(Java):优先级队列(堆)堆的模拟实现

目录 1、优先级队列 1.1 概念 1.2 PriorityQueue底层结构 2、 堆 2.1 堆的概念 2.2 堆的存储结构 3、优先级队列(堆)的模拟实现 3.1 堆的创建 3.1.1 向下调整算法建完整堆 3.2 堆的插入 3.2.1 向上调整算法 3.3 堆的删除 3.4 堆排序 1、优先…

51单片机嵌入式开发:12、STC89C52RC 红外解码数码管显示

STC89C52RC 红外解码数码管显示 1 概述2 HX1838原理2.1 原理概述2.2 原理概述 3 HX1838代码实现3.1 工程整理3.2 工程代码3.3 演示 4 HX1838总结 1 概述 HX1838是一种常见的红外接收模块,用于接收和解码红外遥控器发送的红外信号。 HX1838具有以下特点和功能&#…

二、BIO、NIO、直接内存与零拷贝

一、网络通信编程基础 1、Socket Socket是应用层与TCP/IP协议族通信的中间软件抽象层,是一组接口,由操作系统提供; Socket将复杂的TCP/IP协议处理和通信缓存管理都隐藏在接口后面,对用户来说就是使用简单的接口进行网络应用编程…

HarmonyOS根据官网写案列~ArkTs从简单地页面开始

Entry Component struct Index {State message: string 快速入门;build() {Column() {Text(this.message).fontSize(24).fontWeight(700).width(100%).textAlign(TextAlign.Start).padding({ left: 16 }).fontFamily(HarmonyHeiTi-Bold).lineHeight(33)Scroll() {Column() {Ba…

使用Docker 实现 MySQL 循环复制(三)

系列文章 使用Docker 实现 MySQL 循环复制(一) 使用Docker 实现 MySQL 循环复制(二) 目录 系列文章1. 在主机上安装MySQL客户端2. 配置循环复制拓扑2.1 进入容器2.2 创建复制用户并授予复制权限2.3 复位二进制日志2.4 配置环形复…

信息安全工程师题

物理隔离技术要求两台物理机物理上并不直连,只能进行间接的信息交换。所以防火墙不能实现网络的物理隔离Web应用防火墙可以防止SQL注入、xss攻击、恶意文件上传、远程命令执行、文件包含、恶意扫描拦截等;可以发现并拦截恶意的Web代码;可防止…

详解MLOps,从Jupyter开发到生产部署

大家好,Jupyter notebook 是机器学习的便捷工具,但在应用部署方面存在局限。为了提升其可扩展性和稳定性,需结合DevOps和MLOps技术。通过自动化的持续集成和持续交付流程,可将AI应用高效部署至HuggingFace平台。 本文将介绍MLOps…

色彩与故乡的对话 —— 钱华个人油画展正式开展

色彩与故乡的对话 —— 钱华个人油画展正式开展 2024年7月17日 ,在宁波这座历史与现代交织的城市里,艺术与文化的碰撞再次绽放出耀眼的光芒。由宁波海曙区美术家协会主办,宁波市海纳广场开发经营有限公司协办的“色彩与故乡的对话——钱华个人…

HDLC(高级数据链路控制协议)的定义、数据结构、状态检测、基本配置、特点及限制

一、HDLC的定义 HDLC是一种面向比特的对用同步串行数字链路封装协议。 面向比特:对于任何比特流,HDLC都可以实现透明的传输; 同步串行:应用于同步串行线路; 应用于接口:在同步模式下的Serial接口和pos接口; 只支持点到点链路,通过keepalive报文来检测链路状态。 …

pnpm build打包时占内溢出

这两天在打包H5网页的时候失败,总是提示下方错误 FATAL ERROR: Ineffective mark-compacts near heap limit Allocation failed - JavaScript heap out of memory 严重错误:堆限制附近标记压缩无效分配失败 - JavaScript 堆内存不足 尝试了多种方法&…

使用Docker 实现 MySQL 循环复制(二)

系列文章 使用Docker 实现 MySQL 循环复制(一) 目录 系列文章1. 创建三个 mysql 容器1.1 准备三个 mysql 容器的挂载卷1.2 为三个mysql实例创建配置文件1.3 修改各目录的权限以满足 mysql 容器的要求1.4 创建 docker-compose.yaml 文件1.5 创建容器 1. …

记录一下在Hyper-v中动态磁盘在Ubuntu中不完全用到的问题(扩展根目录)

在之前给hyper虚拟机的Ubuntu分配磁盘有20G; 后来在Ubuntu中查看磁盘发现有一个分区没用到: 贴的图片是完成扩展后的 之前这里是10G,然后有个dev/sda4的分区,也是10G,Type是Microsoft Basic Data; …

实现了一个心理测试的小程序,微信小程序学习使用问题总结

1. 如何在跳转页面中传递参数 ,在 onLoad 方法中通过 options 接收 2. radio 如何获取选中的值? bindchange 方法 参数e, e.detail.value 。 如果想要获取其他属性,使用data-xx 指定,然后 e.target.dataset.xx 获取。 3. 不刷…