分类: 默认分类

  • aws服务器ddns使用cloudflare域名

    前言

    我有一台日本的aws服务器,ip经常不能访问,好在aws可以免费更换静态ip,但是随之而来的问题来了,更换完ip,域名解析也得修改。

    可不可以每次我修改完服务器的ip,域名解析也自动修改?

    当然可以!

    解决问题的原理

    可以在服务器上写一个脚本,每隔5分钟,检查一下服务器的公网ip和域名解析的ip是否一致,不一致的话修改成一致,一样的话就不用操作

    工具选择

    代码语言 NODEJS

    因为域名是在cloudflare上注册,所以在npm库里搜索了一下有没有现成的工具,这样就避免重复制造轮子

    我搜关键词 cloudflare ddns

    找到了一个叫cloudflare-ddns-sync的npm包

    一 安装nodejs

    在之前的文章中已经提到过,这里不再赘述,需要的朋友可以查看链接

    二 node代码编写

    新建项目文件夹并进入项目

    mkdir cloudflare-ddns && cd cloudflare-ddns

    初始化项目

    npm init -y

    npm安装需要的包

    npm install cloudflare-ddns-sync

    vim index.mjs
    import Cddnss from 'cloudflare-ddns-sync'
    
    //实例化
    const cddnss = new Cddnss({
      token: '你自己的cloudflare网站的token',
    });
    
    // 获取本地ip
    const localIp = await cddnss.getIp()
    
    //获取解析的域名
    const recordsOnline = await cddnss.getRecordDataForDomain('youdomain.com')
    
    
    
    const oneRecordArr =  recordsOnline.filter(record=>{
      return record.name == 'youdomain.com' && record.type == 'A'
    })
    
    // dns解析的ip
    const onlineIp = oneRecordArr[0].content
    
    console.log('本地ip',localIp)
    console.log('dns解析的ip',onlineIp)
    
    if(localIp != onlineIp ){
      const myRecord = {
        name: "youdomain.com",
        type: "A",
        content: localIp
      }
      const result = await cddnss.syncRecord(myRecord)
    }
    

    三 crontab定时任务编写

    查看当前定时任务

    crontab -l

    编辑定时任务

    crontab -e
    //分 时 天 月 周
    */5 * * * * node /path/to/cloudflare-ddns/index.mjs

    这里需要注意一个问题就是,有可能定时任务没有找见node,没有执行成功,我们需要找到node的目录,并加入到全局路径中$PATH

    which node
  • 服务器安装nvm来管理和安装nodejs

    nvm的全称是node version manage,字面意思node版本管理

    github地址是 https://github.com/nvm-sh/nvm

    nvm官方对nvm的介绍

     nvm allows you to quickly install and use different versions of node via the command line.

    翻译一下就是:nvm允许你快速通过命令行安装node的不同版本

    官方也是很贴心的给出了示例代码

    $ nvm use 16
    Now using node v16.9.1 (npm v7.21.1)
    $ node -v
    v16.9.1
    $ nvm use 14
    Now using node v14.18.0 (npm v6.14.15)
    $ node -v
    v14.18.0
    $ nvm install 12
    Now using node v12.22.6 (npm v6.14.5)
    $ node -v
    v12.22.6

    一 安装nvm

    现在是2024年他的版本是v0.40.1,官方给出的命令行如下,随着时间流逝,可能在你查看这篇文章时它的版本已经升级,可以去官方的github找 https://github.com/nvm-sh/nvm

    curl -o- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

    or

    wget -qO- https://raw.githubusercontent.com/nvm-sh/nvm/v0.40.1/install.sh | bash

    安装完nvm后,检查是否安装成功

    有时候需要退出命令行工具,重新登陆试试下面的命令,检查是否安装成功

    nvm -h

    如果有输出表示安装成功

    二,安装最新版本的node

    nvm install lts

    LTS 代表 Long Term Support,即长期支持版本。

    这个就是最新的稳定版本

    二,安装指定版本版本的node

    nvm install 16

    安装版本16的node

  • esmodule引入plyr不能播放

    html部分

    <video id="player" controls>
       <source  src="path/to/video.mp4" type="video/mp4" />
    </video>

    js引入plyr

    import Plyr from 'plyr';
    import 'plyr/dist/plyr.css'

    按照文档,接下来我们应该new一下

    const player = new Plyr('#player')

    但这样是有问题的,视频虽然可以现实,但无法播放

    正确的操作如下 需要文档加载完再实例化播放器

    import Plyr from 'plyr';
    import 'plyr/dist/plyr.css'
    
    
    document.addEventListener('DOMContentLoaded', () => {
      const player = new Plyr('#player',{})
    });
  • 飞牛nas如何设置阿里云的DDNS

    前言

    什么是DDNS?

    就是动态修改域名解析。

    我家的宽带虽然没有公网ipv4,但运营商分配了ipv6,也就是通过ipv6地址可以直接访问家里的设备

    ipv6地址我也记不住,我就把ipv6的地址解析到一个域,这样方便记忆

    但是 运营商分配的ipv6不是固定的,没隔一段时间就变,每次手动修改域名的ipv6地址就显得有些蠢

    所以要是有一个程序,每5分钟检查一下ipv6有没有变化,有变化就修改域名解析。

    这个程序为我们提供的服务就是DDNS

    前提条件

    飞牛自己就提供这样的服务,你只需要把你域名注册商的操作权限提供给飞牛,飞牛就能有权限来修改域名解析

    你需要有阿里云已经备案域名

    二 设置AccessKey ID和AccessKey Secret

    可以把AccessKey ID和AccessKey Secret 理解为账号和密码

    接下来打开阿里云的网站,登陆自己的阿里云账号,鼠标滑到头像

    点击AccessKey

    创建用户

    划重点创建完用户记得把AccessKey ID和AccessKey Secret 复制到安全的地方,因为Accesskey secret只显示这一次,后面不能找回,只能重置

    创建用户组

    创建成功后 把用户添加到用户组

    选重要添加的用户 点击确定

    三 给用户组添加权限

    到这里基本就完成了

    回到飞牛的设置/远程连接/ddns

    填入自己的域名,可以是随便的二级域名比如abc.youdomain.com

    其他选项依次填写

  • 记录N100小盒子装飞牛NAS

    准备工作

    在飞牛nas的官网下载系统镜像

    mac下的烧录工具balenaEtcher

    mac电脑烧录如图

    二,给N100盒子装系统

    N100插上以下东西

    1,u盘

    2,键盘

    3,鼠标(不是必须)

    4,网线

    5,电源线

    盒子通电后,立刻按住F11进入BIOS(不同的系统按的键不一样,自己提前查好)

    然后选择自己的u盘启动

  • 使用acme.sh免费申请ssl域名证书

    一,颁发证书

    acme.sh --issue --dns -d api.caiqianhua.com --yes-I-know-dns-manual-mode-enough-go-ahead-please --keylength 2048

    返回如下

    [Tue Nov 12 08:25:38 UTC 2024] Using CA: https://acme-v02.api.letsencrypt.org/directory
    [Tue Nov 12 08:25:38 UTC 2024] Creating domain key
    [Tue Nov 12 08:25:38 UTC 2024] The domain key is here: /root/.acme.sh/api.caiqianhua.com_ecc/api.caiqianhua.com.key
    [Tue Nov 12 08:25:38 UTC 2024] Single domain='api.caiqianhua.com'
    [Tue Nov 12 08:25:39 UTC 2024] Getting webroot for domain='api.caiqianhua.com'
    [Tue Nov 12 08:25:39 UTC 2024] Add the following TXT record:
    [Tue Nov 12 08:25:39 UTC 2024] Domain: '_acme-challenge.api.caiqianhua.com'
    [Tue Nov 12 08:25:39 UTC 2024] TXT value: 'QTKu-NUQBYj6EGMvF0_OYA69rjIS6au4gyaCmxau0vA'
    [Tue Nov 12 08:25:39 UTC 2024] Please make sure to prepend '_acme-challenge.' to your domain
    [Tue Nov 12 08:25:39 UTC 2024] so that the resulting subdomain is: _acme-challenge.api.caiqianhua.com
    [Tue Nov 12 08:25:39 UTC 2024] Please add the TXT records to the domains, and re-run with --renew.
    [Tue Nov 12 08:25:39 UTC 2024] Please check log file for more details: /root/.acme.sh/acme.sh.log

    验证域名

    返回的代码中会看到如下

    Domain: '_acme-challenge.api.caiqianhua.com'
    TXT value: 'QTKu-NUQBYj6EGMvF0_OYA69rjIS6au4gyaCmxau0vA'

    这里就需要解析域名 注意选择记录类型为txt

    下面是笔者在阿里云的域名解析

    刷新

    acme.sh --renew -d api.caiqianhua.com --yes-I-know-dns-manual-mode-enough-go-ahead-please  --keylength 2048

    这里注意后缀是`–keylength 2048`

    安装证书

    首先创建文件夹,用来存放证书

    mkdir -p ~/cert/api.caiqianhua.com
    acme.sh --install-cert -d api.caiqianhua.com --key-file   ~/cert/api.caiqianhua.com/key.pem --fullchain-file ~/cert/api.caiqianhua.com/cert.pem --keylength 2048

    这样你就可以在~/cert/api.caiqianhua.com目录中看到你的证书了

  • 正则表达式基础知识

    正则表达式(Regular Expression, 简称 RegEx)是一种用于匹配和处理文本的强大工具。它通过使用特殊字符和符号定义的模式,可以灵活地搜索、提取、替换和验证文本内容。以下是正则表达式的基础知识:

    1. 普通字符

    普通字符代表它们自身的含义,用于匹配文本中相同的字符。例如:

    • "hello" 匹配字符串中的 “hello”。

    2. 元字符(Metacharacters)

    元字符是正则表达式中的特殊字符,用于构建复杂的匹配模式。

    元字符含义
    .匹配任意单个字符(换行符除外)
    ^匹配字符串的开头
    $匹配字符串的结尾
    *匹配前面的字符 0 次或多次
    +匹配前面的字符 1 次或多次
    ?匹配前面的字符 0 次或 1 次
    []匹配括号内的任意字符(字符类)
    |逻辑“或”,匹配 | 左右任意一个表达式
    ()用于分组,提取匹配的子字符串

    3. 字符类(Character Classes)

    字符类用于匹配一组字符中的任意一个。字符类是放在方括号 [] 之内的内容。

    • [abc]:匹配 abc 中的任意一个。
    • [a-z]:匹配小写字母 az 中的任意一个。
    • [0-9]:匹配数字 09 中的任意一个。
    • [^abc]:匹配除了 abc 以外的任意字符(以 ^ 开头表示非字符类)。

    4. 预定义字符类

    预定义字符类是一些简化常用字符集的快捷方式:

    符号含义
    \d匹配任意一个数字(0-9)
    \D匹配任意非数字字符
    \w匹配字母、数字、下划线(等价于 [a-zA-Z0-9_]
    \W匹配任意非字母、数字、下划线的字符
    \s匹配任意空白字符(空格、制表符等)
    \S匹配任意非空白字符

    5. 量词(Quantifiers)

    量词用于指定前面的字符或子表达式应该出现的次数。

    量词含义
    *匹配 0 次或多次
    +匹配 1 次或多次
    ?匹配 0 次或 1 次
    {n}匹配前面的字符正好出现 n
    {n,}匹配前面的字符至少出现 n
    {n,m}匹配前面的字符出现 nm

    6. 锚点(Anchors)

    锚点用于锁定匹配的开始或结束位置。

    • ^:匹配字符串的开头。
    • $:匹配字符串的结尾。
    • \b:匹配单词边界。
    • \B:匹配非单词边界。

    7. 分组和捕获

    使用圆括号 () 可以对表达式进行分组,方便提取和重复使用。

    • (abc):匹配完整的子字符串 abc
    • 捕获组允许你在匹配之后提取或引用该组内容。

    8. 示例

    • 匹配一个数字\d 匹配任意单个数字。
    • 匹配一个电话号码格式(如 123-456-7890)\d{3}-\d{3}-\d{4}
    • 匹配邮箱地址[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}

    9. 转义字符

    元字符在需要作为普通字符使用时,可以通过加反斜杠 \ 来转义。例如:

    • \.:匹配实际的小数点,而不是任意字符。

    10. 实际例子

    假设你想提取一个文本中的数字并保留两位小数,可以使用正则表达式:\d+\.\d{2}。这个表达式表示:

    • \d+:匹配一位或多位数字。
    • \.:匹配小数点。
    • \d{2}:匹配两位数字。

    通过这些基础规则,可以匹配并处理不同的文本模式。

  • rsync用法

    拉取远程文件到本地

    rsync -av -e "ssh -p your_port" pi@ip:/mnt/myharddrive/audio/ audio

    推送本地文件到服务器

    rsync -av -e "ssh -p your_port" audio/ pi@ip:/mnt/myharddrive/audio
  • git知识点

    git diff

    git diff是查看工作区修改的文件和暂存区的区别,经本人观察未追踪的文件(也就是新建还未提交过的文件)不会展示比较。

    暂存前后的变化

    书中是这样写的

    git diff

    “此命令比较的是工作目录中当前文件和暂存区域快照之间的差异。
    也就是修改之后还没有暂存起来的变化内容。”

    git diff --staged

    git diff –staged 是查看暂存区和最新一次提交的区别