Pages

Sunday, 24 May 2020

替Freenom域名自动续期

freenom域名自动续期。
Build Status Php Version Scrutinizer Code Quality MIT License
Documentation: English version | 中文版

前言

众所周知,Freenom是地球上唯一一个提供免费顶级域名的商家,不过需要每年续期,每次续期最多一年。由于我申请了一堆域名,而且不是同一时段申请的, 所以每次续期都觉得折腾,于是就写了这个自动续期的脚本。

效果

邮件示例
无论是续期成败或者脚本执行出错,都会收到的程序发出的邮件。如果是续期成败相关的邮件,邮件会包括未续期域名的到期天数等内容。 邮件参考了微信发送的注销公众号的邮件样式。

事前准备

  • 发信邮箱:为了方便理解又称机器人邮箱,用于发送通知邮件。目前支持GmailQQ邮箱以及163邮箱,程序会自动判断发信邮箱类型并使用合适的配置。推荐使用Gmail
  • 收信邮箱:用于接收机器人发出的通知邮件。推荐使用QQ邮箱QQ邮箱唯一的好处只是收到邮件会在QQ弹出消息。
  • VPS:随便一台服务器都行,系统推荐Centos7,另外PHP版本需在php7.1及以上。
  • 没有了

配置发信邮箱

下面分别介绍GmailQQ邮箱以及163邮箱的设置,你只用看自己需要的部分。注意,QQ邮箱163邮箱均使用账户加授权码的方式登录, 谷歌邮箱使用账户加密码的方式登录,请知悉。另外还想吐槽一下,国产邮箱你得花一毛钱给邮箱提供方发一条短信才能拿到授权码。

设置Gmail


1、在设置>转发和POP/IMAP中,勾选
  • 对所有邮件启用 POP
  • 启用 IMAP
gmail配置01
然后保存更改。
2、允许不够安全的应用
登录谷歌邮箱后,访问谷歌权限设置界面,启用允许不够安全的应用。
gmail配置02
另外,若遇到提示
不允许访问账户
登录谷歌邮箱后,去gmail的这个界面点击允许。这种情况较为少见。

设置QQ邮箱


设置>账户>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务下,开启POP3/SMTP服务
qq邮箱配置01
此时坑爹的QQ邮箱会要求你用手机发送一条短信给腾讯,发送完了点一下我已发送
qq邮箱配置02
然后你就能看到你的邮箱授权码了,使用邮箱账户加授权码即可登录,记下授权码
qq邮箱配置03
qq邮箱配置04

设置163邮箱


设置>POP3/SMTP/IMAP下,开启POP3/SMTP服务IMAP/SMTP服务并保存
163邮箱配置01
163邮箱配置02
现在点击侧边栏的客户端授权密码,并获取授权码,你看到画面可能和我不一样,因为我已经获取了授权码,所以只有重置授权码按钮,这里自己根据网站提示申请获取授权码,网易和腾讯一样恶心,需要你用手机给它发一条短信才能拿到授权码
163邮箱配置03

Telegram bot


上面介绍了三种邮箱的设置方法,如果你不想使用邮件推送,也可以使用 Telegram bot,灵活配置。在config.php文件中,将telegram下的 enable的值改为true,即可启用 Telegram bot,同样的,将mail下的enable的值改为false即可关闭邮件推送方式。 Telegram bot 对应两个配置值,一个是chatID,通过使用你的 Telegram 账户发送/start@userinfobot即可以获取自己的id,另一个是 token,你的 Telegram bot 令牌,你会创建 Telegram bot 就知道怎么获取,不多赘述。 如何创建一个 Telegram bot 请参考官方文档:点我了解
与通知相关的设置到此就完成了,下面可以愉快的配置本程序了 :)

配置脚本

所有操作均在Centos7系统下进行,其它Linux发行版大同小异

获取源码

$ mkdir -p /data/wwwroot/freenom
$ cd /data/wwwroot/freenom

# clone本仓库源码
$ git clone https://github.com/luolongfei/freenom

配置过程

# 复制配置文件模板
$ cp .env.example .env

# 编辑配置文件
$ vim .env

# .env文件里每个项目都有详细的说明,这里不再赘述,简言之,你需要把里面所有项都改成你自己的。需要注意的是多账户配置的格式:
# e.g. MULTIPLE_ACCOUNTS='<账户1>@<密码1>|<账户2>@<密码2>|<账户3>@<密码3>'
# 当然,若你只有单个账户,只配置FREENOM_USERNAME和FREENOM_PASSWORD就够了,单账户和多账户的配置会被合并在一起读取并去重。

# 编辑完成后,按“Esc”回到命令模式,输入“:wq”回车即保存并退出,不会用vim编辑器的问下谷歌大爷:)

添加计划任务

安装crontabs以及cronie

$ yum -y install cronie crontabs

# 验证crond是否安装及启动
$ yum list cronie && systemctl status crond

# 验证crontab是否安装
$ yum list crontabs $$ which crontab && crontab -l
打开任务表单,并编辑
$ crontab -e

# 任务内容如下
# 此任务的含义是在每天早上9点执行/data/wwwroot/freenom/路径下的run文件
# 注意:某些情况下,crontab可能找不到你的php路径,下面的命令执行后会在freenom_crontab.log文件输出错误信息,你应该指定php路径:把下面的php替换为/usr/local/php/bin/php(根据实际情况)
00 09 * * * cd /data/wwwroot/freenom/ && php run > freenom_crontab.log 2>&1
重启crond守护进程(每次编辑任务表单后都需此步,以使任务生效)
$ systemctl restart crond
若要检查计划任务是否正常,你可以将上面的任务执行时间设置在几分钟后,然后等到任务执行完成, 检查/data/wwwroot/freenom/目录下的freenom_crontab.log文件内容,是否有报错信息。常见的错误信息如下:
  • /bin/sh: php: command not found
  • /bin/sh: /usr/local/php: Is a directory
解决方案:
先执行
# 确定php的位置,一般输出为“php: /usr/local/php /usr/local/php/bin/php”,选长的那个即:/usr/local/php/bin/php
$ whereis php
现在我们知道php的路径是/usr/local/php/bin/php(根据你自己系统的实际情况,可能不同),然后修改表单任务里的命令,把
00 09 * * * cd /data/wwwroot/freenom/ && php run > freenom_crontab.log 2>&1
改为
00 09 * * * cd /data/wwwroot/freenom/ && /usr/local/php/bin/php run > freenom_crontab.log 2>&1
更多参考:点这里
当然,如果你的计划任务能正确找到php路径,没有错误,那你什么也不用做。
至此,所有的配置都已经完成,下面我们验证一下整个流程是否走通:)

验证

你可以先将config.php中的noticeFreq的值改为1(即每次执行都发邮件通知),然后执行
$ cd /data/wwwroot/freenom/ && php run
不出意外的话,你将收到一封关于域名情况的邮件。
遇到任何问题或bug欢迎提issues,如果freenom改变算法导致此项目失效, 请提issues告知,我会及时修复,本项目长期维护。欢迎star~

信仰

2020年,这个世界会好吗?
认真是我们参与这个社会的方式,认真是我们改变这个社会的方式。 ——李志
from https://github.com/luolongfei/freenom

No comments:

Post a Comment