Mailsac安装教程|构建一次性邮件服务器|临时邮件服务器搭建|CentOS7安装Mailsac

发布时间:2020-02-21

Mailsac是基于Node.js、Mongo和Redis构建的一次性SMTP测试服务器和电子邮件Web客户端前端。

官网地址:https://mailsac.com

GitHub地址:https://github.com/ruffrey/mailsac


本教程是在CentOS7.7 64位上进行部署的,如果您的系统是Ubuntu请查看Ubuntu18.04 64位Mailsac部署教程


由于网上教程和资源较少,特意写了这篇文章,为搭建临时邮件服务器和需要使用Mailsac的人提供参考。此方法不一定适合你的服务器,尝试前最好做好备份或创建快照。我将在CentOS7服务器上进行部署,Windows平台的部署教程将在另外一篇文章中进行讲解。

本教程将讲解从购买服务器到部署Mailsac的全过程。本教程安装程序使用的是可自定义配置的方式,较为麻烦,你也可以使用其他较为方便的安装方法。

主要步骤包括:

1、购买CentOS7.7 64位服务器

2、安装Node.js

3、安装MongoDB数据库

4、安装Redis远程字典服务

5、配置Mailsac

6、安装Nginx服务器


提示,由于文章较长,涉及到的内容知识较多,阅读这篇文章和尝试部署mailsac,请确保你有足够的耐心,这可能花费你1-2两天的时间。 本文命令均经过多次测试,然而你的系统配置不一定和我的一样,安装过程中可能会出现其他的错误,请耐心自行解决,你也可以通过本网站的在线客服或联系方式进行咨询,工作繁忙时不一定回答。本教程中使用vi进行文本编辑,你应该先了解一下vi相关的命令,例如按insert键开始编辑文本,按esc键写入vi命令,输入:q!退出不保存,输入:wq保存并退出。


一、购买ECS服务器

如果你已经拥有一台Linux服务器可跳过此步骤。

1、购买一台按量付费的Linux服务器,打开阿里云https://www.aliyun.com/,登录账号,充值100元,点击购买云服务器ECS。

2、基础配置,选择2核8G CentOS7.7 64服务器,其他配置默认,下一步。

由于仅做教程测试使用,所以我选择按量付费,测试通过后释放实例。

3、网络和安全组,选择5M,勾选端口,下一步。

4、系统配置,选中自定义密码,输入登录密码,其他配置选填。

5、分组设置,选填。

6、确认订单,审核订单内容后下单即可。


二、连接服务器

终端工具使用Xshell6免费版,你可以访问官网下载地址,填写邮箱账号,接收邮件,通过邮件中链接下载安装。

官网下载地址:https://www.netsarang.com/en/free-for-home-school/

1、新建会话,填写服务器的IP地址。

2、设置账号和密码。

3、打开刚刚添加的会话,第一次访问时点击“接受并保存”。


三、安装Node.js

从Node.js官网下载最新版的bin包进行安装。

官网下载地址:https://nodejs.org/en/download/

1、先安装wget。(如果已经安装可跳过此步骤)

yum -y install wget

2、下载node最新bin包。(/home/目录将作为工作目录,下载、解压等工作将在此目录下进行。)

cd /home/
wget https://nodejs.org/dist/v12.16.0/node-v12.16.0-linux-x64.tar.xz

3、解压文件。

xz -d node-v12.16.0-linux-x64.tar.xz
tar -xf node-v12.16.0-linux-x64.tar

4、将解压后的文件夹移动到/usr/local/node目录。(/usr/local是用户级的程序目录)

mv node-v12.16.0-linux-x64 /usr/local/node

5、将node、npm、npx链接到/usr/bin目录。

ln -s /usr/local/node/bin/node /usr/bin/node
ln -s /usr/local/node/bin/npm /usr/bin/npm
ln -s /usr/local/node/bin/npx /usr/bin/npx

6、测试是否生效,如果显示版本号则说明安装成功。

node -v
npm -version

7、删除下载的node文件,提示是否删除,输入y回车。(如果你不想删除可跳过此步骤)

rm node-v12.16.0-linux-x64.tar

8、执行效果如下:


四、安装MongoDB数据库

从官网下载最新版的MongoDB。

官网下载地址:https://www.mongodb.com/download-center/community

根据你的系统类型选择安装包,CentOS7选择:

Version:选择最新版

OS:RHEL 7.0 Linux 64-bit x64

Package:TGZ

1、还是在home目录下执行下载。(如果下载速度太慢请跳过此步骤看第下一条)

cd /home/
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-rhel70-4.2.3.tgz

2、MongoDB官网的下载速度太慢,先通过迅雷或百度云下载MongoDB文件,然后通过lrzsz上传到服务器。(如果wget能下载请跳过此步骤)

通过“yum -y install lrzsz”安装lrzsz,通过“rz -y”弹出选择文件对话框,选择已下载的“mongodb-linux-x86_64-rhel70-4.2.3.tgz”进行上传。

yum -y install lrzsz
rz -y

3、上传文件完成后,执行解压命令。

tar -zxvf mongodb-linux-x86_64-rhel70-4.2.3.tgz

4、将解压后的文件夹移动到/usr/local/mongodb目录。(/usr/local是用户级的程序目录)

mv mongodb-linux-x86_64-rhel70-4.2.3 /usr/local/mongodb

5、配置系统文件profile。

vi /etc/profile

文件末尾添加

export MONGODB_HOME=/usr/local/mongodb  
export PATH=$PATH:$MONGODB_HOME/bin

重启系统配置

source /etc/profile

6、创建MongoDB的数据目录和日志文件,并给数据目录权限。

cd /usr/local/mongodb
mkdir -p data/db
chmod -R 777 data/db
mkdir logs
cd logs
touch mongodb.log

7、创建mongodb.conf配置文件。

vi /usr/local/mongodb/bin/mongodb.conf

输入内容

bind_ip=0.0.0.0
port=27017
dbpath=/usr/local/mongodb/data/db
logpath=/usr/local/mongodb/logs/mongodb.log
logappend=true
fork=true
maxConns=500
noauth=true

9、使用配置文件运行。

cd /usr/local/mongodb/bin
./mongod -f mongodb.conf

如果运行错误,请查看日志,并根据日志提示修改配置文件mongodb.conf

cat /usr/local/mongodb/logs/mongodb.log

如果运行成功后,查找mongo,并关闭进程。(如果不关闭mongo,后面创建服务后将无法启动。当然,你稍后再关闭也行。)

ps -ef |grep mongo
kill 11491

10、创建服务。

vi /lib/systemd/system/mongodb.service

输入内容

[Unit]
Description=MongoDB Database Server
Documentation=https://docs.mongodb.org/manual
After=network.target
 
[Service]
Type=forking
User=root
Group=root
ExecStart=/usr/local/mongodb/bin/mongod -f /usr/local/mongodb/bin/mongodb.conf
 
[Install]
WantedBy=multi-user.target

设置服务权限

chmod 754 /lib/systemd/system/mongodb.service

设置开机启动服务

cd /lib/systemd/system/
systemctl enable mongodb.service

启动服务

systemctl start mongodb.service

关闭服务(你暂时不需要执行这些命令)

systemctl stop mongodb.service

查看状态

systemctl status mongodb.service

重新启动服务(你暂时不需要执行这些命令)

systemctl restart mongodb.service

还可以使用以下命令

# 启动服务
service mongodb start
# 查看服务启动状态
service mongodb status
# 停止服务
service mongodb stop
# 重启服务
service mongodb start

11、创建自启动脚本文件。

vi /etc/init.d/mongodb

输入内容

#!/bin/sh
#
#mongod - Startup script for mongod
#
# chkconfig: - 85 15
# description: Mongodb database.
# processname: mongod
# Source function library

. /etc/rc.d/init.d/functions
# things from mongod.conf get there by mongod reading it
# OPTIONS
OPTIONS=" --dbpath=/home/data/mongodb/ --logpath=/home/data/mongodb/mongodb.log --logappend &"
#mongod
mongod="/usr/local/mongodb/bin/mongod"
lockfile=/var/lock/subsys/mongod
start()
{
  echo -n $"Starting mongod: "
  daemon $mongod $OPTIONS
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && touch $lockfile
}
 
stop()
{
  echo -n $"Stopping mongod: "
  killproc $mongod -QUIT
  RETVAL=$?
  echo
  [ $RETVAL -eq 0 ] && rm -f $lockfile
}
 
restart(){
  stop
  start
}
ulimit -n 12000
RETVAL=0
 
case "$1" in
  start)
    start
    ;;
  stop)
    stop
    ;;
  restart|reload|force-reload)
    restart
    ;;
  condrestart)
    [ -f $lockfile ] && restart || :
    ;;
  status)
    status $mongod
    RETVAL=$?
    ;;
  *)
    echo "Usage: $0 {start|stop|status|restart|reload|force-reload|condrestart}"
    RETVAL=1
esac
exit $RETVAL

添加权限

chmod +x /etc/init.d/mongodb

添加启动脚本

cd /etc/init.d/
chkconfig --add mongod

启用启动脚本

命令执行后可能提示:Note: Forwarding request to 'systemctl enable mongodb.service'.

可关闭服务,然后重新启动,看看“cat /usr/local/mongodb/logs/mongodb.log”日志中是否存在错误,如果没有就不要紧。

chkconfig mongodb on

启动服务

service mongodb start

12、删除压缩包(可以不删除)

cd /home/
rm mongodb-linux-x86_64-rhel70-4.2.3.tgz


五、安装Redis远程字典服务

从官网下载最新版的Redis。

官网下载地址:https://redis.io/download

1、在home目录下执行下载命令。

cd /home/
wget http://download.redis.io/releases/redis-5.0.7.tar.gz

2、解压文件。

tar -zxvf redis-5.0.7.tar.gz

3、安装gcc。

yum install gcc

4、执行编译和安装。

cd redis-5.0.7
make PREFIX=/usr/local/redis install

5、修改配置文件。

vi /home/redis-5.0.7/redis.conf

找到daemonize no修改为

daemonize yes

6、复制配置文件。

cp /home/redis-5.0.7/redis.conf /usr/local/redis/bin/

7、复制配置文件。

mkdir /etc/redis
cp /home/redis-5.0.7/redis.conf /etc/redis/6379.conf

8、复制启动命令。

cp /home/redis-5.0.7/utils/redis_init_script /etc/init.d/redisd

修改启动命令

vi /etc/init.d/redisd

找到

EXEC=/usr/local/bin/redis-server
CLIEXEC=/usr/local/bin/redis-cli

修改为

EXEC=/usr/local/redis/bin/redis-server
CLIEXEC=/usr/local/redis/bin/redis-cli

启用服务

chkconfig redisd on

启动服务

service redisd start

停止服务(你暂时不需要执行这些命令)

service redisd stop

9、删除压缩包和解压目录

cd /home/
rm redis-5.0.7.tar.gz
rm -rf redis-5.0.7


六、下载和启动mailsac

1、安装git。

yum install git

2、下载mailsac,将mailsac部署在/home/www目录下

mkdir /home/www
cd /home/www
git clone https://github.com/ruffrey/mailsac.git

3、安装PM2工具。

npm install -g pm2

查看版本,看看是否安装成功。

pm2 -v

执行后提示“-bash: pm2: command not found”,那么需要将pm2的bin链接到/usr/local/bin,如果你的node安装在其他目录,可自行查找。

ln -s /usr/local/node/bin/pm2 /usr/local/bin

此时再查看版本

pm2 -v

设置开机启动和保存命令,后面才会使用到。(你暂时不需要执行)

pm2 startup
pm2 save

关闭并删除所有应用,其他命令可自行查询。(你暂时不需要执行)

pm2 delete all

4、安装项目需要的库。

cd /home/www/mailsac
npm install

5、临时启动命令,先启动一下试试,看看是否会出现错误,如果出错再进行调整。(关闭会话后将停止访问)

npm start
#或者
node app

如果其他进程占用了25和587端口,会导致运行失败。你可尝试以下命令关闭相关进程。

#查找运行进程
ps -ef |grep node
#查看端口占用
netstat -apn|grep :25
netstat -apn|grep :587
netstat -apn|grep :3000
#关闭指定PID的进程
kill 16613

如果一番操作后,仍然启动错误,那么“reboot”重启再检查端口吧。

如果想停止node运行,可按Ctrl+C或Ctrl+Z。

按Ctrl+C强制中断程序的执行,终止进程。

按Ctrl+Z暂停任务,但是此任务并没有结束。

正确运行的效果如下:

6、后台启动命令,网站运行时请用这个命令。(关闭会话后仍可访问)

cd /home/www/mailsac
pm2 start app.js

7、测试访问,当前可通过IP地址加3000端口进行访问,例如:http://47.114.73.106:3000/

访问效果如下:

如果无法访问,你可以检查一下防火墙是否启用相关端口,阿里云的安全策略组是否添加相关端口,主要端口包括:80、25、587、3000。这里我就不在赘述。

检查防火墙相关命令,请自行测试。

#先检查防火墙是否运行
systemctl status firewalld
#如果现实“dead”,那就先启动防火墙
systemctl start firewalld
#再查看状态是否为“running”
systemctl status firewalld
#添加端口
firewall-cmd --zone=public --add-port=3000/tcp --permanent
firewall-cmd --zone=public --add-port=25/tcp --permanent
firewall-cmd --zone=public --add-port=587/tcp --permanent
firewall-cmd --zone=public --add-port=22/tcp --permanent
firewall-cmd --zone=public --add-port=443/tcp --permanent
#重新加载防火墙
firewall-cmd --reload

阿里云安全策略组。

8、运行网站后发现,界面中存在一些问题,右键点击检查,看看什么问题。

查看网页源码后发现引用了谷歌CDN的angular,国内无法访问,所以需要更改链接。

修改脚本引用

vi /home/www/mailsac/views/layout.jade

找到:

https://ajax.googleapis.com/ajax/libs/angularjs/1.3.15/angular.min.js

替换为:

https://cdn.bootcss.com/angular.js/1.3.15/angular.min.js

9、网页中还引用到了谷歌广告的脚本,也需要进行修改。

打开这个文件,删除全部内容保存

vi /home/www/mailsac/views/ad-large-mobile.jade

打开这个文件,删除全部内容保存

vi /home/www/mailsac/views/ad-responsive.jade

10、修改页面中的默认邮箱地址。

打开页面文件,修改内容并保存。

vi /home/www/mailsac/views/choose-inbox.jade

找2个到:

@mailsac.com

都替换为:(你可更换为你自己的域名,例如:ccfuns.com、mail.ccfuns.com、mailsac
.ccfuns.com,关于域名的解析,我将在安装nginx后进行讲解)

@mail.ccfuns.com


六、安装Nginx服务器

由于当前仅能通过IP访问网站,所以需要安装nginx,配置反向代理,为网站指定域名。

1、安装yum-utils。(管理repository及扩展包的工具)

yum install yum-utils

2、添加nginx.repo文件。

vi /etc/yum.repos.d/nginx.repo

设置内容为

[nginx-stable]
name=nginx stable repo
baseurl=http://nginx.org/packages/centos/$releasever/$basearch/
gpgcheck=1
enabled=1
gpgkey=https://nginx.org/keys/nginx_signing.key
 
[nginx-mainline]
name=nginx mainline repo
baseurl=http://nginx.org/packages/mainline/centos/$releasever/$basearch/
gpgcheck=1
enabled=0
gpgkey=https://nginx.org/keys/nginx_signing.key

3、安装nginx。

yum install nginx

4、启用服务。

systemctl enable nginx

5、启动服务。

systemctl start nginx

6、创建网站配置文件。

vi /etc/nginx/conf.d/mail.conf

设置内容

upstream nodejs{
    server localhost:3000;  
    keepalive 64;
}

server {
    listen 80;
    server_name mail.ccfuns.com; 
    location / {
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host  $http_host;
        proxy_set_header X-Nginx-Proxy true;
        proxy_set_header Connection "";
        proxy_pass http://localhost:3000;
    }
}

7、重新加载配置。

nginx -s reload

8、解析域名。

添加域名解析记录。

添加MX解析记录。

MX的主机记录不一定要和网站域名一样,可以是顶层域名(填写“@”),或者二级域名(填写“mail”或其他),MX的记录值要和网站的域名一样。

本示例中使用的是:域名mail.ccfuns.com,邮箱后缀@mail.ccfuns.com。

如果你想使用顶层域名,可以这样配置:

主机记录填写“@”,记录值填写“mail.ccfuns.com”,那么最终域名mail.ccfuns.com,邮箱后缀@ccfuns.com。

9、访问“mail.ccfuns.com”进行测试。

先把网站运行起来

cd /home/www/mailsac
pm2 start app.js

10、访问http://mail.ccfuns.com/,输入“test”点击按钮。

发送邮件测试

查看发送状态

刷新临时邮箱页面。(目前需要刷新页面才能看到新邮件,而官网是可以自动刷新的,考虑到仅是做部署测试,并不打算深究和解决这个问题,毕竟现在已经开始听到鸡叫了。“I want to sleep!”)

点击查看邮件内容。(当前仅能收到文本邮件,无法查看附件。但是附件会编码成base64,你也可以自行解码,点击View headers,查看邮件报文。你也可以将报文内容存储为eml文件,并通过其他邮件软件进行导入。发送较大附件时很慢。仅是测试,也不考虑做附件的二次开发,拜拜!)

11、为确保pm2开机运行,我还需要进行重启测试,和重启后邮件接收测试。

启动app后先保存,然后设置开机启动。

# 如果刚刚执行过启动命令,就不需要执行这2条命令。
cd /home/www/mailsac
pm2 start app.js
# 保存应用列表
pm2 save
# 设置开机启动
pm2 startup

重启服务器。

reboot

服务器启动后,重新访问“http://mail.ccfuns.com/”,如果正确显示则表示自启动成功,重新发送邮件进行测试。如果出现502错误,那么你还需要再次执行上面的4条命令,再重启测试。

完结撒花!