轶哥博客

妄图改变世界的全栈程序员。

Node.js 网页截图服务 - 网页快照API

Puppeteer 是 Headless Chrome Node API。也就是谷歌将Chrome无头浏览模式的接口封装成Node.js的API。利用Puppeteer实现网页截图/网页快照服务是非常容易的。

webpage-capture是基于Puppeteer实现带权限认证(多APP授权)、配备消息队列管理的网页快照API。

源代码:https://github.com/yi-ge/webpage-capture
功能:可对百万级网页数据进行截图采集的API服务。
Swagger文档:https://capture.gapi.store/documentation

创业之殇——管理

最近一年,我一直在研究优秀的项目、写代码、学东西。

我也不知道为什么突然谈起管理这个话题。

小公司也需要管理

有人说“小公司最好没有管理,一定要做减法”。从某种角度上看或许是对的,“跟战略对口的人共事,团队成员一定要那种能够自我驱动的人”。

这个说法在几年前可能我会非常赞同,但是就现在看来,这话说得太绝对。

选人要看品质,但是“完全自我驱动的人,和完全需要踢着屁股往前走的人,是两个极端,现实中都是很少的(——格总在人间)”,有自驱动力的人也需要鼓励,也需要管理

如果有自我驱动力的员工,他的成绩没有得到认可,对他来说他的感觉可能就是:“每天都好像在考试,但是从来不公布分数。总是不知道自己做得好不好,也不知道以后会怎么样...” (节选来自插座学院创始人“何川”文章)。

他没有安全感,也没有成就感。

公司如果不能让好员工全心投入到工作中,就留不住好员工

当你对即将离职的员工说:“你做的很好,你很优秀,我跟其他领导也一直在表扬你”这些话的时候,已经晚了。

PHP 7.3正式版+常见拓展的Docker镜像

2018年12月6日PHP官方发布了PHP 7.3.0 正式版。恰逢最近在写一个PHP在线练习的网站,特意去翻了一下7.3.0正式版的Docker镜像。

因为官方镜像只包含了最基本的模块,像pdo_mysqlredis之类的模块并没有包含进去。在hub.docker.com中找到一个相对比较合适的 PHP 7.2 版本的Dockerfilehttps://hub.docker.com/r/phpdocker/phpdocker/),却发现作者将MariaDBRedis ServerNode.js等内容给编进了Image。

我比较喜欢干净的Docker Image,一个镜像只做一个事情。像MySQLRedis之类的数据库,可以单独启动相应的模块。

因此我在前人的基础上,移除了MariaDBRedis ServerNode.js并升级PHP版本到7.3.0正式版。

树莓派挂载硬盘Shell脚本

快速挂载Raspberry PI硬盘,可挂载USB硬盘。
注意:此脚本一次性将硬盘整个空间分为一个区,格式化为ext4格式,如果需要分多个区请手工操作。

理论上此脚本适合大部分Linux系统,不推荐在服务器中使用这样的脚本。

解决 Rancher 2 卸载后无法重新运行的问题

因某些原因需要重装Rancher 2,本想着运行在docker中的系统应该很容易重装。但是重装后出现了很多报错。

一个Rancher集群需要EtcdControlWorker三个角色都正常运行,该集群才能正常工作。其中Worker代表执行任务的服务器,EtcdControl服务至少部署一个。

重装后EtcdControl服务均出现报错。

报错详情

其中Control则是kube-apiserver容器报Unable to create storage,报错类似:

记一次服务器启动修复 - /etc/fstab错误至系统无法启动

利用RK3399作为ARM微型服务器是非常有趣的事情。然而总有一些意外来得令人措手不及。

事情是这样的。我在服务器中挂载了三块SSD硬盘,其中两块是放于USB硬盘盒,通过Type-C和USB3.0接口连接。

开机自动挂载

我们先看一下开机自动挂载方案。

查询分区的Block ID:

blkid /dev/sda1
/dev/sda1: UUID="7f50f85e-783c-4d94-be37-d2c662504e58" TYPE="ext4"

然后把 Block ID 添加到/etc/fstab文件中,这是我的fstab文件:

UUID=a848d601-91ac-4b5c-8ce3-ffef674f5dd5 /nvme ext4 defaults 0 0
UUID=88eb8df2-1a8f-4f38-acc9-566deb1c8f40 /tf ext4 defaults 0 0
UUID=7f50f85e-783c-4d94-be37-d2c662504e58 /ssd0 ext4 defaults 0 0
UUID=e66307fc-2c33-406b-ae60-b27e2344d02a /ssd1 ext4 defaults 0 0

事情是这样开始的

我在检查硬盘状态的时候,发现其中一块硬盘没有进行4k对齐。然后我对该硬盘进行了重新分区。结果服务器就卡死了!😂

当我重启服务器后,一直连不上SSH。

插入HDMI,显示器一片黑暗!

如果是X86架构的服务器,挂载/etc/fstab失败后会进入高级模式,可以通过接入显示器解决,但是ARM架构(或者说我这块板子)的系统并没有提供这样的后悔药。

x86系统可以进入光盘Linux,然后挂载硬盘改写/etc/fstab文件。但是我的系统烧写在eMMC,即便能在SD卡刷机,通过SD卡引导系统并挂载eMMC硬盘也是非常有挑战的事情。

配置自动续期的免费通配符SSL证书

公益SSL证书机构Let’s Encrypt从2018-03-13起开始支持通配符证书。通配符证书必须通过DDNS添加TXT记录验证域名所属权。

  1. certbot官网安装certbot。

  2. 安装DNS插件

    cerbot支持很多DNS插件,例如:

     certbot-dns-cloudflare
     certbot-dns-cloudxns
     certbot-dns-digitalocean
     ...

    这里以DNSPOD(腾讯云域名默认DNS)为例:

     git clone https://github.com/tengattack/certbot-dns-dnspod
     cd certbot-dns-dnspod
     sudo python setup.py install
  上一页下一页