Freenom自动续期
🌿 项目地址
主仓库:freenom
备用仓库:next-freenom
🎉 部署
如果你有自己的服务器,这是最推荐的部署方式。
Docker 仓库地址为: https://hub.docker.com/r/luolongfei/freenom ,同样欢迎 star 。
此镜像支持的架构为linux/amd64
,linux/arm64
,linux/ppc64le
,linux/s390x
,linux/386
,linux/arm/v7
,linux/arm/v6
, 理论上支持群晖
、威联通
、树莓派
以及各种类型的VPS
。
安装 Docker
以 root 用户登录,执行一键脚本安装 Docker
1 | 升级源并安装软件 |
1 | 升级源并安装软件 |
说明:请使用 KVM 架构的 VPS,OpenVZ 架构的 VPS 不支持安装 Docker,另外 CentOS 8 不支持用此脚本来安装 Docker。 更多关于 Docker
安装的内容参考 Docker 官方安装指南 。
启动 Docker
服务
1 | 启动 Docker 服务 |
通过 Docker 部署域名续期脚本
用 Docker
创建并启动容器
命令如下
1 | docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs luolongfei/freenom |
自定义脚本执行时间,命令如下
1 | 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 点全时段随机的一个时间点作为执行时间, 每次重启容器都会自动重新指定。
至此,你的自动续期容器就跑起来了,执行ls -a
后你就可以看到在你的当前目录下,有一个.env
文件和一个logs
目录,logs
目录里面存放的是程序日志, 而.env
则是配置文件,现在直接执行vim .env
将.env
文件里的所有配置项改为你自己的并保存即可。然后重启容器,如果配置正确的话,便很快可以收到相关邮件。
如何验证你的配置是否正确呢?
修改并保存.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
文件所在目录下执行以下命令,即可完成更新升级:
1 | 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 |
Docker 命令的参数解释
命令 | 含义 |
---|---|
docker run | 开始运行一个容器 |
-d 参数 | 容器以后台运行并输出容器 ID |
–name 参数 | 给容器分配一个识别符,方便将来的启动,停止,删除等操作 |
–restart 参数 | 配置容器启动类型,always 即为 docker 服务重新启动时自动启动本容器 |
-v 参数 | 挂载卷(volume),冒号后面是容器的路径,冒号前面是宿主机的路径(只支持绝对路径),$(pwd) 表示当前目录,如果是 Windows 系统,则可用${PWD} 替换此处的$(pwd) |
-e 参数 | 指定容器中的环境变量 |
luolongfei/freenom | 这是从 docker hub 下载回来的镜像完整路径名 |
后期容器管理以及 Docker 常用命令
1 | 查看容器在线状态及大小 |
推荐没有自己服务器的用户使用此方案。
注意不要尝试注册多个 railway 账户,因为 railway 有比较严格的风控策略,并且每个 railway 账户都必须绑定一个注册超过 6 个月的 GitHub 账户才能正常使用。除非你有多个完全不同的本地环境和 ip,并且永远不在同一个环境里登录多个账户。
- 首先 fork 本仓库,后面会通过你 fork 的仓库部署
- 注册 Railway 的账户,注册成功后登录
- 访问 Railway 绑定你的 GitHub 账户(不能是新 GitHub 账户,注册必须超过 6 个月才能绑定)
- 访问 Railway ,选择
Deploy from GitHub repo
,这里会提醒你授权 Railway 访问你的仓库,授权后便可以点选你在第 1 步中 fork 的仓库,然后点Deploy Now
,等待部署完成 - 部署完成后,点击
Variables
,然后点击RAW Editor
批量添加环境变量配置,将.env.example
文件里的所有内容复制到编辑框(或者只复制你需要修改的,未修改的项将保持默认),并将配置内容改为你自己的,然后点击Update Variables
即可完成配置,配置变更后,Railway 会自动重建容器,等待容器重建完成 - 容器重建完成后,点击
Deployments
,然后点击View Logs
查看构建日志,如果日志里没有错误,则说明你成功了
注:如果你想自定义脚本的执行时间,可以在添加环境变量的时候,额外加一个名为RUN_AT的环境变量,值可以是北京时间(例如11:24)或者 cron 表达式
由于休眠问题以及 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
- 获取源码修改配置
1
2
3
4
5
6创建文件夹
cd && mkdir -p /freenom && cd /freenom
clone 仓库源码
git clone https://github.com/luolongfei/freenom.git ./
复制配置文件模板
cp .env.example .env - 添加计划任务
1
2
3
4
5
6
7
8
9
10
11
12安装 crontabs 以及 cronie
yum -y install cronie crontabs
验证 crond 是否安装及启动
yum list cronie && systemctl status crond
验证crontab是否安装
yum list crontabs $$ which crontab && crontab -l
编辑任务列表,添加定时任务,每天早上 9点 执行
crontab -e
追加一行 `00 09 * * * cd /freenom/ && php run > freenom_crontab.log 2>&1`
重启crond守护进程使任务生效
systemctl restart crond
📪 配置送信功能
此处会分别介绍邮件送信
/ Telegram Bot
/ 企业微信
/ Server 酱
/ Bark
送信方式的配置方法,以及其所需的资料,你可以任选一种送信方式进行配置,直接跳到对应的文档查看即可。 如果你是 IOS
用户,推荐使用 Bark
送信方式,其它平台的用户根据自己喜好选择可接受的送信方式即可。不太推荐使用Server 酱
送信,Server 酱
每日送信条数的限制,以及需要开会员才能直接看到送信内容,否则需要跳到 Server 酱
网站才能查看内容,都是不推荐的原因。同样的配置完全可以直接使用企业微信
送信方式,企业微信
送信直接在普通微信客户端就能看到信件内容。
修改
.env
文件,将MAIL_USERNAME
和MAIL_PASSWORD
设置为你的邮箱和密码(或令牌),将TO
设置为你的收信邮箱,然后将MAIL_ENABLE
的值设为1
以启用邮箱送信功能。上面介绍了三种邮箱的设置方法,如果你不想使用邮件送信,将根目录下的
.env
文件中的MAIL_ENABLE
的值改为0
即可关闭邮件推送方式。
- 将.env文件中的TELEGRAM_BOT_ENABLE的值改为1,即可启用 Telegram Bot 送信功能
- 在 Telegram 客户端中搜索@userinfobot,并打开聊天窗口
- 发送/start给@userinfobot即可以获取自己的 Id,将.env文件中的TELEGRAM_CHAT_ID的值改为前面获取到的 Id
- 在 Telegram 客户端中搜索@BotFather,并打开聊天窗口
- 发送/newbot给@BotFather,然后根据提示创建,创建完成后根据图示操作获取token
- 将.env文件中的TELEGRAM_BOT_TOKEN的值改为上一步获取的token值
- 在 Telegram 客户端中搜索你创建的机器人的账户,上面示例中机器人账户为@fat_tiger_bot,请替换为你自己的。找到机器人账户并打开聊天对话框,点击聊天输入框中的 /start 按钮或者直接给机器人发送 /start,以启用机器人
- (可选)为 Telegram Bot 设置代理。针对国内网络环境,可将.env文件中的TELEGRAM_PROXY的值改为代理值,具体参考.env文件中的注释
- 在电脑上打开 https://work.weixin.qq.com ,注册一个企业。注册的过程需要填的信息,腾讯已经做了详尽的说明,根据提示操作即可
- 注册成功后,会跳到注册成功画面,点击页面最下方的进入管理后台按钮,将打开管理后台画面
- 在管理后台,点击应用管理,然后往下翻,在自建部分找到并点击创建应用
- 创建应用,应用名称随意,注意下面的可见范围选公司名,以使得公司下的所有人可见
- 应用创建完成后,会跳到应用详情页面,在详情页面,你可以拿到AgentId和Secret的值, 在.env文件中,将WECHAT_AGENT_ID的值改为这里拿到的 AgentId 的值,将WECHAT_CORP_SECRET的值改为这里拿到的Secret的值
注意,此处要查看Secret的值的话,需要先安装企业微信 app,点击发送后会在企业微信 app客户端收到Secret的值,将值记录下来后,便可以卸载企业微信 app,然后记得将 .env 文件中的WECHAT_CORP_SECRET的值改为这里拿到的Secret的值
- 获取企业 ID,并将.env文件中WECHAT_CORP_ID的值改为企业 ID的值
- 推送消息到微信客户端。在管理后台点击我的企业,再点击微信插件,接着往下翻,找到邀请关注部分的二维码,用微信扫码关注即可,不要勾选
成员使用微信插件时需要使用企业微信客户端
- 将.env文件中的WECHAT_ENABLE的值改为1,以启用微信推送功能
Bark 是一款 IOS 端用于推送自定义通知的 app,是个人开发者在维护,项目地址为 https://github.com/Finb/Bark ,客户端和服务端均开源。
- 前往 App Store 搜索Bark并安装
- 打开Bark app,点击注册设备,记得允许通知,然后点击
服务器
就可以看到,https://api.day.app/
BARK_KEY/这里改成你自己的推送内容
,请将.env文件中的BARK_KEY的值设为此处获取的值 - 将.env文件中的BARK_ENABLE的值设为1,以启用Bark送信功能
💖 配置文件
变量名 | 含义 | 默认值 | 是否必须 | 备注 |
---|---|---|---|---|
FREENOM_USERNAME | Freenom 账户 | - | 是 | 只支持邮箱账户,如果你是使用第三方社交账户登录的用户,请在 Freenom 管理页面绑定邮箱,绑定后即可使用邮箱账户登录 |
FREENOM_PASSWORD | Freenom 密码 | - | 是 | 某些特殊字符可能需要转义,详见.env 文件内注释 |
MULTIPLE_ACCOUNTS | 多账户支持 | - | 否 | 多个账户和密码的格式必须是“<账户1>@<密码1>|<账户2>@<密码2>|<账户3>@<密码3> ”,注意不要省略“<>”符号,否则无法正确匹配。如果设置了多账户,上面的FREENOM_USERNAME 和FREENOM_PASSWORD 可不设置 |
FREENOM_PROXY | Freenom 代理 | - | 否 | e.g. http://127.0.0.1:1081 or socks5://127.0.0.1:1080 |
MAIL_USERNAME | 机器人邮箱账户 | - | 否 | 支持Gmail 、QQ邮箱 、163邮箱 以及Outlook邮箱 |
MAIL_PASSWORD | 机器人邮箱密码 | - | 否 | Gmail 填应用专用密码,QQ邮箱 或163邮箱 填授权码 |
TO | 接收通知的邮箱 | - | 否 | 你自己最常用的邮箱,用来接收机器人邮箱发出的域名相关邮件 |
MAIL_ENABLE | 是否启用邮件推送功能 | 0 |
否 | 1 :启用0 :不启用默认不启用,如果设为 1 ,启用邮件推送功能,则上面的MAIL_USERNAME 、MAIL_PASSWORD 、TO 变量变为必填项 |
MAIL_HOST | SMTP 服务器 | - | 否 | e.g. smtp.gmail.com |
MAIL_PORT | SMTP 端口号 | - | 否 | 一般是 587 或者 465 |
MAIL_ENCRYPTION | 邮件加密方式 | - | 否 | 一般是 tls 或者 ssl 或者 starttls |
Telegram bot | - | - | - | - |
TELEGRAM_CHAT_ID | 你的chat_id |
- | 否 | 通过发送/start 给@userinfobot 可以获取自己的id |
TELEGRAM_BOT_TOKEN | 你的Telegram bot 的token |
- | 否 | |
TELEGRAM_BOT_ENABLE | 是否启用Telegram Bot 推送功能 |
0 |
否 | 1 :启用0 :不启用默认不启用,如果设为 1 ,则必须设置上面的TELEGRAM_CHAT_ID 和TELEGRAM_BOT_TOKEN 变量 |
TELEGRAM_PROXY | Telegram 代理 | - | 否 | e.g. http://127.0.0.1:1081 or socks5://127.0.0.1:1080 |
CUSTOM_TELEGRAM_HOST | 自建 Telegram 反向代理地址 | api.telegram.org | 否 | 保持默认即可 |
WECHAT_CORP_ID | 企业 ID | - | 否 | 企业微信的企业 ID |
WECHAT_CORP_SECRET | 应用的凭证密钥 | - | 否 | 企业微信的应用凭证密钥 |
WECHAT_AGENT_ID | 应用 ID | 1 |
否 | 企业微信的应用 ID |
WECHAT_ENABLE | 是否启用企业微信送信功能 | 0 |
否 | 1 :启用0 :不启用默认不启用 |
SCT_SEND_KEY | Server 酱的 SendKey | - | 否 | Server 酱的 SendKey |
SCT_ENABLE | 是否启用 Server 酱 送信功能 | 0 |
否 | 1 :启用0 :不启用默认不启用 |
BARK_KEY | Bark key | - | 是 | Bark key |
BARK_URL | Bark 域名 | https://api.day.app | 是 | Bark 域名,默认是 Bark 作者提供的服务 |
BARK_IS_ARCHIVE | Bark 固定配置 | - | 是 | Bark 固定配置 |
BARK_GROUP | Bark 固定配置 | FreeNom | 是 | Bark 固定配置 |
BARK_LEVEL | Bark 固定配置 | active | 是 | Bark 固定配置 |
BARK_ICON | Bark 固定配置 | https://q2.qlogo.cn/headimg_dl?dst_uin=593198779&spec=100 | 是 | Bark 固定配置 |
BARK_JUMP_URL | Bark 固定配置 | - | 是 | Bark 固定配置 |
BARK_SOUND | Bark 固定配置 | gotosleep | 是 | Bark 固定配置 |
BARK_ENABLE | 是否启用 Server 酱 送信功能 | 0 |
否 | 1 :启用0 :不启用默认不启用 |
NOTICE_FREQ | 通知频率 | 1 |
否 | 0 :仅当有续期操作的时候1 :每次执行 |
VERIFY_SSL | 是否验证服务器证书 | 0 |
否 | 1 验证0 :不验证 |
DEBUG | 是否开启 Debug 模式 | 0 |
否 | 1 :开启0 :关闭 |
NEW_VERSION_DETECTION | 检测是否有新版本可用,发现新版本时推送消息通知 | 1 |
否 | 1 :开启0 :关闭 |
CUSTOM_LANGUAGE | 应用语言配置 | zh | 否 | 应用语言配置 |
SHOW_SERVER_INFO | 送信时是否显示服务器信息 | 0 |
否 | 1 :显示0 :不显示 |
更多配置项含义,请参考 .env.example 文件中的注释。