Skip to content

77mark/freenom

Repository files navigation

Freenom:freenom域名自动续期

Build Status Php Version Scrutinizer Code Quality MIT License

Documentation: English version | 中文版

📃 前言

🍭 效果

🎁 事前准备

📪 配置发信邮箱

🚧 配置脚本

🎈 添加计划任务

☕ 验证

🤣 本项目最简单的使用方法

🍺 信仰

❤ 捐赠 Donate

📋 捐赠名单 Donate List

🌚 作者

🎉 鸣谢

🥝 开源协议

📃 前言

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

🍭 效果

邮件示例

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

🎁 事前准备

  • 发信邮箱:为了方便理解又称机器人邮箱,用于发送通知邮件。目前支持GmailQQ邮箱以及163邮箱,程序会自动判断发信邮箱类型并使用合适的配置。推荐使用Gmail
  • 收信邮箱:用于接收机器人发出的通知邮件。推荐使用QQ邮箱QQ邮箱唯一的好处只是收到邮件会在QQ弹出消息。
  • VPS:随便一台服务器都行,系统推荐Centos7,另外PHP版本需在php7.1及以上。(注:没有 VPS 也行,本项目支持在 Github Actions 上执行,完全白嫖,具体使用方法请参考「 🤣 本项目最简单的使用方法 」)
  • 没有了

📪 配置发信邮箱

下面分别介绍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,灵活配置。在.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会为项目创建一个虚拟环境,并在执行后自动销毁。

只需简单 6 步

1、Fork 本仓库

2、在你 Fork 的本仓库下的 Settings -> Secrets 页面追加以下几个secret秘密环境变量

点我查看需要添加的具体秘密变量
变量名 含义 默认值 是否必须 备注
FREENOM_USERNAME freenom 账户 - 只支持邮箱账户,不支持也不打算支持第三方社交账户登录
FREENOM_PASSWORD freenom 密码 - 某些特殊字符可能需要转义,在Github actions环境,请在除字母数字以外的字符前加上“\”,否则可能无法正确读取密码,此举是防止某些字符在shell命令行被解析,举个例子,比如我密码是fei.,:!~@#$%^&*?233-_abcd^$$,那么写到秘密变量时就应写为fei\.\,\:\!\~\@\#\$\%\^\&\*\?233\-\_abcd\^\$\$。而在普通VPS环境,则只用在密码中的“#”或单双引号前加“\”,请参考.env.example文件内的注释,应该没人会设置那么变态的密码吧
MULTIPLE_ACCOUNTS 多账户支持 - 多个账户和密码的格式必须是“<账户1>@<密码1>|<账户2>@<密码2>|<账户3>@<密码3>”,如果设置了多账户,上面的FREENOM_USERNAMEFREENOM_PASSWORD可不设置
MAIL_USERNAME 机器人邮箱账户 - 支持GmailQQ邮箱以及163邮箱,尽可能使用163邮箱或者QQ邮箱,而非之前推荐的Gmail。因为谷歌的安全机制,每次在新设备登录 Gmail 都会先被限制,需要手动解除限制才行,而Github Actions每次创建的虚拟环境都会分配一个新的设备IP,相当于每次都是从新设备登录Gmail,而我们不可能每次都去手动为Gmail解除登录限制,所以这种机制会导致无法发出通知邮件。具体的配置方法参考「 配置发信邮箱
MAIL_PASSWORD 机器人邮箱密码 - Gmail填密码,QQ邮箱163邮箱填授权码
TO 接收通知的邮箱 - 你自己最常用的邮箱,推荐使用QQ邮箱,用来接收机器人邮箱发出的域名相关邮件
MAIL_ENABLE 是否启用邮件推送功能 true true:启用
false:不启用
默认启用,如果设为false,不启用邮件推送功能,则上面的MAIL_USERNAMEMAIL_PASSWORDTO变量变为非必须,可不设置
TELEGRAM_CHAT_ID 你的chat_id - 通过发送/start@userinfobot可以获取自己的id
TELEGRAM_BOT_TOKEN 你的Telegram bottoken -
TELEGRAM_BOT_ENABLE 是否启用Telegram Bot推送功能 false true:启用
false:不启用
默认不启用,如果设为true,则必须设置上面的TELEGRAM_CHAT_IDTELEGRAM_BOT_TOKEN变量
NOTICE_FREQ 通知频率 1 0:仅当有续期操作的时候
1:每次执行

(注:你只用关注上面表格中的必须项,非必须项可不设置,将保持默认值。更多相关变量的含义、格式以及默认值,请参考本项目的.env.example文件内的注释)

设置秘密环境变量

新建变量画面

3、同意启用 Actions

同意启用 Actions

4、修改项目 README.md 文件内容并提交一次,解决 Github Actions 计划任务的 Bug

修改 README.md 文件 01

修改 README.md 文件 02

5、查看执行详情

查看执行详情 01

查看执行详情 02

查看执行详情 03

6、心里默念作者最帅,给个star并把本项目推荐给更多的人,用的人越多作者更新的动力越足

好了,做完上面六步后就不需要其它任何操作了。现在每天上午十点左右Github Actions会自动触发执行本项目,注意查收域名相关邮件。


遇到任何问题或 Bug 欢迎提 issues (请按模板格式提issues,以便作者更快复现你的问题), 如果Freenom改变算法导致此项目失效,请提 issues 告知,我会及时修复,本项目长期维护。 欢迎star~

🍺 信仰

南京市民李先生

认真是我们参与这个社会的方式,认真是我们改变这个社会的方式。 ——李志

❤ 捐赠 Donate

如果你觉得本项目真的有帮助到你并且想回馈作者,感谢你的捐赠。

Every time you spend money, you're casting a vote for the kind of world you want. -- Anna Lappe

pay

每一次你花的钱都是在为你想要的世界投票。

你的star或者小额打赏是我长期维护此项目的动力所在,由衷感谢每一位支持者,“每一次你花的钱都是在为你想要的世界投票”。

📋 捐赠名单 Donate List

非常感谢「 这些用户 」对本项目的捐赠支持!

🌚 作者

🎉 鸣谢

🥝 开源协议

MIT

About

freenom域名自动续期

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published