V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
seekerliu
V2EX  ›  PHP

Laravel DDNS package,可代替花生壳之类的软件

  •  
  •   seekerliu · 2017-09-29 23:56:38 +08:00 · 4818 次点击
    这是一个创建于 2642 天前的主题,其中的信息可能已经有所发展或是发生改变。

    自制了一个 Laravel 的 DDNS 工具, 利用 DNSPod 的 API 实现了 DDNS,可以用来代替花生壳之类的软件。

    安装

    • 安装扩展包:
    composer require seekerliu/laravel-ddns:dev-master
    
    $ crontab -e
    //添加下列一行:
    * * * * * /path-to-php/php /path-to-your-project/artisan schedule:run >> /dev/null 2>&1
    

    MacOS 可以在 Terminal 中使用下面命令临时代替,Ctrl + C 可终止:

    while true; do php artisan schedule:run; sleep 60; done
    
    • 默认每分钟同步一次

    配置

    Laravel 5.5 中有 Package Discover 功能,故无需进行第 1 步。如未起作用,可手动执行 php artisan package:discover 命令。

    • config/app.php 中添加此行:
      'providers' => [
          //...
          
          Seekerliu\DynamicDns\ServiceProvider::class,
      ],
    
    • 将下面的内容放到你的 .env 文件中:
    DDNS_DNSPOD_ID=
    DDNS_DNSPOD_TOKEN=
    DDNS_DOMAIN=
    DDNS_SUB_DOMAIN=
    DDNS_DNSPOD_UA="Laravel DDNS Client/0.0.1 ([email protected])"
    DDNS_DNSPOD_URI=https://dnsapi.cn/
    DDNS_GET_IP_URI=https://seekerliu.com/getip.php
    DDNS_ENABLE_LOG=true
    
    • 配置 .env 文件:
    # 你的 DNSPOD ID,必填
    DDNS_DNSPOD_ID=
    # 你的 DNSPOD TOKEN,必填
    DDNS_DNSPOD_TOKEN=
    # 你在 DNSPOD 解析的根域名,例如: seekerliu.com ,必填
    DDNS_DOMAIN=
    # 你在 DNSPOD 解析的二级域名,例如:blog,必填
    DDNS_SUB_DOMAIN=
    # 访问 DNSPOD API 需要的 UA,不用改
    DDNS_DNSPOD_UA="Laravel DDNS Client/0.0.1 ([email protected])"
    # DNSPOD API URI,不用改
    DDNS_DNSPOD_URI=https://dnsapi.cn/
    # 获取 json 格式的公网 ip,可以换成自己的,源码在 getip.php 中
    DDNS_GET_IP_URI=https://seekerliu.com/getip.php
    # 是否开启日志
    DDNS_ENABLE_LOG=true
    
    第 1 条附言  ·  2017-10-01 14:26:50 +08:00
    怪我表达不清晰~ 这个是为 Laravel 准备的一个 package,对于那些开启了 schedule 的项目,只需一句 composer require ... 就能实现 DDNS 的功能,一个节约时间的小工具啦~
    19 条回复    2017-10-02 01:26:39 +08:00
    bazingaterry
        1
    bazingaterry  
       2017-09-30 02:11:06 +08:00 via iPhone
    杀鸡用原子弹?
    ioREQcom
        2
    ioREQcom  
       2017-09-30 02:38:03 +08:00
    最烦这种一看了 laravel 就上来分享,以为自己很牛逼的人了,看我怎么一行 shell 代码搞定,专治吹牛逼的
    http://icms.factj.com/article.php?id=2352
    ioREQcom
        3
    ioREQcom  
       2017-09-30 02:42:58 +08:00   ❤️ 1
    还有这个写的也不错
    http://www.anrip.com/post/872
    airycanon
        4
    airycanon  
       2017-09-30 08:41:22 +08:00
    楼上说出了我的心声。
    cappuccinos
        5
    cappuccinos  
       2017-09-30 08:44:59 +08:00 via iPhone
    不错。
    ihciah
        6
    ihciah  
       2017-09-30 09:22:25 +08:00
    借楼打广告: https://github.com/ihciah/simple-ddns
    (如果并发不算大&&不打算用第三方服务...
    simaguo
        7
    simaguo  
       2017-09-30 12:11:05 +08:00
    DDNS 是什么,用来解决什么具体问题?小白不懂求轻拍
    baoguok
        8
    baoguok  
       2017-09-30 21:15:14 +08:00
    @ioREQcom #2 就服你。

    看到 laravel 就想吐
    seekerliu
        9
    seekerliu  
    OP
       2017-10-01 14:09:01 +08:00
    @bazingaterry 也不算原子弹了~ 以前做过一个 composer 的 package,这次改装成 Laravel 专用的一个。对于我这种用 Laravel 做的项目,需要 DDNS 的时候,只需一个命令 composer require ... 就解决了问题,不用再配置别的了
    seekerliu
        10
    seekerliu  
    OP
       2017-10-01 14:12:50 +08:00
    @ioREQcom 小弟不才,对 sh 研究不深,学习了 ~
    seekerliu
        11
    seekerliu  
    OP
       2017-10-01 14:15:04 +08:00
    @simaguo 就是动态域名解析,比如家里的宽带 IP 经常变化,那么可以用一些软件监测自家 IP 的变化,如果变了,就把新 IP 解析到指定的域名上。
    seekerliu
        12
    seekerliu  
    OP
       2017-10-01 14:16:04 +08:00
    @bazingaterry 所以,不是说做 DDNS 需要用到 Laravel,而是给 Laravel 应用提供的一个 DDNS 工具。
    bazingaterry
        13
    bazingaterry  
       2017-10-01 14:20:04 +08:00 via iPhone
    @seekerliu 原来如此,是我误会了,见谅。
    seekerliu
        14
    seekerliu  
    OP
       2017-10-01 14:22:05 +08:00
    @ioREQcom 不知道你有没有真正用过 DNSPod,请求 API 的时候,DNSPod 要求使用指定格式的 UA。你的代码里可没有,代码用不了。
    seekerliu
        15
    seekerliu  
    OP
       2017-10-01 14:24:28 +08:00
    @ioREQcom 另外 DNSPod 的更新域名 IP 这个 API 是有请求次数限制的,不做缓存,一会儿就 500 了。所以我的 package 里加了解析列表缓存,只有自己 IP 有变动的时候才去更新。curl 谁不会用。
    seekerliu
        16
    seekerliu  
    OP
       2017-10-01 14:25:18 +08:00
    @bazingaterry 怪我怪我~ 正文没写清楚。
    seekerliu
        17
    seekerliu  
    OP
       2017-10-01 14:28:11 +08:00
    @ihciah 赞~
    seekerliu
        18
    seekerliu  
    OP
       2017-10-01 14:50:22 +08:00
    @cappuccinos 谢谢~
    rekey
        19
    rekey  
       2017-10-02 01:26:39 +08:00
    宽带通这种没有公网 ip 的解决一发???
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   5641 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 32ms · UTC 02:55 · PVG 10:55 · LAX 18:55 · JFK 21:55
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.