📃
前言
众所周知,Freenom是地球上唯一一个提供免费顶级域名的商家,不过需要每年续期,每次续期最多一年。由于我申请了一堆域名,而且不是同一时段申请的, 所以每次续期都觉得折腾,于是就写了这个自动续期的脚本。
🍭
效果
无论是续期成败或者脚本执行出错,都会收到的程序发出的邮件。如果是续期成败相关的邮件,邮件会包括未续期域名的到期天数等内容。 邮件参考了微信发送的注销公众号的邮件样式。
🎁
事前准备
- 发信邮箱:为了方便理解又称机器人邮箱,用于发送通知邮件。目前支持
Gmail
、QQ邮箱
以及163邮箱
,程序会自动判断发信邮箱类型并使用合适的配置。推荐使用Gmail
。 - 收信邮箱:用于接收机器人发出的通知邮件。推荐使用
QQ邮箱
,QQ邮箱
唯一的好处只是收到邮件会在QQ
弹出消息。 - VPS:随便一台服务器都行,系统推荐
Centos7
,另外PHP版本需在php7.1
及以上。(注:没有 VPS 也行,本项目支持在 Github Actions 上执行,完全白嫖,具体使用方法请参考「🤣 本项目最简单的使用方法 」) - 没有了
📪
配置发信邮箱
下面分别介绍Gmail
、QQ邮箱
以及163邮箱
的设置,你只用看自己需要的部分。注意,QQ邮箱
与163邮箱
均使用账户加授权码的方式登录, 谷歌邮箱
使用账户加密码的方式登录,请知悉。另外还想吐槽一下,国产邮箱你得花一毛钱给邮箱提供方发一条短信才能拿到授权码。
(点击即可展开或收起)
设置Gmail
1、在设置>转发和POP/IMAP
中,勾选
- 对所有邮件启用 POP
- 启用 IMAP
然后保存更改。
2、允许不够安全的应用
登录谷歌邮箱后,访问 谷歌权限设置界面 ,启用允许不够安全的应用。
另外,若遇到提示
不允许访问账户
登录谷歌邮箱后,去 gmail的这个界面 点击允许。这种情况较为少见。
设置QQ邮箱
在设置>账户>POP3/IMAP/SMTP/Exchange/CardDAV/CalDAV服务
下,开启POP3/SMTP服务
此时坑爹的QQ邮箱会要求你用手机发送一条短信给腾讯,发送完了点一下我已发送
然后你就能看到你的邮箱授权码了,使用邮箱账户加授权码即可登录,记下授权码
设置163邮箱
在设置>POP3/SMTP/IMAP
下,开启POP3/SMTP服务
和IMAP/SMTP服务
并保存
现在点击侧边栏的客户端授权密码
,并获取授权码,你看到画面可能和我不一样,因为我已经获取了授权码,所以只有重置授权码
按钮,这里自己根据网站提示申请获取授权码,网易和腾讯一样恶心,需要你用手机给它发一条短信才能拿到授权码
Telegram bot
上面介绍了三种邮箱的设置方法,如果你不想使用邮件推送,也可以使用 Telegram bot,灵活配置。在.env
文件中, 将TELEGRAM_BOT_ENABLE
的值改为true
,即可启用 Telegram bot,同样的,将MAIL_ENABLE
的值改为false
即可关闭邮件推送方式。 Telegram bot 有两个配置项,一个是chatID
(对应.env
文件中的TELEGRAM_CHAT_ID
), 通过使用你的 Telegram 账户发送/start
给@userinfobot
即可以获取自己的id, 另一个是token
(对应.env
文件中的TELEGRAM_BOT_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.git ./
配置过程
# 复制配置文件模板
$ 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
(点击即可展开或收起)
解决方案
执行
$ whereis php # 确定php的位置,一般输出为“php: /usr/local/php /usr/local/php/bin/php”,选长的那个即:/usr/local/php/bin/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路径
,没有错误,那你什么也不用做。
至此,所有的配置都已经完成,下面我们验证一下整个流程是否走通:)
☕
验证
你可以先将.env
中的NOTICE_FREQ
的值改为1(即每次执行都推送通知),然后执行
$ cd /data/wwwroot/freenom/ && php run
不出意外的话,你将收到一封关于域名情况的邮件。
🤣
本项目最简单的使用方法
上面说了一堆都是基于你有自己的VPS
的情况下,如果没有VPS
又想自动续期Freenom
的域名,或者单纯不想配置那么多东西, 可以直接在Github Actions
上跑本项目,Github Actions
会为项目创建一个虚拟环境,并在执行后自动销毁。
只需简单 3 步
1、Fork 本仓库
2、在你 Fork 的本仓库下的 Settings
-> Secrets
页面追加以下几个secret
变量
FREENOM_USERNAME、FREENOM_PASSWORD、MULTIPLE_ACCOUNTS、MAIL_USERNAME、MAIL_PASSWORD、TO、MAIL_ENABLE、TELEGRAM_CHAT_ID、 TELEGRAM_BOT_TOKEN、TELEGRAM_BOT_ENABLE、NOTICE_FREQ
(注:此处列出了所有可用的变量名,不配置则保持默认值,每个变量具体的含义以及格式或默认值请参考本项目的.env.example
文件内的注释。另一个需要注意的是,MAIL_USERNAME
、MAIL_PASSWORD
(即发信机器人邮箱)尽可能使用163邮箱
或者QQ邮箱
,而非之前推荐的Gmail
。 因为谷歌的安全机制,每次在新设备登录 Gmail
都会先被限制,需要手动解除限制才行, 而Github Actions
每次创建的虚拟环境都会分配一个新的设备IP
,相当于每次都是从新设备登录Gmail
, 而我们不可能每次都去手动为Gmail
解除登录限制,所以这种机制会导致无法发出通知邮件)
3、心里默念作者好帅,给个star
并把本项目推荐给更多的人(用的人越多,作者更新的动力越足),将省下的买VPS
的巨款「 打赏一点儿 」给作者
好了,做完上面三步后就不需要其它任何操作了。现在每天上午十点左右Github Actions
会自动触发执行本项目,注意查收域名相关邮件。
遇到任何问题或 Bug 欢迎提 issues (请按模板格式提issues
,以便作者更快复现你的问题), 如果Freenom
改变算法导致此项目失效,请提 issues 告知,我会及时修复,本项目长期维护。 欢迎star
~
🍺
信仰
认真是我们参与这个社会的方式,认真是我们改变这个社会的方式。 ——李志
❤
捐赠 Donate
如果你觉得本项目真的有帮助到你并且想回馈作者,感谢你的捐赠。
https://www.paypal.me/mybsdc
PayPal:Every time you spend money, you're casting a vote for the kind of world you want. -- Anna Lappe
你的star或者小额打赏是我长期维护此项目的动力所在,由衷感谢每一位支持者,“每一次你花的钱都是在为你想要的世界投票”。
📋
捐赠名单 Donate List
非常感谢「 这些用户 」对本项目的捐赠支持!
🌚
作者
- 主程序以及框架:@luolongfei
- 英文版文档:@肖阿姨