Nginx反向代理动态域名(路由器上的花生壳)经常会一开始是正常的,过段时间服务就挂掉了显示502,重启Nginx服务才能正常访问。

查看错误日志发现动态域名的IP已经改变了结果Nginx这边还是缓存的旧的IP地址。

这是之前的Nginx配置:

server {
    listen       80;
    server_name  serverName;

    location /{
        proxy_pass domainName;
    }
}

每当路由器重启或者断网重拨后IP地址发生变化,Nginx不能马上刷新,可使用resolver实现Nginx强制刷新解析的效果。

server {
    listen       80;
    server_name  serverName;

    location /{
        resolver 223.5.5.5;
	set $IPS domainName;
	proxy_pass http://$IPS;
    }
}

参考地址:

阅读全文

alidns-nodejs

阿里云DNS解析API调用

install 安装

npm i alidns-nodejs --save

use 使用

请查看 demo.js

import alidns from "alidns-nodejs";
var DNS = ALIDNS({
  accesskeyId: 'your accesskeyId',
  accesskeySecret: 'your accesskeySecret'
});
DNS.queryData(params,callback);

params 可参考: 阿里云DNS解析 - API概况

文件目录

.
├── README.md
├── alidns.js
├── demo.js
├── index.js
└── package.json

参考地址:

相关代码:

阅读全文

博客每次修改代码需要上传到 git仓库 - nuxt-express-blog,查看了一下 Gogs 使用文档 发现有 web钩子 这个选项,然后发现了本地可实现的 Git钩子.

1.png

有三种状态分别是: pre-receive,update,post-receive分别对应接收前,接收时,接收后三种状态,希望push代码后实现更新部署则会用到post-receive

2.png

这里用到的shell命令是:

#!/bin/bash
unset $(git rev-parse --local-env-vars);
cd /usr/share/nginx/vue-blog
git pull origin master &&  npm i && npm run build

当然,项目运行需要的进程守护进程是pm2,由于nuxt使用npm run build会在本地生成build文件夹,就直接用pm2监听build的改动了:

{
  "name": "blog",
  "script": "/usr/local/bin/npm",
  "args": "start",
  "cwd": "./",
  "watch": [
    "build"
  ],
  "ignore_watch": [
    "node_modules"
  ],
  "watch_options": {
    "followSymlinks": false
  }
}

然后就可以尝试使用git push看看是否会执行Gogs的post-receive钩子事件

相关链接:

阅读全文

阿里云服务器 ECS 实现自定义监控图表,图表实现为百度的 Echarts 图表

效果查看

CPU使用率(%)

公网带宽(bits/s)

安装

npm i -S aliyun-metrics

下面贴出我的实现方式:

const Metrics = require("aliyun-metrics");
const moment = require('moment');

const client = new Metrics({
  accesskeyId: 'your_accesskey_id',
  accesskeySecret: 'your_accesskey_secret',
})

const ECS = params => {
  return new Promise((resolve, reject) => {
    client.queryData({
      project: "acs_ecs_dashboard",
      metric: params.metric,
      period: 60,
      startTime: params.startTime || moment.utc()
        .subtract(1, 'hour')
        .format(),
      endTime: params.endTime || moment.utc()
        .format(),
      dimensions: `{instanceId:'your_instanceId'}`
    }, function(error, data) {
      if (error || !data)
        reject(error || 'data is null');
      else
        resolve(data);
    });
  })
}

module.exports = ECS;

关于 accesskeyId 和 accesskeySecret 请参考:创建AccessKey

client.queryData 参数说明:

名称 类型 是否必须 描述
project String 名字空间,表明监控数据所属产品,如 “acs_ecs_dashboard”,“acs_rds_dashboard”等
metric String 监控项名称,查看预设监控值参考
period String 获取监控数据的间隔时间,单位为秒。取值范围:60,600,3600。默认值:60
startTime String 获取数据的结束时间点。按照 ISO8601 标准表示,并需要使用 UTC 时间,格式为:YYYY-MM-DDThh:mm:ssZ。 如果指定的秒(ss)不是 00,则自动换算为下一分钟。
endTime String 获取数据的结束时间点。按照 ISO8601 标准表示,并需要使用 UTC 时间,格式为:YYYY-MM-DDThh:mm:ssZ。 如果指定的秒(ss)不是 00,则自动换算为下一分钟。
dimensions String json串,例如:{"instanceId":"i-23gyb3kkd"}。

返回值请参考:查看预设监控值参考

参考地址:

阅读全文

新项目需要用到工作流设定 + 自定义表单控件,这里列出了自定义表单控件的代码实现,可实现自定义表单控件,可拖拽排序,自定义属性

项目 UI 组件库为 iView, Element UI 可根据项目内代码进行适当修改达到适用

效果预览

image

image

image

运行使用

# install dependencies
npm install

# serve with hot reload at localhost:8080
npm run dev

文件目录

.
├── README.md
├── build
├── config
├── dist
├── index.html
├── package.json
├── src
│   ├── App.vue
│   ├── assets
│   ├── components
│   │   ├── custom_form             //自定义表单组件
│   │   │   ├── FormList.js         //表单列表    
│   │   │   ├── ItemIcon.js         //表单图标配置
│   │   │   ├── Render.js           //表单列表渲染
│   │   │   ├── components          //表单公用组件
│   │   │   │   └── Uploads         //上传组件
│   │   │   │       └── upload.vue
│   │   │   ├── config              //配置文件
│   │   │   │   ├── area.js         //地区配置
│   │   │   │   └── trigger.js      //表单验证触发事件
│   │   │   ├── control             //表单控件列表
│   │   │       ├── Address.js      //地区选择
│   │   │       ├── Cascader.js     //多级联动
│   │   │       ├── CheckBox.js     //多选框
│   │   │       ├── DatePicker.js   //时间选择器
│   │   │       ├── Hr.js           //hr标签
│   │   │       ├── Input.js        //输入框
│   │   │       ├── P.js            //p标签
│   │   │       ├── Radio.js        //单选框
│   │   │       ├── Select.js       //下拉选择框
│   │   │       ├── Text.js         //文本域
│   │   │       ├── Title.js        //标题
│   │   │       └── Uploads.js      //上传控件
│   │   │   └── index.js            //控件注册
│   │   ├── index.vue               //自定义表单页面
│   │   └── render.vue              //表单渲染,数据回填页面
│   ├── main.js                     //入口文件
│   └── router                      //路由配置
│       └── index.js
└── static                          //静态数据模版
    ├── label.1.json
    ├── label.12.json
    ├── label.14.json
    ├── label.17.json
    ├── label.19.json
    ├── label.3.json
    ├── label.5.json
    ├── label.8.json
    └── label.json

相关代码:

相关链接:

阅读全文