自行托管 GitLab 以代替群晖套件中心中的套件

之前说坑爹的群晖存在自动升级迁移数据失败的问题并给出了解决方案..这段时间陆陆续续也有一些朋友联系我说遇到相同的问题.考虑到群晖的实际技术实力,遂决定自行托管,放弃套件中心中的套件.

自行托管的好处

  1. 性能更强劲.众所周知,群晖的硬件配置非常低,而 GitLab 又是重型应用程序.即便是旗舰机型也会经常遇到 503 的情况.
  2. 升级更简单.为虚拟机打个快照,执行官方升级程序,搞定收工.
  3. 数据更安全.不必使用非官方的迁移脚本,不必使用官方不推荐的数据库.

托管方式的选择

  1. 服务器,稳定不折腾,视各位体质点数对钱包君会造成一定程度的暴击.
  2. 家里的数据中心服务器或者长时间开机的电脑.我选择了这种,可以获得非常快速的访问体验(穷).

安装 GitLab 详细流程

安装 Debian 9(stretch) 操作系统

  1. 由于 GitLab 要使用较多内存,所以使用 64 位镜像.截至发文时,官网的文件名为debian-9.5.0-amd64-netinst.iso.
  2. 我设置了 4G 内存和 8G 交换空间.
  3. SSH 默认禁止 root 使用密码登录,需要修改/etc/sshd/sshd_config中的PermitRootLoginyes.添加密钥后记得改回来.
  4. 安装open-vm-tools以使用共享文件夹备份数据.
  5. 创建共享文件夹,设置权限为读与写.

安装 GitLab

建议安装企业版(ee),不激活附加功能等同于社区版(ce),如果哪天你想升级到企业版,无需重新安装即可原地升级.

apt-get install -y curl openssh-server ca-certificates sudo
curl https://packages.gitlab.com/install/repositories/gitlab/gitlab-ee/script.deb.sh | sudo bash
apt-get install gitlab-ee

修改 GitLab 配置文件/etc/gitlab/gitlab.rb,然后运行gitlab-ctl reconfigure.

使用gitlab-ctl diff-config可查看修改的选项.

建议修改以下配置:

# 如果是家庭用户,注意默认 80 端口被运营商封锁
external_url 'http://你的网址:端口号'

# 使用第三方发信服务可以获得更好的邮件到达率
gitlab_rails['gitlab_email_from'] = 'example@example.com'

# 备份保存时间,超过这个时间自动删除本地备份
gitlab_rails['backup_keep_time'] = 604800

# 下面的地址是共享文件夹路径
 gitlab_rails['backup_upload_connection'] = {
   'provider' => 'Local',
   'lacal_root' => '/mnt/hgfs/GitLab_data',
 }
# 邮件服务器设置,以阿里云为例
gitlab_rails['smtp_address'] = "smtpdm.aliyun.com"
gitlab_rails['smtp_port'] = 80
gitlab_rails['smtp_user_name'] = "你的发件人用户名"
gitlab_rails['smtp_password'] = "你的密码"
gitlab_rails['smtp_domain'] = "你的网址"

设置备份:

crontab -e
# 每天02:00执行备份.注意刚才我们已经设置了同步备份文件到 Mac 上的共享文件夹.
# 这样我们就可以直接利用时间机器备份到群晖了.
0 2 * * * /opt/gitlab/bin/gitlab-rake gitlab:backup:create CRON=1

路由器中映射端口,输入你的网址测试吧!

修复群晖 GitLab 升级失败的问题

如果你最近使用群晖套件中心的 GitLab( 9.4.4-0050 ) ,并且勾选转换数据库( MariaDB => postgresql ),那么你很可能遇到丢失数据的问题( Version: 10.6.4-0051 ).表现为打开 GitLab 首页提示设置 root 密码,登录后台显示所有项目丢失.

一行代码与两个漏洞

某日帮客户处理后台问题,途中需要阅读代码,随眼一扫,感觉问题太多,以管理员登录后台为例

$data['admin_pass'] = md5(strtolower($_POST['admin_pass']));

短短的一行代码可以看到其中包含两个缺陷:

将用户输入转为小写,导致密码不区分大小写.

以允许使用英文和数字的 8 位密码为例,区分大小写有 218340105584896 种可能,不区分大小写只有 2821109907456 种可能,两者差距约为 77 倍,增加了密码被破解的可能性.

没有正确使用加密算法.

虽然 MD5 是一种不可逆的算法,但是网络安全人员通过彩虹表可以逆向查询到原始密码.破解的大致流程是这样的,首先计算出所有密码的可能性(原文),然后进行加密运算得到密文.当需要破解某个密码的时候,直接查询密文比对出原文即可得知明文密码.

为了对抗彩虹表攻击,开发人员曾使用增加 salt 的方式来增加攻击者成本.

md5('password' . 'salt')

知名论坛程序 Discuz! 就使用了类似的方式.一时间开发人员纷纷加盐,活脱脱咸菜世家的节奏.

现在的解决方案.

都 8102 年了,对技术稍微有点追求的开发者都在使用 bcrypt 了!

写在冥王峡谷上市之前

我对迷你尺寸的 PC 一直情有独钟,尤其是 NUC :巴掌大的体积,媲美台式机的性能.符合我对小钢炮的全部想象.前些日子听说 Intel 和 AMD 联手打造了新一代旗舰 NUC8i7HVK ,于是捣鼓两句权当纪念兢兢业业陪伴我加班的小骷髅.

没有跑分,没有对比,没有开箱,只有碎碎念.

前年因工作需要,编译和读写大文件成为了我的日常.主力机 MacBook Pro ( 2014 Mid )有些力不从心,耗时太久.曾帮网友配了一台骷髅峡谷,对它的表现印象极其深刻,于是拔草.

整机配置为:

CPU + 主板 Intel NUC6i7KYK
硬盘 samsung 850 EVO 500G
内存 金士顿骇客神条 Impact 系列 DDR4 2133 32G ( 16G * 2)

在后续的使用中,标压满血的 i7-6770HQ 表现凶残.原本需要 30 分钟的工作不到 5 分钟就完成了.对此我非常满意.这里我强行按捺怒火忍住了对 Windows 10 ( Bug 10 )的吐槽.

槽点不多.一是被 Intel 寄予厚望的锐炬显卡表现差强人意,在运行 FFX 时 1080P 的分辨率下也无法开启最高特效.二是经常会听到如同直升机起飞的噪音,听得久了习惯了,感觉很踏实.小家伙仿佛在和我说:嘿,我在努力工作,你也别偷懒.让它干的总是累活,有时会产生雇佣童工的错觉.不知道 ITX 神教的信徒听到这段话会作何感想.

后来换了新电脑,性能强大,骷髅就闲置了.本着物尽其用的原则,帮它寻了新的下家,至此阶段性目标圆满达成,本季终.

用 Apple Watch 或 iPhone 上的 NFC 充当门禁卡解锁

Apple Pay 在中国推广缓慢,支持的地方少之又少,远不如支付宝和微信支付来得方便.在漫长的等待之后,中国用户终于迎来了一个略微有用的功能: Apple Pay 充当公交卡.

可惜的是,国内尚未有全国通用的一卡通,本次 Apple Pay 也仅仅支持了北京和上海两地.这让其它地域的小伙伴如何愉快玩耍?别慌, 04 给你出个主意: 门禁卡.

适用设备

设备必须支持 NFC ,具体可查询此处.

玩耍步骤

  1. iOS 上打开钱包 – 右上角加号 – 公交卡,北京一卡通最低只需预存 5 元即可(服务费另计).
  2. 开卡后在需要解锁的设备上授权,比如智能门锁或小区门禁.
  3. 可将卡片转出到 Apple Watch 上,避免忘记携带手机的悲剧.

Pixelmator 和 Pixelmator Pro 的简单对比

得益于订阅官方新闻,第一时间入手了 Pixelmator Pro( 下文称专业版 ),经过几天的简短试用,说说感想.

薄暮嫩江

此去经年.

借助 rubyc 打造跨平台的绿色软件

什么是 rubyc ?

齐齐哈尔市梅里斯达斡尔族区

随便拍拍~

为 HTTPS 网站启用 HSTS

什么是 HSTS ?

借用维基百科的介绍,HTTP Strict Transport Security翻译为 HTTP 严格传输安全,网站部署该策略后,浏览器会强制启用 HTTPS , 以降低被劫持的风险.