内网搭建gitlab-ce gitlab-runner cnpmjs.org管理私有nodejs

npm registry 内部npm仓库

首先安装nodejs环境,推荐使用nvm

然后安装cnpmjs.org

快速部署文档

部署文档

参考文档

项目已clone到/home/web/cnpmjs.org

进入启动执行

cd cnpmjs.org
npm start

具体其他控制脚本可在package.json中的scripts中查看.

最终配置npm.mysite.cn本地npm web页面,做为搜索用.

registry.npm.mysite.cn返回json格式,供cnpm安装package用.

在使用该仓库的客户端

首先安装nodejs环境,推荐使用nvm

安装cnpm

npm i cnpm -g
cnpm set registry http://registry.npm.mysite.cn
cnpm login # 填写若干自己的登录帐号,密码等

cnpm login 会将个人信息保存在用户目录的.cnpmrc文件中.

自己创建好npm package后,该package必须为@mygroup前缀才可以发布到npm.mysite.cn

在自己的package.json中的名称中添加前缀@mygroup/

"name": "@mygroup/my-package"

然后执行

发布前请确认遵守版本号语义规则

cnpm publish

即将该package发布到自己的私有仓库中了,此时其他人即可使用cnpm命令安装该package

cnpm install @mygroup/my-package

由于是私有仓库,所有包发布必须一@mygroup开头,否则不能发布.


gitlab部署

ubuntu系统添加镜像源

若直接部署gitlab,则gitlab本身的nginx将占用80端口,由于本机还需要运行其他页面,所以将gitlab作为nginx的其中一个后台运行.

nginx配置在/etc/nginx/sites-enabled中,按域名明明的文件中.

gitlab监听本机8001端口,该配置存储在/etc/gitlab.rb文件中.


gitlab持续集成

gitlab-runner服务器配置

每个git项目配置说明

各个runner的比较

runner配置

shell runner较好配置,但运行多了会生成大量遗留文件,所以使用docker runner.

此处有一个小问题,gitlab-runner只能使用官方镜像,自己commit或通过Dockerfile build出来的镜像gitlab-runner不识别,通过debug模式会报找不到镜像的错误.

并在gitlab-runner的配置文件中配置dns将git.mysite.cn指向docker的宿主机,即gitlab-runner运行的主机.

操作如下,首先执行

gitlab-runner register

根据提示添加对应的内容,选择docker类型的runner

然后在/etc/gitlab-runner.config.toml中,该新添加的runner下添加

  [runners.docker]
    tls_verify = false
    image = "ubuntu:16.04"
    privileged = false
    disable_cache = false
+   volumes = ["/cache", "/home/web:/root"]
+   extra_hosts = ["git.mysite.cn:172.17.0.1"]

带加号的两行一个是挂载主机的带nvm的目录到container中的/root,载入nodejs环境

另一个是添加映射宿主机的ip映射到域名

在配置中碰到了一些问题,一开始在系统的nginx中配置

proxy_pass http://127.0.0.1:8001;

8001是gitlab的端口,此时会将gitlab中runner的地址输出为http://127.0.0.1:8001/ci,导致测试无法进行.

需要在nginx中添加

upstream git.mysite.cn {
  server 127.0.0.1:8001;
}

server {
  proxy_pass http://git.mysite.cn;
}

gitlab-runner的调试比较麻烦,需要开启调试模式

gitlab-runner stop
gitlab-runner --debug run

gitlab-ci.yml每个项目配置

文档

docker的container使用外部nvm挂载,所以必须添加一些导入nvm的设置例如

.gitlab-ci.yml

image: ubuntu:16.04
before_script:
  - source ~/.nvm/nvm.sh
  - yarn install
test:
  script:
    - npm test
  only:
    - master
cache:
  paths:
    - node_modules/
Posted in git | Leave a comment

使用letsencrypt免费证书

权威参考如下
https://certbot.eff.org
按照教程操作,选择自己对应的操作系统即可了.
网上的中文教程有些老了,其实是不用去github先clone下来的,还慢.

在这里想说两句的是
一开始参照http://www.laozuo.org/7676.html来操作,是在自己的本机执行的,自己还先用openssl生成了密钥,没有在服务器上操作,总说不能到达服务器ip的443端口.
就很奇怪,自己本地生成的密钥是怎么被人家服务器签名认证的.文章里没说太清楚.

中午睡了一觉,半睡办醒之间想通了.

其实是必须在需要被签发的域名所在的服务器上运行签名程序,运行的时候关闭自己的apache或nginx什么的,要把443端口空出来,
这样签名程序会自己启一个服务,将生成的密钥传输给签名服务器然后在返回给服务器.

签名完毕的证书放在/etc/letsencrypt中,按照教程放入nginx配置文件即可.

Posted in debian | Leave a comment

less的bem mixin

首先是参考了一下sass中的写法

http://www.w3cplus.com/preprocessor/pushing-bem-to-the-next-level-with-sass-3-4.html
作者在这篇文章中用mixins生成类似函数的东西来嵌套bem层次.

虽然用过sass,但最近团队用less用惯了,能不换还是最好,于是琢磨如何在less中推行bem或suit的标准.结果less中不支持自定义函数,这个我也是刚知道,通过一个less-plugin-functions可以.试了一下该插件,发现这个的函数只能放在css属性的值的部位,不能当作sass中的@content用.

后来多看了看文档,琢磨出一个less的写法.

@elementSeparator: __;
@modifierSeparator: --;


.block(@blockName, @content) {
  @{blockName} {
    @content();
  }
}

.element(@elementName, @content) {
  &@{elementSeparator}@{elementName} {
    @content();
  }
}

.modifier(@modifierName, @content) {
  &@{modifierSeparator}@{modifierName} {
    @content();
  }
}

.block(product, {
  color: green;

  .element(title, {
    color: black;
    .modifier(invalid, {
      font-size: 5px;
    });
  });

  .modifier(invalid, {
    color: red;
  });
});

生成的结果

product {
  color: green;
}
product__title {
  color: black;
}
product__title--invalid {
  font-size: 5px;
}
product--invalid {
  color: red;
}

Posted in css | Leave a comment