/freenom-1

Freenom 域名自动续期。Freenom domain name renews automatically.

Primary LanguagePHPMIT LicenseMIT

freenom logo

Freenom:freenom域名自动续期

PHP version Docker pulls GitHub stars MIT license

Documentation: English version | 中文版

📢 注意

🌿 特别感谢 Special Thanks

📃 引言

🍭 效果

🎁 事前准备

📪 配置送信功能(支持 邮件送信 / Telegram Bot / 企业微信 / Server 酱 / Bark 等送信方式)

🐳 通过 Docker 方式部署(推荐,最简单的部署方式之一)

🚈 通过 Railway 部署(推荐没有自己服务器的用户使用此方案)

🧊 通过 Heroku 部署

☁ 通过 各种云函数 部署

🚧 直接拉取源码部署

📋 赞助名单 Donation List

❤ 赞助 Donation

🪓 信仰

🌚 作者

💖 所有贡献者

📝 TODO List

📰 更新日志(每次新版本发布,可以参考此日志决定是否更新)

🎉 鸣谢

🥝 开源协议

📢 注意

🌿 特别感谢 Special Thanks

感谢 JetBrains 提供的非商业开源软件开发授权。

Thanks for non-commercial open source development authorization by JetBrains.

JetBrains Logo (Main) logo.

📃 引言

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

🍭 效果

邮件示例

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

🎁 事前准备

  • VPS:随便一台服务器都行,系统推荐DebianPHP版本需在php7.3及以上,如果有Docker环境则可无视这个限制。如果你没有服务器,可参考本文档部署到各种免费环境中。
  • 送信邮箱(可选):为了方便理解又称机器人邮箱,用于发送通知邮件。目前针对GmailQQ邮箱163邮箱以及Outlook邮箱,程序会自动判断送信邮箱类型并使用合适的配置。 如果你使用的是其它第三方邮箱或者自建邮件服务,那么请参考 .env.example 文件中与邮件配置相关的注释进行配置。
  • 收信邮箱(可选):用于接收机器人发出的通知邮件。
  • 上面的送信邮箱收信邮箱是可选项,因为目前程序已支持邮件送信 / Telegram Bot / 企业微信 / Server 酱 / Bark等送信方式,仅当你使用邮件送信的时候,送信邮箱收信邮箱 才是必须的,其它送信方式所需请参考下面的 配置送信功能
  • 耐心。

📪 配置送信功能

此处会分别介绍邮件送信 / Telegram Bot / 企业微信 / Server 酱 / Bark送信方式的配置方法,以及其所需的资料,你可以任选一种送信方式进行配置,直接跳到对应的文档查看即可。 如果你是 IOS 用户,推荐使用 Bark 送信方式,其它平台的用户根据自己喜好选择可接受的送信方式即可。不太推荐使用Server 酱送信,Server 酱每日送信条数的限制,以及需要开会员才能直接看到送信内容,否则需要跳到 Server 酱 网站才能查看内容,都是不推荐的原因。同样的配置完全可以直接使用企业微信送信方式,企业微信送信直接在普通微信客户端就能看到信件内容。

快速到文档指定位置:

邮件送信

Telegram Bot

企业微信

Server 酱

Bark 送信

邮件送信

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

(点击即可展开或收起)

设置Gmail

1、在设置>转发和POP/IMAP中,勾选

  • 对所有邮件启用 POP
  • 启用 IMAP

gmail配置01

然后保存更改。

2、允许不够安全的应用

推荐打开浏览器隐私模式后再登录 gmail 进行设置,防止当你有多个 gmail 账户时无法跳到正确的设置地址。

登录谷歌邮箱后,访问 谷歌权限设置界面 ,启用允许不够安全的应用。

gmail配置02

另外,若遇到提示

不允许访问账户

登录谷歌邮箱后,去 gmail的这个界面 点击允许。这种情况较为少见。

注意:由于直接使用 gmail 密码登录容易触发谷歌安全机制,故推荐参考官方文档启用应用专用密码:https://support.google.com/mail/answer/185833?hl=zh-Hans

使用账户+应用专用密码登录,就算频繁换 ip 登录 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

163 邮箱送信后,接收方如果没收到可以在垃圾邮件里面找一下。


上面的动作完成后,在.env文件中,将MAIL_USERNAMEMAIL_PASSWORD设置为你的邮箱和密码(或令牌),将TO设置为你的收信邮箱,然后将MAIL_ENABLE的值设为1以启用邮箱送信功能。

上面介绍了三种邮箱的设置方法,如果你不想使用邮件送信,将根目录下的.env文件中的MAIL_ENABLE的值改为0即可关闭邮件推送方式。

邮件 送信部分完。

Telegram Bot

有关 【Telegram Bot】 的具体配置步骤请参考 此处

企业微信

有关 【企业微信】 的具体配置步骤请参考 此处

Server 酱

有关 【Server 酱】 的具体配置步骤请参考 此处

Bark 送信

有关 【Bark 送信】 的具体配置步骤请参考 此处


与 配置送信功能 相关的篇幅完。下面开始讲本项目的几种使用方式。推荐使用 Docker 方式,无需纠结环境。


🐳 通过 Docker 部署

如果你有自己的服务器,这是最推荐的部署方式。

Docker 仓库地址为: https://hub.docker.com/r/luolongfei/freenom ,同样欢迎 star 。 此镜像支持的架构为linux/amd64linux/arm64linux/ppc64lelinux/s390xlinux/386linux/arm/v7linux/arm/v6, 理论上支持群晖威联通树莓派以及各种类型的VPS

1、安装 Docker

1.1 以 root 用户登录,执行一键脚本安装 Docker

升级源并安装软件(下面两行命令二选一,根据你自己的系统)

Debian / Ubuntu

apt-get update && apt-get install -y wget vim

CentOS

yum update && yum install -y wget vim

执行此命令等候自动安装 Docker

wget -qO- get.docker.com | bash

说明:请使用 KVM 架构的 VPS,OpenVZ 架构的 VPS 不支持安装 Docker,另外 CentOS 8 不支持用此脚本来安装 Docker。 更多关于 Docker 安装的内容参考 Docker 官方安装指南

1.2 针对 Docker 执行以下命令

启动 Docker 服务

systemctl start docker

查看 Docker 运行状态

systemctl status docker

将 Docker 服务加入开机自启动

systemctl enable docker

2、通过 Docker 部署域名续期脚本

2.1 用 Docker 创建并启动容器

命令如下

docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs luolongfei/freenom

或者,如果你想自定义脚本执行时间,则命令如下

docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs -e RUN_AT="11:24" luolongfei/freenom

上面这条命令只比上上条命令多了个 -e RUN_AT="11:24",其中11:24表示在北京时间每天的 11:24 执行续期任务,你可以自定义这个时间。 这里的RUN_AT参数同时也支持 CRON 命令里的时间形式,比如, -e RUN_AT="9 11 * * *",表示每天北京时间 11:09 执行续期任务, 如果你不想每天执行任务,只想隔几天执行,只用修改RUN_AT的值即可。

注意:不推荐自定义脚本执行时间。因为你可能跟很多人定义的是同一个时间点,这样可能导致所有人都是同一时间向 Freenom 的服务器发起请求, 使得 Freenom 无法稳定提供服务。而如果你不自定义时间,程序会自动指定北京时间 06 ~ 23 点全时段随机的一个时间点作为执行时间, 每次重启容器都会自动重新指定。

点我查看上方 Docker 命令的参数解释
命令 含义
docker run 开始运行一个容器
-d 参数 容器以后台运行并输出容器 ID
--name 参数 给容器分配一个识别符,方便将来的启动,停止,删除等操作
--restart 参数 配置容器启动类型,always 即为 docker 服务重新启动时自动启动本容器
-v 参数 挂载卷(volume),冒号后面是容器的路径,冒号前面是宿主机的路径(只支持绝对路径),$(pwd)表示当前目录,如果是 Windows 系统,则可用${PWD}替换此处的$(pwd)
-e 参数 指定容器中的环境变量
luolongfei/freenom 这是从 docker hub 下载回来的镜像完整路径名

至此,你的自动续期容器就跑起来了,执行ls -a后你就可以看到在你的当前目录下,有一个.env文件和一个logs目录,logs目录里面存放的是程序日志, 而.env则是配置文件,现在直接执行vim .env.env文件里的所有配置项改为你自己的并保存即可。然后重启容器,如果配置正确的话,便很快可以收到相关邮件。

点我查看 .env 文件中部分配置项的含义
变量名 含义 默认值 是否必须 备注
FREENOM_USERNAME Freenom 账户 - 只支持邮箱账户,如果你是使用第三方社交账户登录的用户,请在 Freenom 管理页面绑定邮箱,绑定后即可使用邮箱账户登录
FREENOM_PASSWORD Freenom 密码 - 某些特殊字符可能需要转义,详见.env文件内注释
MULTIPLE_ACCOUNTS 多账户支持 - 多个账户和密码的格式必须是“`<账户1>@<密码1>\
MAIL_USERNAME 机器人邮箱账户 - 支持GmailQQ邮箱163邮箱以及Outlook邮箱,尽可能使用163邮箱或者QQ邮箱而非Gmail。因为谷歌的安全机制,每次在新设备登录 Gmail 都会先被限制,需要手动解除限制才行。具体的配置方法参考「 配置送信功能
MAIL_PASSWORD 机器人邮箱密码 - Gmail填密码,QQ邮箱163邮箱填授权码
TO 接收通知的邮箱 - 你自己最常用的邮箱,用来接收机器人邮箱发出的域名相关邮件
MAIL_ENABLE 是否启用邮件推送功能 0 1:启用
0:不启用
默认不启用,如果设为1,启用邮件推送功能,则上面的MAIL_USERNAMEMAIL_PASSWORDTO变量变为必填项
TELEGRAM_CHAT_ID 你的chat_id - 通过发送/start@userinfobot可以获取自己的id
TELEGRAM_BOT_TOKEN 你的Telegram bottoken -
TELEGRAM_BOT_ENABLE 是否启用Telegram Bot推送功能 0 1:启用
0:不启用
默认不启用,如果设为1,则必须设置上面的TELEGRAM_CHAT_IDTELEGRAM_BOT_TOKEN变量
NOTICE_FREQ 通知频率 1 0:仅当有续期操作的时候
1:每次执行

更多配置项含义,请参考 .env.example 文件中的注释。

如何验证你的配置是否正确呢?

修改并保存.env文件后,执行docker restart freenom重启容器,等待 5 秒钟左右,然后执行docker logs freenom查看输出内容, 观察输出内容中有执行成功 字样,则表示配置无误。如果你还来不及配置送信邮箱等内容,可先停用邮件功能。

如何升级到最新版或者重新部署呢?

.env所在目录,执行docker rm -f freenom删除现有容器,然后再执行 docker rmi -f luolongfei/freenom 删除旧的镜像,然后再执行上面的 docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs luolongfei/freenom 重新部署即可,这样部署后就是最新的代码了。当然,新版对应的.env文件可能有变动,不必担心,程序会自动更新.env文件内容,并将已有的配置迁移过去。

一句话操作,即在.env文件所在目录下执行以下命令,即可完成更新升级:

docker rm -f freenom && docker rmi -f luolongfei/freenom && docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs luolongfei/freenom
2.2 后期容器管理以及 Docker 常用命令

查看容器在线状态及大小

docker ps -as

查看容器的运行输出日志

docker logs freenom

重新启动容器

docker restart freenom

停止容器的运行

docker stop freenom

移除容器

docker rm -f freenom

查看 docker 容器占用 CPU,内存等信息

docker stats --no-stream

查看 Docker 安装版本等信息

docker version

重启 Docker(非容器)

systemctl restart docker

有关容器部署的内容结束。


🚈 通过 Railway 部署

推荐没有自己服务器的用户使用此方案。

有关 【通过 Railway 部署】 的具体操作步骤请参考 此处


🧊 通过 Heroku 部署

由于休眠问题以及 Cron 问题还没有比较完美的解决方案,故暂时不推荐通过这种方式部署。

点击下方按钮,可以一键部署到 Heroku,不过由于 Heroku 免费版本每 30 分钟休眠,你可以将创建的 app 地址交给 https://kaffeine.herokuapp.com ,让它每隔一段时间就 ping 一下你的地址,使得你的容器保持唤醒状态。而 Heroku 容器每个月最多只能清醒 500 个小时,所以还是会面临休眠问题。除非你验证信用卡以获取 1000 小时运行时长。

注意,Heroku 还有个不太好处理的问题,在容器内部似乎不能正常使用 Cron 计划任务,可能跟每次由不同用户启动容器,且每次容器都位于不同的机器有关。只能使用 Heroku 提供的调度器,很不灵活,或者借助代码实现与 Cron 类似的功能。参考:

https://stackoverflow.com/a/2611936

https://medartus.medium.com/how-to-use-cron-on-heroku-for-free-778d8602a622

Deploy


☁ 通过各种云函数部署

所有云函数使用的是同一个压缩包,已做兼容处理,下载地址: https://github.com/luolongfei/freenom/releases/download/v0.5/freenom_scf.zip 。本文档会在发布新版的时候同步更新此处的压缩包下载地址,所以不必担心,你看到的下载地址指向的包一定是最新版本。

下载后你将得到一个 zip 文件,将 zip 文件放到你能找到的任意目录,后面我们将以 zip 文件的形式上传到各种云函数。

有关 【通过腾讯云函数部署】 的具体操作步骤请参考 此处

有关 【通过阿里云函数部署】 的具体操作步骤请参考 此处

有关 【通过华为云函数部署】 的具体操作步骤请参考 此处


🚧 直接拉取源码部署

有关 【直接拉取源码部署】 的具体操作步骤请参考 此处


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

📋 赞助名单 Donation List

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

❤ 赞助 Donation

如果你觉得本项目对你有帮助,请考虑赞助本项目,以激励我投入更多的时间进行维护与开发。 If you find this project helpful, please consider supporting the project going forward. Your support is greatly appreciated.

ko-fi

PayPal: https://www.paypal.me/mybsdc

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

pay

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

你的star或者赞助是我长期维护此项目的动力所在,由衷感谢每一位支持者,“每一次你花的钱都是在为你想要的世界投票”。 另外,将本项目推荐给更多的人,也是一种支持的方式,用的人越多更新的动力越足。

🪓 信仰

相信未来,保持“理智”。

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

南京市民李先生

🌚 作者

💖 所有贡献者

All Contributors

@anjumrafidofficial

📝 TODO List

  • 支持交互式安装,免去手动修改配置的繁琐操作
  • 支持自动升级
  • 多个账户的续期结果通知合并为同一条消息

📰 更新日志

此处只含最新版本的更新日志,完整的日志记录请参考 Changelog.md

  • 解决 企业微信 因送信内容过长被截断问题

v0.5 - 2022-05-15

  • 增加支持 华为云函数、Railway 等部署方式
  • 支持在消息中显示服务器信息,该功能默认关闭
  • 优化部分代码逻辑

🎉 鸣谢

🥝 开源协议

MIT