├── .github └── workflows │ ├── cidev.yml │ └── cimaster.yml ├── Dockerfile ├── LICENSE └── README.md /.github/workflows/cidev.yml: -------------------------------------------------------------------------------- 1 | name: Docker Images Publish dev 2 | 3 | on: 4 | workflow_dispatch: 5 | # push: 6 | # branches: 7 | # - dev 8 | 9 | jobs: 10 | main: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - 14 | name: Checkout 15 | uses: actions/checkout@v2 16 | - 17 | name: Set up QEMU 18 | uses: docker/setup-qemu-action@v1 19 | - 20 | name: Set up Docker Buildx 21 | uses: docker/setup-buildx-action@v1 22 | - 23 | name: Login to DockerHub 24 | uses: docker/login-action@v1 25 | with: 26 | username: ${{ secrets.DOCKERHUB_USERNAME }} 27 | password: ${{ secrets.DOCKERHUB_TOKEN }} 28 | - 29 | name: Build and push 30 | id: docker_build 31 | uses: docker/build-push-action@v2 32 | with: 33 | context: . 34 | file: ./Dockerfile 35 | platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x 36 | push: true 37 | tags: rouroux/freenom-automatic-renewal:dev 38 | - 39 | name: Update repo description 40 | uses: peter-evans/dockerhub-description@v2 41 | with: 42 | username: ${{ secrets.DOCKERHUB_USERNAME }} 43 | password: ${{ secrets.DOCKERHUB_PASSWORD }} 44 | repository: rouroux/freenom-automatic-renewal -------------------------------------------------------------------------------- /.github/workflows/cimaster.yml: -------------------------------------------------------------------------------- 1 | name: Docker Images Publish master 2 | 3 | on: 4 | workflow_dispatch: 5 | push: 6 | branches: 7 | - master 8 | 9 | jobs: 10 | main: 11 | runs-on: ubuntu-latest 12 | steps: 13 | - 14 | name: Checkout 15 | uses: actions/checkout@v2 16 | - 17 | name: Set up QEMU 18 | uses: docker/setup-qemu-action@v1 19 | - 20 | name: Set up Docker Buildx 21 | uses: docker/setup-buildx-action@v1 22 | - 23 | name: Login to DockerHub 24 | uses: docker/login-action@v1 25 | with: 26 | username: ${{ secrets.DOCKERHUB_USERNAME }} 27 | password: ${{ secrets.DOCKERHUB_TOKEN }} 28 | - 29 | name: Build and push 30 | id: docker_build 31 | uses: docker/build-push-action@v2 32 | with: 33 | context: . 34 | file: ./Dockerfile 35 | platforms: linux/386,linux/amd64,linux/arm/v6,linux/arm/v7,linux/arm64,linux/ppc64le,linux/s390x 36 | push: true 37 | tags: rouroux/freenom-automatic-renewal:latest 38 | - 39 | name: Update repo description 40 | uses: peter-evans/dockerhub-description@v2 41 | with: 42 | username: ${{ secrets.DOCKERHUB_USERNAME }} 43 | password: ${{ secrets.DOCKERHUB_PASSWORD }} 44 | repository: rouroux/freenom-automatic-renewal -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM php:7.4.19-alpine3.13 2 | MAINTAINER RouRouX 3 | LABEL version="v0.5.1" 4 | 5 | ENV TZ Asia/Shanghai 6 | 7 | WORKDIR /app 8 | 9 | RUN set -eux \ 10 | && apk update \ 11 | && apk add git \ 12 | && git clone --depth 1 https://github.com/luolongfei/freenom.git /app \ 13 | && chmod +x /app/docker-entrypoint.sh \ 14 | && apk add --no-cache tzdata bash 15 | 16 | VOLUME ["/conf", "/app/logs"] 17 | 18 | ENTRYPOINT ["/app/docker-entrypoint.sh"] 19 | 20 | CMD ["crond", "-f"] -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 RouRouX 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # freenom-automatic-renewal(免费域名自动续期) 2 | [![GitHub Stars](https://img.shields.io/github/stars/RouRouX/docker-freenom-automatic-renewal.svg?style=flat-square&label=Stars&logo=github)](https://github.com/RouRouX/docker-freenom-automatic-renewal/stargazers) 3 | [![GitHub forks](https://img.shields.io/github/forks/RouRouX/docker-freenom-automatic-renewal.svg?style=flat-square&label=Forks&logo=github)](https://github.com/RouRouX/docker-freenom-automatic-renewal/fork) 4 | [![Docker Stars](https://img.shields.io/docker/stars/rouroux/freenom-automatic-renewal.svg?style=flat-square&label=Stars&logo=docker)](https://hub.docker.com/r/rouroux/freenom-automatic-renewal) 5 | [![Docker Pulls](https://img.shields.io/docker/pulls/rouroux/freenom-automatic-renewal.svg?style=flat-square&label=Pulls&logo=docker)](https://hub.docker.com/r/rouroux/freenom-automatic-renewal) [![GitHub license](https://img.shields.io/github/license/RouRouX/docker-freenom-automatic-renewal.svg?style=flat-square&label=LICENSE)](https://github.com/RouRouX/docker-freenom-automatic-renewal/blob/master/LICENSE) 6 | 7 | 8 | ### 🐳 老司机直奔主题 9 | 10 | > 如何部署? 11 | 12 | ```shell 13 | docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs rouroux/freenom-automatic-renewal 14 | ``` 15 | 16 | 或者,如果你想自定义脚本执行时间,则命令如下 17 | 18 | ```shell 19 | docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs -e RUN_AT="11:24" rouroux/freenom-automatic-renewal 20 | ``` 21 | 22 | > 如何升级到最新版或者重新部署呢? 23 | 24 | 在`.env`所在目录,执行`docker rm -f freenom`删除现有容器,然后再执行 `docker rmi -f rouroux/freenom-automatic-renewal` 25 | 删除旧的镜像,然后再执行上面的 `docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs rouroux/freenom-automatic-renewal` 26 | 重新部署即可,这样部署后就是最新的代码了。当然,新版对应的`.env`文件可能有变动,不必担心,程序会自动更新`.env`文件内容,并将已有的配置迁移过去。 27 | 28 | 一句话操作,即在`.env`文件所在目录下执行以下命令,即可完成更新升级: 29 | 30 | ```shell 31 | docker rm -f freenom && docker rmi -f rouroux/freenom-automatic-renewal && docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs rouroux/freenom-automatic-renewal 32 | ``` 33 | 34 | 35 | ### 🐳 新司机通过 Docker 部署详细教程 36 | 37 | *如果你有自己的服务器,这是最推荐的部署方式。* 38 | 39 | Docker 仓库地址为: [https://hub.docker.com/r/rouroux/freenom-automatic-renewal](https://hub.docker.com/r/rouroux/freenom-automatic-renewal) 。 40 | 此镜像支持的架构为`linux/amd64`,`linux/arm64`,`linux/ppc64le`,`linux/s390x`,`linux/386`,`linux/arm/v7`,`linux/arm/v6`, 理论上支持`群晖` 41 | 、`威联通`、`树莓派`以及各种类型的`VPS`。 42 | 43 | #### 1、安装 Docker 44 | 45 | ##### 1.1 以 root 用户登录,执行一键脚本安装 Docker 46 | 47 | 升级源并安装软件(下面两行命令二选一,根据你自己的系统) 48 | 49 | Debian / Ubuntu 50 | 51 | ```shell 52 | apt-get update && apt-get install -y wget vim 53 | ``` 54 | 55 | CentOS 56 | 57 | ```shell 58 | yum update && yum install -y wget vim 59 | ``` 60 | 61 | 执行此命令等候自动安装 Docker 62 | 63 | ```shell 64 | wget -qO- get.docker.com | bash 65 | ``` 66 | 67 | 说明:请使用 KVM 架构的 VPS,OpenVZ 架构的 VPS 不支持安装 Docker,另外 CentOS 8 不支持用此脚本来安装 Docker。 更多关于 Docker 68 | 安装的内容参考 [Docker 官方安装指南](https://docs.docker.com/engine/install/) 。 69 | 70 | ##### 1.2 针对 Docker 执行以下命令 71 | 72 | 启动 Docker 服务 73 | 74 | ```shell 75 | systemctl start docker 76 | ``` 77 | 78 | 查看 Docker 运行状态 79 | 80 | ```shell 81 | systemctl status docker 82 | ``` 83 | 84 | 将 Docker 服务加入开机自启动 85 | 86 | ```shell 87 | systemctl enable docker 88 | ``` 89 | 90 | #### 2、通过 Docker 部署域名续期脚本 91 | 92 | ##### 2.1 用 Docker 创建并启动容器 93 | 94 | 命令如下 95 | 96 | ```shell 97 | docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs rouroux/freenom-automatic-renewal 98 | ``` 99 | 100 | 或者,如果你想自定义脚本执行时间,则命令如下 101 | 102 | ```shell 103 | docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs -e RUN_AT="11:24" rouroux/freenom-automatic-renewal 104 | ``` 105 | 106 | 上面这条命令只比上上条命令多了个` -e RUN_AT="11:24"`,其中`11:24`表示在北京时间每天的 11:24 执行续期任务,你可以自定义这个时间。 这里的`RUN_AT`参数同时也支持 CRON 107 | 命令里的时间形式,比如,` -e RUN_AT="9 11 * * *"`,表示每天北京时间 11:09 执行续期任务, 如果你不想每天执行任务,只想隔几天执行,只用修改`RUN_AT`的值即可。 108 | 109 | **注意:不推荐自定义脚本执行时间。因为你可能跟很多人定义的是同一个时间点,这样可能导致所有人都是同一时间向 Freenom 的服务器发起请求, 使得 Freenom 无法稳定提供服务。而如果你不自定义时间,程序会自动指定北京时间 06 ~ 110 | 23 点全时段随机的一个时间点作为执行时间, 每次重启容器都会自动重新指定。** 111 | 112 |
113 | 点我查看上方 Docker 命令的参数解释 114 |
115 | 116 | | 命令 | 含义 | 117 | | :--- | :--- | 118 | | docker run | 开始运行一个容器 | 119 | | -d 参数 | 容器以后台运行并输出容器 ID | 120 | | --name 参数 | 给容器分配一个识别符,方便将来的启动,停止,删除等操作 | 121 | | --restart 参数 | 配置容器启动类型,always 即为 docker 服务重新启动时自动启动本容器 | 122 | | -v 参数 | 挂载卷(volume),冒号后面是容器的路径,冒号前面是宿主机的路径(只支持绝对路径),`$(pwd)`表示当前目录,如果是 Windows 系统,则可用`${PWD}`替换此处的`$(pwd)` | 123 | | -e 参数 | 指定容器中的环境变量 | 124 | | rouroux/freenom-automatic-renewal | 这是从 docker hub 下载回来的镜像完整路径名 | 125 | 126 |
127 | 128 | 至此,你的自动续期容器就跑起来了,执行`ls -a`后你就可以看到在你的当前目录下,有一个`.env`文件和一个`logs`目录,`logs`目录里面存放的是程序日志, 而`.env`则是配置文件,现在直接执行`vim .env` 129 | 将`.env`文件里的所有配置项改为你自己的并保存即可。然后重启容器,如果配置正确的话,便很快可以收到相关邮件。 130 | 131 |
132 | 点我查看 .env 文件中部分配置项的含义 133 |
134 | 135 | | 变量名 | 含义 | 默认值 | 是否必须 | 备注 | 136 | | :---: | :---: |:---:|:----:|:-------------------------------------------------------------------------------------------:| 137 | | FREENOM_USERNAME | Freenom 账户 | - | 是 | 只支持邮箱账户,如果你是使用第三方社交账户登录的用户,请在 Freenom 管理页面绑定邮箱,绑定后即可使用邮箱账户登录 | 138 | | FREENOM_PASSWORD | Freenom 密码 | - | 是 | 某些特殊字符可能需要转义,详见`.env`文件内注释 | 139 | | MULTIPLE_ACCOUNTS | 多账户支持 | - | 否 | 多个账户和密码的格式必须是“`<账户1>@<密码1>\|<账户2>@<密码2>\|<账户3>@<密码3>`”,注意不要省略“<>”符号,否则无法正确匹配。如果设置了多账户,上面的`FREENOM_USERNAME`和`FREENOM_PASSWORD`可不设置 | 140 | | MAIL_USERNAME | 机器人邮箱账户 | - | 否 | 支持`Gmail`、`QQ邮箱`、`163邮箱`以及`Outlook邮箱` | 141 | | MAIL_PASSWORD | 机器人邮箱密码 | - | 否 | `Gmail`填应用专用密码,`QQ邮箱`或`163邮箱`填授权码 | 142 | | TO | 接收通知的邮箱 | - | 否 | 你自己最常用的邮箱,用来接收机器人邮箱发出的域名相关邮件 | 143 | | MAIL_ENABLE | 是否启用邮件推送功能 | `0` | 否 | `1`:启用
`0`:不启用
默认不启用,如果设为`1`,启用邮件推送功能,则上面的`MAIL_USERNAME`、`MAIL_PASSWORD`、`TO`变量变为必填项 | 144 | | TELEGRAM_CHAT_ID | 你的`chat_id` | - | 否 | 通过发送`/start`给`@userinfobot`可以获取自己的`id` | 145 | | TELEGRAM_BOT_TOKEN | 你的`Telegram bot`的`token` | - | 否 || 146 | | TELEGRAM_BOT_ENABLE | 是否启用`Telegram Bot`推送功能 | `0` | 否 | `1`:启用
`0`:不启用
默认不启用,如果设为`1`,则必须设置上面的`TELEGRAM_CHAT_ID`和`TELEGRAM_BOT_TOKEN`变量 | 147 | | NOTICE_FREQ | 通知频率 | `1` | 否 | `0`:仅当有续期操作的时候
`1`:每次执行 | 148 | 149 | **更多配置项含义,请参考 [.env.example](https://github.com/luolongfei/freenom/blob/main/.env.example) 文件中的注释。** 150 | 151 |
152 | 153 | > 如何验证你的配置是否正确呢? 154 | > 155 | 156 | 修改并保存`.env`文件后,执行`docker restart freenom`重启容器,等待 5 秒钟左右,然后执行`docker logs freenom`查看输出内容, 观察输出内容中有`执行成功` 157 | 字样,则表示配置无误。如果你还来不及配置送信邮箱等内容,可先停用邮件功能。 158 | 159 | > 如何升级到最新版或者重新部署呢? 160 | > 161 | 162 | 在`.env`所在目录,执行`docker rm -f freenom`删除现有容器,然后再执行 `docker rmi -f rouroux/freenom-automatic-renewal` 163 | 删除旧的镜像,然后再执行上面的 `docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs rouroux/freenom-automatic-renewal` 164 | 重新部署即可,这样部署后就是最新的代码了。当然,新版对应的`.env`文件可能有变动,不必担心,程序会自动更新`.env`文件内容,并将已有的配置迁移过去。 165 | 166 | 一句话操作,即在`.env`文件所在目录下执行以下命令,即可完成更新升级: 167 | 168 | ```shell 169 | docker rm -f freenom && docker rmi -f rouroux/freenom-automatic-renewal && docker run -d --name freenom --restart always -v $(pwd):/conf -v $(pwd)/logs:/app/logs rouroux/freenom-automatic-renewal 170 | ``` 171 | 172 | ##### 2.2 后期容器管理以及 Docker 常用命令 173 | 174 | 查看容器在线状态及大小 175 | 176 | ```shell 177 | docker ps -as 178 | ``` 179 | 180 | 查看容器的运行输出日志 181 | 182 | ```shell 183 | docker logs freenom 184 | ``` 185 | 186 | 重新启动容器 187 | 188 | ```shell 189 | docker restart freenom 190 | ``` 191 | 192 | 停止容器的运行 193 | 194 | ```shell 195 | docker stop freenom 196 | ``` 197 | 198 | 移除容器 199 | 200 | ```shell 201 | docker rm -f freenom 202 | ``` 203 | 204 | 查看 docker 容器占用 CPU,内存等信息 205 | 206 | ```shell 207 | docker stats --no-stream 208 | ``` 209 | 210 | 查看 Docker 安装版本等信息 211 | 212 | ```shell 213 | docker version 214 | ``` 215 | 216 | 重启 Docker(非容器) 217 | 218 | ```shell 219 | systemctl restart docker 220 | ``` 221 | 222 | *有关容器部署的内容结束。* 223 | 224 | *** 225 | 226 | [更多参考原始项目说明](https://github.com/luolongfei/freenom#-%E9%80%9A%E8%BF%87-docker-%E9%83%A8%E7%BD%B2) 227 | 228 | ## 支持环境: 229 | `linux/amd64`、`linux/arm/v6`、`linux/arm/v7`、`linux/arm64`、`linux/386`、`linux/ppc64le`、`linux/s390x` 230 | 231 | (VPS、群晖、各种派应该都行) 232 | 233 | ## 最近一次更新: 234 | 235 | 2022年11月15日 236 | 237 | * 基于 [luolongfei/freenom](https://github.com/luolongfei/freenom/) v0.5.1 制作镜像 238 | 239 | 更早的更新记录就不写了... 240 | 241 | ## 鸣谢: 242 | 243 | [luolongfei/freenom](https://github.com/luolongfei/freenom) PHP自动续期脚本项目地址 244 | 245 | 最初原始项目还没有docker支持,才有了此镜像,现在原始项目已经支持了docker。本镜像随缘更新。 246 | 247 | ## Thanks for free JetBrains Open Source license 248 | 249 | 250 | 251 | 252 | 253 | 254 | 255 | --------------------------------------------------------------------------------