背景介绍#
在网络上我们经常看到一些网站使用自己的域名邮箱,就是很多站长就用 admin@xxx.xxx 这样的邮箱,那么我们该如何使用这样的邮箱呢,最简单的方法是使用其他商家提供的企业邮箱(比如腾讯企业邮箱设置自己的域名邮箱),但是这些要么付费要么就是有限制的,另外的方法就是自己搭建邮局。今天就介绍下 使用Docker在Linux搭建邮件服务器 。
前期准备#
服务器一台:国内国外都行,1核心内存1G以上硬盘大于20G,本文使用的是腾讯轻量云服务器,很便宜啊。200左右就能搞1年,对于开发人员做实验是非常友好的。
域名一个:无要求,随便一个域名就行,无所谓。
安装部署操作#
网上有很多教程和项目都是直接安装到本地的。本人不太喜欢这种方式。由于经常使用docker 可以方便的删除和卸载重装,迁移等操作。这里就介绍docker的部署方式。
在全球最大的同姓交友平台搜了一波发现了一个比较适合我的项目 docker-mailserver 由于网上没有中文的教程,这边记录一下方便互联网上其它人学习。英语水平好的可以直接跳转到项目主页查看部署教程。
首先要在服务器防火墙开放这些端口:110 995 143 993 25 587 81
Service | Address |
---|---|
POP3 (starttls needed) | 127.0.0.1:110 |
POP3S | 127.0.0.1:995 |
IMAP (starttls needed) | 127.0.0.1:143 |
IMAPS | 127.0.0.1:993 |
SMTP | 127.0.0.1:25 |
Mail Submission (starttls needed) | 127.0.0.1:587 |
Management Interface | http://127.0.0.1:81/manager/ |
Webmail | http://127.0.0.1:81/webmail/ |
Rspamd Webinterface | http://127.0.0.1:81/rspamd/ |
操作命令#
[root@VM-8-17-centos ~]# mkdir /data
[root@VM-8-17-centos ~]# cd /data
[root@VM-8-17-centos data]# git clone https://github.com/jeboehm/docker-mailserver.git
[root@VM-8-17-centos data]# cd ./docker-mailserver
[root@VM-8-17-centos docker-mailserver]# cp .env.dist .env
[root@VM-8-17-centos docker-mailserver]# vim .env
-- 此处往下有两种方式,一种是您用这个项目提供的数据库 一种是您本身有个数据库不需要用这个项目提供的数据库 修改changeme部分
-- 以下是用已存在的数据库 自己创建库mailserver
[root@VM-8-17-centos docker-mailserver]# cat .env
MYSQL_DATABASE=mailserver
MYSQL_HOST=119.28.71.xx # 注意这里是外网地址不然docker里访问不到
MYSQL_USER=changeme
MYSQL_PASSWORD=changeme
MAILNAME=mail.ziyuzile.cn
POSTMASTER=postmaster@ziyuzile.cn
RELAYHOST=false
FILTER_MIME=false
FILTER_VIRUS=true
ENABLE_IMAP=true
ENABLE_POP3=true
CONTROLLER_PASSWORD=changeme
WAITSTART_TIMEOUT=2m
-- 用自己的数据库创建好后导入这个目录下的sql 有个文件内的表上下有依赖需要颠倒一下,先创建依赖表
[root@VM-8-17-centos docker-mailserver]# ll ./db/rootfs/docker-entrypoint-initdb.d/
-rw-r--r-- 1 root root 3040 Mar 26 12:06 001_mailserver.sql
-rw-r--r-- 1 root root 8495 Mar 26 12:06 002_webmail.sql
-- 以下是用项目数据库
[root@VM-8-17-centos docker-mailserver]# cat .env
MYSQL_DATABASE=mailserver
MYSQL_USER=mailserver
MYSQL_PASSWORD=changeme
MYSQL_ROOT_PASSWORD=changeme
MAILNAME=mail.example.com
POSTMASTER=postmaster@example.com
RELAYHOST=false
FILTER_MIME=false
FILTER_VIRUS=true
ENABLE_IMAP=true
ENABLE_POP3=true
CONTROLLER_PASSWORD=changeme
WAITSTART_TIMEOUT=2m
-- 如果您是用的第一种已存在的数据库 则需要删掉 docker-compose.yml 中 db部分
[root@VM-8-17-centos docker-mailserver]# cat docker-compose.yml
version: '3.5'
services:
# Creates self signed tls certificates. Remove if you
# use your own.
ssl:
image: jeboehm/mailserver-ssl:latest
build: ./ssl
env_file: .env
volumes:
- data-tls:/media/tls:rw
# The Mail Transfer Agent (Postfix) receives incoming mail
# on TCP port 25.
mta:
image: jeboehm/mailserver-mta:latest
build: ./mta
restart: on-failure:5
env_file: .env
volumes:
- data-tls:/media/tls:ro
# For using external certificates uncomment the following lines
# and change the path on the left side of the colon.
# - /home/user/certs/mail.example.com.crt:/media/tls/mailserver.crt:ro
# - /home/user/certs/mail.example.com.key:/media/tls/mailserver.key:ro
# The Mail Delivery Agent (Dovecot) is responsible for storing
# incoming mail into a users mailbox and also delivers them
# via POP3 or IMAP4.
mda:
image: jeboehm/mailserver-mda:latest
build: ./mda
restart: on-failure:5
env_file: .env
volumes:
- data-mail:/var/vmail
- data-tls:/media/tls:ro
# For using external certificates uncomment the following lines
# and change the path on the left side of the colon.
# - /home/user/certs/mail.example.com.crt:/media/tls/mailserver.crt:ro
# - /home/user/certs/mail.example.com.key:/media/tls/mailserver.key:ro
# The admin (mailserver-admin) and webmail (roundcube) interfaces
# live here. Can be removed if not needed.
web:
image: jeboehm/mailserver-web:latest
build: ./web
restart: on-failure:5
env_file: .env
volumes:
- data-dkim:/media/dkim
# For use with jwilder/nginx-proxy.
# environment:
# - VIRTUAL_HOST=mail.example.com
# Incoming spam is (hopefully) filtered by rspamd which runs
# in this service.
filter:
image: jeboehm/mailserver-filter:latest
build: ./filter
restart: on-failure:5
env_file: .env
volumes:
- data-filter:/var/lib/rspamd
- data-dkim:/media/dkim
links:
- virus:virus.local
# Incoming viruses or malware is detected and rejected by
# this service. Can be removed if FILTER_VIRUS is set to false.
virus:
image: jeboehm/mailserver-virus:latest
build: ./virus
restart: on-failure:5
env_file: .env
volumes:
- data-virusdb:/var/lib/clamav
redis:
image: redis:alpine
restart: on-failure:5
command: ["redis-server", "--appendonly", "yes"]
volumes:
- data-redis:/data
# If you want unhealthy containers to be restarted automatically
# just uncomment the following lines.
# autoheal:
# image: willfarrell/autoheal:latest
# restart: always
# networks: []
# volumes:
# - /var/run/docker.sock:/var/run/docker.sock:ro
# environment:
# - AUTOHEAL_CONTAINER_LABEL=de.ressourcenkonflikt.docker-mailserver.autoheal
# Optional service: extend ClamAV (used in the virus service)
# by downloading additional databases provided by different
# companys. Run it regulary.
# virus_unof_sig_updater:
# build: ./virus/contrib/unofficial-sigs
# env_file: .env
# volumes:
# - data-virusdb:/var/lib/clamav
volumes:
data-dkim:
data-mail:
data-tls:
data-filter:
data-virusdb:
data-redis:
[root@VM-8-17-centos docker-mailserver]# ./bin/production.sh pull
[root@VM-8-17-centos docker-mailserver]# ./bin/production.sh up -d
[root@VM-8-17-centos docker-mailserver]# ./bin/production.sh run --rm web setup.sh 此处一点要等待交互完成会提示您创建一个管理员账号和输入密码 比如我的配置 我输入账号 admin@ziyuzile.cn 密码输两边 通过以后命令行会退出。
后面就可以在浏览器访问了 地址是服务器外网地址记得在防火墙开放对应端口哦。 http://192.144.226.xx:81/login 用户名就是刚刚输入的admin@ziyuzile.cn 密码就是刚刚输入的密码
打开登录界面如图:
进入后界面如图:
用户管理:
编辑用户:
DKIM界面:
DKIM编辑:这一块在下面的域名配置里也要用到
很多教程都不讲域名配置我这边把涉及到的内容都贴出来了,重点 txt记录的名称是上面Domain的值,内容是 Expected value的值
到此,邮箱服务器就已经配置完成了。使用foxmail就可以登录了。
评论 (0)