服务器的n种玩法
前段时间心血来潮,租了个服务器和域名,搭好了个人邮箱和这个网站。一是因为一直觉得有个自己专属域名的网站和邮箱是一件很酷的事,二来也是想熟悉一下Linux以及计算机网络相关的知识。这篇博客将记录我搭网站和邮箱的过程,我想以后再搭一个小型的网盘的服务,也将会一并记录在这里,正如这篇博客的名字一样,我想尽可能多地利用服务器玩一些有趣的东西,毕竟已经花了钱了,同时对我这个计算机新手来说也是一个学习的过程。这段时间正值期中,有很多作业要做,我会慢慢将这篇文章更新完。
准备工作
在做这一切之前,我们需要一台服务器和一个域名。域名不是必要的,因为通过ip也可以直接访问到服务器,但如果要搭邮箱的话是一定需要域名才可以收发邮件的;并且没有炫酷的域名,装逼的效果至少少了一半。相对于服务器来说一个普通域名的价格不是很贵,所以可以的话还是尽量买一个炫酷的个性化的域名吧!我的服务器是租的搬瓦工的vps,国内也有腾讯云等等服务器可以选择,但因为使用国内的服务器搭建网站需要备案,所以我首选了国外的服务器。域名是通过namecheap购买的,同样还有Godaddy等等很多选择。
在以下所有操作中,使用的操作系统均为Centos 7 x86_64。
邮箱
网上有许多开源的邮箱服务可以选择,如iRedMail、ExtMail、Zimbra等等。我选择了EwoMail的开源版,因为他看上去比较好搭,不过对于其他的邮箱应该过程也会差不多。
在docker中运行EwoMail
EwoMail的官方文档中,有一个要求:“Centos 7/8系统64位,服务器需要干净环境,要求全新干净系统,不能安装在已有的Nginx,MySQL的环境中。”刚开始我不太信邪,我想要在安装EwoMail后再自己安装一个Nginx服务作为主要的反向代理,一直监听80和443端口,将不同的请求转发到不同端口。比如如果是mail.waynez.me的请求,就转发到8080端口,如果是waynez.me的请求,就返回我的博客主页,这样我可以在一台服务器上同时布置邮箱的博客的服务。但当我按照EwoMail文档安装后,发现里面集成了好了Nginx和MySQL的服务,而这会和我自己想要的Nginx产生冲突,也就是为什么会文档中会要求不能安装在已有的Nginx,MySQL的环境中。我觉得这是个很不人性化的设计,这就意味着我在这台服务器上搭了邮箱后就不能再做其他的事情了。这时我想到docker也许是个解决方法,将EwoMail放在docker中,这样不会对我的其他的环境造成影响。我可以在docker外面再安装一个Nignx,作为主要的请求代理,如果监听到是对mail.waynez.me的请求,就可以将请求转发到docker中的EwoMail的对应的监听端口。
docker的安装过程很简单,使用官方脚本自动安装:
|
|
安装好之后启动docker:
|
|
搜索一下有没有制作好的EwoMail镜像可以直接用:
|
|
我们就直接使用第一个bestwu/ewomail的镜像:
|
|
下载好后,使用docker images
应该就能看到刚刚下载的镜像。
确认下载没问题后,使用下面的命令来运行docker:
|
|
和官方给的命令比起来,我修改了一个小地方:把-p 80:80
改成了-p 8081:80
,也就是把docker的80端口映射到了主机的8081端口。这是因为之前所说的,我会在docker外装一个Nginx作为主要的反向代理,所以主机的80端口会一直被外面的Nginx监听。把docker内的80端口映射到其他不太重要的端口,就可以通过Nginx将请求转发到对应的端口,这样我就不需要修改docker里面的配置,简单地通过指定端口映射达到我想要的目的。
关于各个端口的作用,可以参考以下说明:
- 25端口为SMTP(Simple Mail Transfer Protocol,简单邮件传输协议)服务所开放的,是用于发送邮件。
- 109端口是一个POP3(Post Office Protocol Version 3,邮局协议3)服务器端口,用于接收邮件,客户端访问服务器端的邮件服务。POP3服务器开放此端口,用于接收邮件,客户端访问服务器端的邮件服务。
- 110端口是为POP3服务开放的,是用于接收邮件的。
- 143端口是为IMAP(INTERNET MESSAGE ACCESS PROTOCOL)服务开放的,是用于接收邮件的。
- 465端口是为SMTPS(SMTP-over-SSL)协议服务开放的,这是SMTP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。SMTPS和SMTP协议一样,也是用来发送邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件发送者抗抵赖功能。防止发送者发送之后删除已发邮件,拒不承认发送过这样一份邮件。
- 587端口是现代网络上SMTP提交的默认端口。
- 993端口是为IMAPS(IMAP-over-SSL)协议服务开放的,这是IMAP协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。IMAPS和IMAP协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。
- 995端口是为POP3S(POP3-over-SSL)协议服务开放的,这是POP3协议基于SSL安全协议之上的一种变种协议,它继承了SSL安全协议的非对称加密的高度安全可靠性,可防止邮件泄露。POP3S和POP3协议一样,也是用来接收邮件的,只是更安全些,防止邮件被黑客截取泄露,还可实现邮件接收方抗抵赖功能。防止收件者收件之后删除已收邮件,拒不承认收到过这样一封邮件。
- 8081端口为邮箱登录入口,8080端口为邮箱管理入口。
到这里,如果没有问题的话,邮箱服务就已经搭好啦!通过8080端口可以访问邮箱管理后台http://server-domain-or-ip:8080,默认用户是admin,默认密码是ewomail123。进入后台管理后,我们可以管理邮箱并为邮箱创建新的账号。
添加域名解析MX记录和A记录
现在我们已经有了邮箱的账号,要怎么登录进去呢?因为我们刚刚把登录的80端口映射到了主机的8081端口,所以可以通过http://server-domain-or-ip:8081进入邮箱登录界面,使用上一过程中创建的账号就可以登录啦!但是现在有两个问题:1)因为我们没有为邮箱绑定域名,现在其他主机是访问不到这个邮箱的服务的,我们既不能收邮件也不能发邮件;2)如果每次只能通过http://server-domain-or-ip:8081登录邮箱的话就太不炫酷了,我想和mail.qq.com、mail.163.com一样,能通过一个专属域名不加端口号就能访问到这个登录界面。
为了解决这两个问题,我们需要在域名中添加解析。还记得我们在准备工作中买的域名吗?现在我们打开域名的管理界面,一般在购买的平台都能找到管理域名的入口,比如我是在namecheap上买的,那么在Domain List -> MANAGE -> Advanced DNS
就可以看到DNS的管理界面了。
为了让我们的邮箱服务可以正常收发邮件,我们需要添加一条MX记录。例如,当有人发邮件给vincen@example.com时,系统将对example.com进行DNS中的MX记录解析。如果MX记录存在,系统就根据MX记录的优先级,将邮件转发到与该MX相应的邮件服务器上。
首先我们添加一条MX记录。如果希望将主域名作为邮箱名的话,Host填@
,这样我的邮箱将会是example@waynez.me的形式。Value为主机地址,需要注意的是,Value必须是可以在DNS中解析的主机,而不能是ip,原因可以参考这里。因此我们需要先填一条A记录,比如将waynez.me解析为我的服务器地址,那么MX记录里的Value我就可以填waynez.me。优先级随便填,比如5。MX优先级用来指定邮件服务器接收邮件的先后顺序,数值越小优先级越高。因为我们只添加一条MX记录,所以MX优先级没有意义。
现在我们再添加一条A记录,用于邮箱登录。我想将mail.waynez.me作为邮箱登录的域名,因此在Host中填mail,在Value中填写服务器的ip地址,这样就会将mail.waynez.me解析到我的服务器ip上面了。
下载并配置Nginx
DNS记录添加好后,现在需要用Nginx在服务器上作为反向代理,将不同请求转发给对应的端口。Nginx不在默认的yum源中,因此我们先安装一个有Nginx的epel源:
|
|
然后安装Nginx:
|
|
添加开机启动并启动Nginx:
|
|
输入systemctl status nignx
可以查看现在在状态,显示running就表示Nginx已经运行了,现在需要对Nginx进行配置,配置文件是/etc/nginx/nginx.conf
,我们查看文件,可以看到有这样一句:include /etc/nginx/conf.d/*.conf;
,这表示在读取这个配置文件时,会加载/etc/nginx/conf.d/
目录下所有以.conf
结尾的文件。
我们可以直接在这个文件里面更改配置,也可以在/etc/nginx/conf.d/
目录下修改,为了便于管理,我们进入/etc/nginx/conf.d/
目录为每个子域名分别创建一个文件。
|
|
将以下配置写入mail.conf
:
|
|
这表示Nginx会一直监听80端口,如果是访问mail.your.domain的请求,就转发给8081端口。之前我们将8081端口映射给了ewomail docker中的80端口,因此在浏览器中打开mail.your.domain就可以访问到邮箱登录界面了。到这里,邮箱已经可以正常收发邮件了。
关闭邮箱的杀毒服务
我的服务器内存只有1个G,前两天服务器的内存突然爆掉,我试着重启了几次,但只要一启动邮箱的docker,内存很快就再爆掉。使用top
命令可以看到,一个叫做clamd的服务占用了大量的内存,导致机器瘫痪。我通过搜索才知道,这是ewomail里面带有的一个杀毒服务,很会占用内存,因此在我的服务器内存不太够用的情况下,需要把他关掉。我首先docker exec -it ewomail bash
进入ewomail的docker中,使用kill
命令杀死了这一进程,防止服务器再次崩溃,然后按照官网的说明关闭了杀毒服务。
博客
我使用了Hugo来搭建我的博客,他是一种基于Go语言的静态网站生成器,快速、安全、易于部署且方便管理。
在服务器上安装Hugo
因为Hugo是基于Go的,所以我们要先安装Go:
|
|
如果能通过go version
看到以下输入的Go的版本,说明安装成功。
接下来添加Hugo的源,vim /etc/yum.repos.d/hugo.repo
后输入以下内容并保存:
|
|
执行并安装Hugo:
|
|
输入hugo version
如果能输入如下的版本信息,说明Hugo就安装好啦。