单元测试

前天升级了 node 版本,线上做了一些小改动,结果报错了。build 未出错,以为一切就没问题,万万没想到。
写业务代码,几乎很少写测试,追求效率的年代,团队里觉得东西做出来,跑起来,不出大问题就 ok 了。
一直用 vue.js 开发,最近开始着手把单元测试搞起来了。

《编码》阅读中

「编码」看到14节了,一路过来,仿佛知识从初中到大学过了一遍。一边看,一边想起大学的「数字电路」、「微机原理」。
没有静下心去看很多细节的地方,多数匆匆而过。

书不错,继续阅读中。

免费 https 证书

想要自己的网站也有一个绿色小锁,但又不想付费购买证书,Let’S Encrypt 上提供了免费申请 https 证书的服务,整理了申请大致流程如下

下载 certbot

解压打开执行就会有相关提示

生成免费证书

1
2
3
./certbot-auto certonly --webroot --agree-tos -v -t --email 邮箱地址 -w 网站根目录 -d 网站域名
./certbot-auto certonly --webroot --agree-tos -v -t --email yourmail@gmail.com -w /path/to/your/web/root -d yourdomain.com

注意 这里 默认会自动生成 /网站根目录/.well-known/acme-challenge,然后 shell 脚本会对应的访问 网站域名/.well-known/acme-challenge

如果返回正常就确认了你对这个网站的所有权,就能顺利生成。

获取证书

如果上面的步骤正常 shell 脚本会展示如下信息:

1
2
3
- Congratulations! Your certificate and chain have been saved at
/etc/letsencrypt/live/网站域名/fullchain.pem
...

生成 dhparams

使用 openssl 工具生成 dhparams

1
openssl dhparam -out /etc/ssl/certs/dhparams.pem 2048

配置 Nginx

打开 nginx server 配置文件加入如下设置:

1
2
3
4
5
6
7
8
listen 443
ssl on;
ssl_certificate /etc/letsencrypt/live/网站域名/fullchain.pem;
ssl_certificate_key /etc/letsencrypt/live/网站域名/privkey.pem;
ssl_dhparam /etc/ssl/certs/dhparams.pem;
ssl_protocols SSLv3 TLSv1 TLSv1.1 TLSv1.2;
ssl_ciphers HIGH:!aNULL:!MD5;

然后重启 nginx 服务就可以了。
注意要确定用户有权限访问 /etc/letsencrypt/ 该目录。

强制跳转 https

https 默认是监听 443 端口的,没开启 https 访问的话一般默认是 80 端口。如果你确定网站 80 端口上的站点都支持 https 的话加入下面的配件可以自动重定向到 https

1
2
3
4
5
server {
listen 80;
server_name yourdomain.com;
return 301 https://$server_name$request_uri;
}

证书更新

免费证书只有 90 天的有效期,到时需要手动更新 renew。刚好 Let’s encrypt 旗下还有一个 Let’s monitor 免费服务,注册账号添加需要监控的域名,系统会在证书马上到期时发出提醒邮件,非常方便。收到邮件后去后台执行 renew 即可,如果提示成功就表示 renew 成功

1
./certbot-auto renew

可以在 crontab 中设置定时脚本。

Gitlab CI 自动部署

作为个人私有项目的仓库,Gitlab 是不错的选择。Gitlab 版本更新迭代也蛮快的。最近在研究 Gitlab 的 CI/CD。

需求

代码 push 到 gitlab 后,自动部署到自己的服务器上。

实现过程

文档托管在gitlab上, 每次代码更新, 会自动出发gitlab-ci构建
在构建脚本中, 通过ssh 登录远程服务器执行git拉取文档的命令

步骤:

  • 首先需要在服务器上生成ssh证书

注意该证书的用户必须与ssh远程登录的用户一样, 例如我们的用户名是 markday
将公钥添加到gitlab上, 以便于该用于可以拉取代码
在 CI/CD Piplines中设置 Secret Variables, 包括 DEPLOY_SERVER 和 SSH_PRIVATE_KEY
其中 SSH_PRIVATE_KEY 的内容是服务器上的私钥, DEPLOY_SERVER 是服务器地址

  • 编写 .gitlab-ci.yml 文件, 注入密钥, 通过ssh执行远程命令
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
# 使用alpine镜像, 该镜像很少,只有几兆 test
image: alpine
stages:
- deploy
before_script:
# 预先装 ssh-agent
- 'which ssh-agent || ( apk update && apk add openssh-client)'
# 启动服务
- eval $(ssh-agent -s)
# 将私钥写入deploy.key 文件
- echo "$SSH_PRIVATE_KEY" > deploy.key
# 配置较低权限
- chmod 0600 deploy.key
# 注入密钥
- ssh-add deploy.key
- mkdir -p ~/.ssh
- '[[ -f /.dockerenv ]] && echo -e "Host *\n\tStrictHostKeyChecking no\n\n" > ~/.ssh/config'
release-doc:
stage: deploy
script:
# 连接远程服务器并执行拉取代码的命令
- ssh markday@$DEPLOY_SERVER "cd /path/to/site && git pull origin master"
only:
- master
environment:
name: production
url: http://$DEPLOY_SERVER

过程中需要注意几点

  • 把服务器上生成的public key 添加到 authorized_keys
  • 在代码目录中添加 gitlab 远程仓库地址

科目二终结

预约修整近一个月后,重考科目二。

为什么人在考试的时候会紧张呢?而且感觉比上学时的考试还紧张。

技能没问题时,考验的就是心态和运气了。

还好,科目二过了。

科目三见。

阿里多隆

多隆,不是鹿鼎记里那个多隆,而是指阿里的以为工程师,取花名多隆,如今已是阿里的合伙人。

第一次听多隆还在在《淘宝技术十年》这边书里,对这个人印象比较深刻。「有问题找多隆」「多隆一个人顶一个团队」……有很多这样的传闻。

近期看到阿里技术公众号推送的一段视频,才第一次见到多隆真容。很纯粹的一个人,不是神,而是一个普通人,只不过是偏爱技术。

这样的技术大神是怎么做到的?用多隆的话说就是做嘛,一步一步做。

附上视频链接
https://v.qq.com/x/page/y0511wo4ssd.html

应用工程师

应用工程师就是用别人造好的轮子,甚至还有板车架子,在工地上搬砖的工人。

业务代码写多了,有上面的感受。

如何突破业务的瓶颈,纵向和横向,有一点思考,后面再说。

临大事必有静气

快下班时接到一条 bug,关于支付的。所有的 bug 都不会让人胆战心惊,除了支付,毕竟是和钱打交道的。
赶紧排查,前端、后端、客户端、支付平台一起上,还是没找到原因所在。
脑海中有个声音在回荡,临大事必有静气,上了个厕所,呼气点外面冷空气,回到座位,开始一步一步,似魔鬼的步伐。还在,最终 bug 定位到了。
具体细节不便透露。总之,bug 终究会产生,bug 也终究会被解决。

文字需要持续

周六记事

  • 去了一趟郊区,吃了一顿饭;坐车很困
  • 约了人在星巴克聊了几个小时,喜欢安静且人不多的星巴克
  • 线上出现点问题,紧急解决
  • 赶紧码点字,即使是流水,也要做点文字持续的事情

坐车回来在出发层直接叫了一辆快车,上车后司机说这是他第一次在出发层接单,回头可以在司机群里吹吹牛逼了。

不要让加班成为一种常态

不喜欢加班,应该说没有人喜欢加班吧。可是尤其在程序员这个群体,在所谓的互联网公司里,加班应该是一种常态,不加班可能会被归为异类。

是否真的有那么多的工作在每天的8个小时都无法完成?我们又是否停下来思考过加班的目的是什么?

坦率的讲,看似薪水还不错的 IT 行业,时薪是真的很低。