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条命令,再重启测试。