12

GitHub - luolongfei/next-freenom: Freenom 域名自动续期。(由于我前仓库 https://g...

 3 years ago
source link: https://github.com/luolongfei/next-freenom
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Freenom:freenom域名自动续期

Documentation: English version | 中文版


(下面三种部署方式,选择其中一种即可)

(最简单的方式,推荐)


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

注意:由于我前仓库 https://github.com/luolongfei/freenom 不明原因被封,估计是与早前的 GitHub Action 事件有关,正在申诉重审。 故将原项目迁移至此,接下来的开发与维护将在此仓库进行。Docker 仓库( https://hub.docker.com/r/luolongfei/freenom )不受影响。推荐通过 Docker 部署,或者参考下方文档直接搬运到腾讯云函数部署。本项目依然长期维护。

page_with_curl 前言

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

lollipop 效果

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

gift 事前准备

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

mailbox_closed 配置发信邮箱

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

(点击即可展开或收起)

设置Gmail
设置QQ邮箱
设置163邮箱

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 请参考:官方文档


与通知相关的设置到此就完成了,下面开始讲本项目的三种使用方式,一种是通过 Docker,另一种是通过腾讯云函数,再一种是直接拉取源码部署,推荐使用 Docker 方式,无需纠结环境。

boat 方式一:通过 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 安装版本等信息

docker version

启动 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 命令的参数解释

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

点我查看 .env 文件中部分配置项的含义

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

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

2.2 后期容器处理常用命令

查看容器在线状态及大小

docker ps -as

查看容器的运行输出日志

docker logs freenom

重新启动容器

docker restart freenom

停止容器的运行

docker stop freenom
docker rm $name

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

docker stats --no-stream

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

joystick 方式二:通过腾讯云函数(SCF)部署


1、下载 SCF 版本的压缩包

此版本为特别版,支持通过腾讯云函数部署,并且将与主分支同步维护更新,推荐没有自己 VPS 服务器的用户使用,最新版本号为v0.3_scf。下载地址: https://github.com/luolongfei/next-freenom/archive/refs/tags/v0.3_scf.zip

下载后解压到你能找到的任意目录,你将得到一个文件夹,后期将通过文件夹的形式上传到腾讯云函数。

2、创建腾讯云函数

直接访问腾讯云函数控制台创建云函数: https://console.cloud.tencent.com/scf/list-create , 按照下图所示的说明进行创建。如果无法看清图片,可访问: https://github.com/luolongfei/next-freenom/blob/main/resources/screenshot/scf.png 或者 https://z3.ax1x.com/2021/06/01/2nKCF0.png 查看原图。

按照上图所示部署完成后,可以点击云函数的名称进入云函数管理画面,管理画面往下翻可看到部署测试按钮,点击测试,稍等几秒钟,即可看到输出日志, 根据输出日志判断配置以及部署是否正确。

有关腾讯云函数部署的内容结束。

construction 方式三:直接拉取源码部署


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

1、获取源码

创建文件夹

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

clone 本仓库源码

git clone https://github.com/luolongfei/next-freenom.git ./

2、修改配置

复制配置文件模板

cp .env.example .env

编辑配置文件

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

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

3、添加计划任务

3.1 安装 crontabs 以及 cronie
yum -y install cronie crontabs

验证 crond 是否安装及启动

yum list cronie && systemctl status crond

验证crontab是否安装

yum list crontabs $$ which crontab && crontab -l
3.2 打开任务表单,并编辑
crontab -e
# 任务内容如下
# 此任务的含义是在每天早上 9点 执行 /data/wwwroot/freenom/ 路径下的 run 文件,最佳实践是将这个时间修改为一个非整点的时间,防止与很多人在同一时间进行续期操作导致 freenom 无法稳定提供服务
# 注意:某些情况下,crontab 可能找不到你的 php 路径,下面的命令执行后会在 freenom_crontab.log 文件输出错误信息,你应该指定 php 路径:把下面的 php 替换为 /usr/local/php/bin/php (根据实际情况,执行 whereis php 即可看到 php 执行文件的真实路径)
00 09 * * * cd /data/wwwroot/freenom/ && php run > freenom_crontab.log 2>&1
3.3 重启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路径,没有错误,那你什么也不用做。

至此,所有的配置都已经完成,下面我们验证一下整个流程是否走通。

3.4 验证

你可以先将.env中的NOTICE_FREQ的值改为1(即每次执行都推送通知),然后执行

cd /data/wwwroot/freenom/ && php run

不出意外的话,你将收到一封关于域名情况的邮件。


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

clipboard 捐赠名单 Donate List

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

heart 捐赠 Donate

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

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

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

helicopter 我正在用的 VPS

走我的 Aff 地址购买,我可以获得一点返利,也算是一种支持方式,介意者复制官网地址访问即可。

名称 购买地址 备注 搬瓦工 https://bwh81.net/aff.php?aff=24499&pid=104 (日本软银 VPS 限量版,65美元一年,优惠码:BWH3HYATVBJW
https://bwh81.net/aff.php?aff=24499&pid=94 (CN2 GIA LIMITED EDITION,DC 6机房,46.8美元一年)
https://bwh81.net/aff.php?aff=24499&pid=71 (CN2 GIA 丐版,DC 9机房,37.79美元一年) 稳定大厂,它们家限量版 GIA很香。目前是我的主力机型。 Vultr https://www.vultr.com/?ref=7429134 (最低2.5美元每月)
https://www.vultr.com/?ref=8399703-6G (新用户可得100美元体验金) 随开随停,很方便。 PacificRack https://pacificrack.com/portal/aff.php?aff=1150&pid=119.9美元一年) 最便宜的机型9.9美元一年,QuadraNet 机房,我用了两年了目前感觉很稳。

beer 信仰

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

new_moon_with_face 作者

newspaper 更新日志

此处省略了很多较为久远的记录,以前的日志只记录了比较大的变更,以后的日志会尽可能详尽一些。

[Unreleased]

Added
  • 支持通过 Server酱 以及 企业微信 推送通知
Changed
  • 多个账户的续期结果通知合并为同一条消息
  • 整合各种送信方式,优化相关逻辑
  • 支持交互式安装,免去手动修改配置的繁琐操作

v0.3 - 2021-05-27

Added
  • 追加 Docker 版本,支持通过 Docker 方式部署,简化部署流程

v0.2.5 - 2020-06-23

Added
  • 支持在 Github Actions 上执行(应 GitHub 官方要求,已移除此功能)

v0.2.2 - 2020-02-06

Added
  • 新增通过 Telegram bot 送信
  • 各种送信方式支持单独开关

v0.2 - 2020-02-01

Added
  • 支持多个 Freenom 账户进行域名续期
Changed
  • 进行了彻底的重构,框架化
  • 优化邮箱模块,支持自动选择合适的邮箱配置

(版本在 v0.1 到 v0.2 期间代码有过很多次变更,之前没有发布版本,故此处不再赘述相关变更日志)

v0.1 - 2018-8-13

Added
  • 初版,开源,基础的续期功能

tada 鸣谢

  • PHPMailer (邮件发送功能依赖此库)
  • guzzle (Curl库)
  • 秋水逸冰 (本项目 Docker 相关文档有参考秋水逸冰的文章)

kiwi_fruit 开源协议

MIT


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK