使用acme.sh为GitLab添加HTTPS支持

过时警告
这篇文章所描述的步骤与方法由于时间关系已不再可靠,GitLab 自 10.5 版本开始自带 Let's Encrypt 支持,详情参考官方文档: Let's Encrypt integration in GitLab.

GitLab是什么:

GitLab unifies issues, code review, CI and CD into a single UI

或许你可以把它理解成一个可以免费下载并搭建在自己的服务器上,类似于 GitHub 的工具,不过如果你还不知道它是什么,大概也不需要看这篇文章吧 : )

acme.sh 是一个纯 Shell 语言写成的工具,它可能是目前最好用的 Let's Encrypt 证书申请工具,一次安装,自动续期

准备

  • 一台已经配置好的 GitLab 服务器,并且拥有服务器控制权
  • 确认防火墙已经开放 443
  • 没了。

开工!

首先安装 acme.sh,嗯,对,左边这个就是链接...点击之后会跳转到 GitHub,根据 ReadMe 安装即可。安装后可能需要执行 source ~/.profile 才能使命令生效

申请证书:

acme.sh --issue -d git.orz.corp  -w /opt/gitlab/embedded/service/gitlab-rails/public

将 git.orz.corp 替换为你的 GitLab 域名,如果没有域名只有 IP,是不能申请证书的,只能自签,这里不做介绍,请跳过并参考 “安装证书” 部分

Continue reading 使用acme.sh为GitLab添加HTTPS支持

关于Prototype, [[Prototype]], __proto__的区别

对于初学者来说,Prototype 似乎还好理解一些,但是在进行更深入的学习研究之后或许会有点晕,一些文章中 obj.prototype 和 obj.[[prototype]] 中的两种写法区别在哪?分别指的是什么?还有 __proto__ 呢?

一句话解释:

obj.prototype 中的 prototype: 是指类型 (Type) 上的原型对象 (Prototype object)

obj.[[prototype]] 中的 [[prototype]]: 是指实例 (Instance) 中指向创建这个实例的类型上的原型对象的 "链接"

obj.__proto__: 这个属性实际和上面的 [[prototype]] 是同样的东西,在过去被各大浏览器作为非标准属性实现

In Depth:

其实你应该已经猜到了,[[prototype]] 并不是一个真正存在于 obj 或是它的原型链上的一个属性,它存在于 JavaScript 引擎的内部,这样写是为了区分类型上的 prototype 属性和这个实例上的"链接"属性。 Continue reading 关于Prototype, [[Prototype]], __proto__的区别

EasyPageNavigation – 轻松创建页码导航

EasyPageNavigation 是一个可以快速生成页码导航的 NPM 模块,既可以用在后端,也可以用在前端,用在前端时需要配合 Browserify "食用"

最初考虑到这个功能并不复杂,是打算放到 Gist 上面分享给大家的,但是考虑到这样的功能还是比较常用的,以及 Don't repeat yourself 的理念,还是整理了一下并发布了出来。

使用示例:

首先需要使用 "npm i --save easy-page-navigation" 安装,然后:

const EasyPageNav = require('easy-page-navigation');

let MyNav = new EasyPageNav(128, 10, 5);
console.log( MyNav.getNavInfo(6) );

上面这段代码使用了 getNavInfo(currentPage) 方法直接获取页码导航的信息,数据类型为 Object,可以自己使用 JSON.stringify() 转换为 JSON

{
    pages:[
        { page: 4, isCurrent: false },
        { page: 5, isCurrent: false },
        { page: 6, isCurrent: true },
        { page: 7, isCurrent: false },
        { page: 8, isCurrent: false }
    ],
    havePrevious: true,
    previous: 5,
    haveNext: true,
    next: 7
}

如果你不希望拿到这样的数据,也可以通过 getNavHTML(currentPage, options) 直接获取 HTML 代码 Continue reading EasyPageNavigation – 轻松创建页码导航