一直使用套路云的服务器,https证书也是套路云一键生成,后来在GitHub上看见 acme.sh 的申请脚本,有效期只有三个月,但是可以通过定时任务自动执行申请命令,所以就准备来试试水.

1.安装脚本

安装很简单, 一个命令:

curl  https://get.acme.sh | sh

2.申请证书

申请证书需要先进行域名归属权校验,为了之后的定时任务方便,这里选项 DNS 方式: 这里举例为 ALIDNS 的 API 调用,更多方式请查看 如何使用 DNS API

2.1 创建 AccessKey

阿里云文档查看如何创建AccessKey

2.2 保存 AccessKeyId 和 AccessKeySecret

创建AccessKey后会得到 AccessKeyId 和 AccessKeySecret,我们需要保存在 ~/.acme.sh/account.conf 保存自己的 AccessKeyId 和 AccessKeySecret

export Ali_Key="sdfsdfsdfljlbjkljlkjsdfoiwje"
export Ali_Secret="jlsdflanljkljlfdsaklkjflsa"

2.3 正式申请证书

接下来执行(需要把mrabit.com替换成需要申请的域名):

acme.sh --issue --dns dns_ali -d mrabit.com -d *.mrabit.com

申请成功后就可以在~/.acme.sh/mrabit.com/查看生成的证书文件了

QQ20180615221724.png

3.copy/安装 证书

申请成功后当然就是使用证书:

acme.sh  --installcert  -d  mrabit.com   \
        --key-file   /etc/nginx/cert/mrabit.key \
        --fullchain-file /etc/nginx/cert/fullchain.cer \
        --reloadcmd "systemctl restart nginx"

该命令中的参数将自动保存在~/.acme.sh/mrabit.com目录下的mrabit.com.conf文件里,定时器更新证书的时候实现自动部署。

4.设置nginx

2.png

重启nginx就可以体验你的新证书了.

3.png

当然,当前证书只有90天的有效期,不过不用担心,acme.sh已经设定crontab定时任务,当证书过期会自动申请.

相关链接:

阅读全文

公司里目前手上的项目需要兼容到 IE9,由于使用 Vue 写的其实兼容性问题不大,今天试了下js没问题,唯一的问题是,css 竟然没效果!!!当然,这只是在 IE9 上没效果, IE10 及以上都是没问题的.

1.png

开发者工具查看到 css 是加载了的,结果到页面上却是空白一片

2.png

竟然连最基本的背景图片都不见了,找了半天原因我甚至开始怀疑是不是 IE9 不支持 background-image ,可是重新写个页面写上样式,效果却是有的. 最后找了半天,发现了关键点:

3.png

这里说到,IE 会有 selector 数量限制和 css 文件大小限制 然后我默默的看了下自己 css 文件的大小 500+KB,再把各种能CDN链接的样式全都走CDN,重新打包最终 css 大小只有 100+KB了. 再到 IE 跑了一遍,完美~

4.png

总结: IE 浏览器对于 css 是有大小限制的,超出限制的样式会被抛弃:

  • 工作表最多可包含4095个选择器
  • 工作表可以导入多达31页
  • @import嵌套最多支持4级

详情可见: https://support.microsoft.com/zh-cn/help/262161

只能说再一次证明 IE 是浏览器界的毒瘤

阅读全文

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钩子事件

相关链接:

阅读全文