2025-10-24 03:30PM
参考:https://www.jbritian.com/article/46
我尝试使用了docker、docker ubuntu、docker compose都失败了,主要是因为我本地的80和443端口已经被占用了,但是iredmail必须需要使用443端口,所以页面都打不开
1. 拉取 iredmail 镜像
$ docker pull iredmail/mariadb:stable
2. 创建文件夹
mkdir /opt/app/iredmail
cd /opt/app/iredmail
mkdir -p data/{backup-mysql,clamav,custom,imapsieve_copy,mailboxes,mlmmj,mlmmj-archive,mysql,sa_rules,ssl,postfix_queue}
3.创建所需要的环境变量文件
$ touch iredmail-docker.conf
echo HOSTNAME=mail.mydomain.com >> iredmail-docker.conf
echo FIRST_MAIL_DOMAIN=mydomain.com >> iredmail-docker.conf
echo FIRST_MAIL_DOMAIN_ADMIN_PASSWORD=my-secret-password >> iredmail-docker.conf
echo MLMMJADMIN_API_TOKEN=$(openssl rand -base64 32) >> iredmail-docker.conf
echo ROUNDCUBE_DES_KEY=$(openssl rand -base64 24) >> iredmail-docker.conf
echo MYSQL_ROOT_PASSWORD=my-secret-password >> iredmail-docker.conf
4. 第一次启动
docker run \
-d --privileged=true \
--name iredmail \
--env-file iredmail-docker.conf \
--hostname mail.bida.exchange \ # 这里替换为你的域名
-p 8081:80 \
-p 8443:443 \
-p 110:110 \
-p 995:995 \
-p 143:143 \
-p 993:993 \
-p 25:25 \
-p 465:465 \
-p 587:587 \
-v /home/iredmail/data/backup-mysql:/var/vmail/backup/mysql \
-v /home/iredmail/data/mailboxes:/var/vmail/vmail1 \
-v /home/iredmail/data/mlmmj:/var/vmail/mlmmj \
-v /home/iredmail/data/mlmmj-archive:/var/vmail/mlmmj-archive \
-v /home/iredmail/data/imapsieve_copy:/var/vmail/imapsieve_copy \
-v /home/iredmail/data/custom:/opt/iredmail/custom \
-v /home/iredmail/data/ssl:/opt/iredmail/ssl \
-v /home/iredmail/data/mysql:/var/lib/mysql \
-v /home/iredmail/data/clamav:/var/lib/clamav \
-v /home/iredmail/data/sa_rules:/var/lib/spamassassin \
-v /home/iredmail/data/postfix_queue:/var/spool/postfix \
iredmail/mariadb:stable
5. 替换证书
cd /opt/app/iredmail/data/ssl # 将证书文件上传到该目录下,并替换cert.pem、combined.pem、key.pem三个文件:
可以先把cert.pem、key.pem和combined.pem进行备份(重命名)
cp key.pem key.pem.backup
cp cert.pem cert.pem.backup
cp combined.pem combined.pem.backup
然后再替换文件
$ cp bida.exchange..crt cert.pem
$ cp bida.exchange.key key.pem
$ cat cert.pem key.pem > combined.pem # 我的ssl证书只有crt和key文件,所以要生成 combined.pem 文件
6. 停止、删除容器
docker stop <CONTAINER ID>
docker rm <CONTAINER ID>
7. 获取 dkim._domainkey 记录值
7.1 进入容器
$ docker exec -it iredmail /bin/bash
7.2 执行:$ amavisd showkeys 或者 $ amavisd-new showkeys 命令
# 结果跟下面类似:
dkim._domainkey.mydomain.com. 3600 TXT (
"v=DKIM1; p="
"MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDYArsr2BKbdhv9efugByf7LhaK"
"txFUt0ec5+1dWmcDv0WH0qZLFK711sibNN5LutvnaiuH+w3Kr8Ylbw8gq2j0UBok"
"FcMycUvOBd7nsYn/TUrOua3Nns+qKSJBy88IWSh2zHaGbjRYujyWSTjlPELJ0H+5"
"EV711qseo/omquskkwIDAQAB")
# 将所有引号去掉,并合并到一行即可,类似下面这样
v=DKIM1; p=MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAnO6tMWozhzuAgsTvRTlWD7NkWF0uK29KnNNtbAN0Q8a/tuSg2UXOKXnf9W/QQGqTQKWD+E19gEU5+pfyxDYcXQIDAQAB
8. _dmarc 记录值
它的记录值中 postmaster@bida.exchange 应与 iredmail-docker.conf 中 POSTMASTER_EMAIL 的值一样(默认为:postmaster@bida.exchange)
9. 添加云解析
| 记录类型 | 主机记录 | 记录值 | MX优先级 |
| A | 部署 iredmail 的服务器的公网 ip | ||
| MX | @ | mail.bida.exchange | 10 |
| TXT | @ | v=spf1 mx -all | |
| TXT | dkim._domainkey | v=DKIM1;p=xxxxxxxxx | |
| TXT | _dmarc | v=DMARC1; p=none; pct=100; rua=mailto:postmaster@bida.exchange |
9. 重新启动
docker run \
-d --privileged=true \
--name iredmail \
--env-file iredmail-docker.conf \
--hostname mail.bida.exchange \ # 这里替换为你的域名
-p 8081:80 \
-p 8443:443 \
-p 110:110 \
-p 995:995 \
-p 143:143 \
-p 993:993 \
-p 25:25 \
-p 465:465 \
-p 587:587 \
-v /home/iredmail/data/backup-mysql:/var/vmail/backup/mysql \
-v /home/iredmail/data/mailboxes:/var/vmail/vmail1 \
-v /home/iredmail/data/mlmmj:/var/vmail/mlmmj \
-v /home/iredmail/data/mlmmj-archive:/var/vmail/mlmmj-archive \
-v /home/iredmail/data/imapsieve_copy:/var/vmail/imapsieve_copy \
-v /home/iredmail/data/custom:/opt/iredmail/custom \
-v /home/iredmail/data/ssl:/opt/iredmail/ssl \
-v /home/iredmail/data/mysql:/var/lib/mysql \
-v /home/iredmail/data/clamav:/var/lib/clamav \
-v /home/iredmail/data/sa_rules:/var/lib/spamassassin \
-v /home/iredmail/data/postfix_queue:/var/spool/postfix \
iredmail/mariadb:stable
我发现虽然启动了,但是在浏览器使用 服务器ip+端口号,却打不开

因为我这个nginx还没有配置,并且iRedmail指向的还是80端口
先进入docker容器,查看iRedmail在docker是否可以打开
$ docker ps
$ docker exec -it <CONTAINER ID> /bin/bash
$ 使用 curl https://localhost -k
例如:
root@mail:~# curl https://localhost -k
<!DOCTYPE html>
<html lang="en">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>Roundcube Webmail :: Welcome to Roundcube Webmail</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0, shrink-to-fit=no, maximum-scale=1.0">
<meta name="theme-color" content="#f4f4f4">
<meta name="msapplication-navbutton-color" content="#f4f4f4">
<link rel="shortcut icon" href="skins/elastic/images/favicon.ico?s=1612812581">
<link rel="stylesheet" href="skins/elastic/deps/bootstrap.min.css?s=1612812589">
<link rel="stylesheet" href="skins/elastic/styles/styles.css?s=1612812581">
<link rel="stylesheet" type="text/css" href="plugins/jqueryui/themes/elastic/jquery-ui.css?s=1612812580">
<script src="program/js/jquery.min.js?s=1612812585"></script>
<script src="program/js/common.min.js?s=1612812581"></script>
<script src="program/js/app.min.js?s=1612812581"></script>
<script src="program/js/jstz.min.js?s=1612812585"></script>
<script>
/*
@licstart The following is the entire license notice for the
JavaScript code in this page.
Copyright (C) The Roundcube Dev Team
The JavaScript code in this page is free software: you can redistribute
it and/or modify it under the terms of the GNU General Public License
as published by the Free Software Foundation, either version 3 of
the License, or (at your option) any later version.
The code is distributed WITHOUT ANY WARRANTY; without even the implied
warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
See the GNU GPL for more details.
@licend The above is the entire license notice
for the JavaScript code in this page.
*/
var rcmail = new rcube_webmail();
rcmail.set_env({"task":"login","standard_windows":false,"locale":"en_US","devel_mode":null,"rcversion":10411,"cookie_domain":"","cookie_path":"/","cookie_secure":true,"skin":"elastic","blankpage":"skins/elastic/watermark.html","refresh_interval":60,"session_lifetime":600,"action":"","comm_path":"./?_task=login","compose_extwin":false,"date_format":"yy-mm-dd","date_format_localized":"YYYY-MM-DD","request_token":"87qA8KDaZU5PO3MqvvaV9ATNr1Y2rkqk"});
rcmail.add_label({"loading":"Loading...","servererror":"Server Error!","connerror":"Connection Error (Failed to reach the server)!","requesttimedout":"Request timed out","refreshing":"Refreshing...","windowopenerror":"The popup window was blocked!","uploadingmany":"Uploading files...","uploading":"Uploading file...","close":"Close","save":"Save","cancel":"Cancel","alerttitle":"Attention","confirmationtitle":"Are you sure...","delete":"Delete","continue":"Continue","ok":"OK","back":"Back","errortitle":"An error occurred!","options":"Options","plaintoggle":"Plain text","htmltoggle":"HTML","previous":"Previous","next":"Next","select":"Select","browse":"Browse","choosefile":"Choose file...","choosefiles":"Choose files..."});
rcmail.gui_container("loginfooter","login-footer");rcmail.gui_object('loginform', 'login-form');
rcmail.gui_object('message', 'messagestack');
</script>
<script src="plugins/jqueryui/js/jquery-ui.min.js?s=1612812580"></script>
</head>
<body class="task-login action-none">
<div id="layout">
<h1 class="voice">Roundcube Webmail Login</h1>
<div id="layout-content" class="selected no-navbar" role="main">
<img src="skins/elastic/images/logo.svg?s=1612812581" id="logo" alt="Logo">
<form id="login-form" name="login-form" method="post" class="propform" action="./?_task=login">
<input type="hidden" name="_token" value="87qA8KDaZU5PO3MqvvaV9ATNr1Y2rkqk">
<input type="hidden" name="_task" value="login"><input type="hidden" name="_action" value="login"><input type="hidden" name="_timezone" id="rcmlogintz" value="_default_"><input type="hidden" name="_url" id="rcmloginurl" value=""><table><tbody><tr><td class="title"><label for="rcmloginuser">Username</label>
</td>
<td class="input"><input name="_user" id="rcmloginuser" required size="40" autocapitalize="off" type="text"></td>
</tr>
<tr><td class="title"><label for="rcmloginpwd">Password</label>
</td>
<td class="input"><input name="_pass" id="rcmloginpwd" required size="40" autocapitalize="off" type="password"></td>
</tr>
</tbody>
</table>
<p class="formbuttons"><button type="submit" id="rcmloginsubmit" class="button mainaction submit">Login</button>
</p>
<div id="login-footer" role="contentinfo">
Roundcube Webmail
</div>
</form>
</div>
<noscript>
<p class="noscriptwarning">Warning: This webmail service requires Javascript! In order to use it please enable Javascript in your browser's settings.</p>
</noscript>
</div>
<div id="messagestack"></div>
<script>
$(function() {
rcmail.init();
});
</script>
<script src="skins/elastic/deps/bootstrap.bundle.min.js?s=1612812589"></script>
<script src="skins/elastic/ui.min.js?s=1612812581"></script>
</body>
那就说明是 nginx 的问题,还没有配置
登录
请登录后再发表评论。
评论列表:
目前还没有人发表评论