技术

前端跨项目组件化及基于Docker的快速部署方案

2018年04月14日凌晨 天气🌧 最近静下心来写了几个项目,花了些时间重新整理了整套组件化方案和部署方案,记录一下。 跨项目组件化 前端的组件化不用多说了,发展到现在,无论是React的还是Vue,都提供了相当方便的组件化实现。在日常项目中,有些组件其实是可以跨多个项目使用的,将这些组件抽离出来作为单独项目,并复用到其他项目中去,一来可以避免重复造轮子,加快开发速度,二来维护效率也高,一些bugfix或者新特性直接在组件中更新,项目中只需要更新引用版本号即可,方便快捷。 跨项目的组件化方式也很多,开发阶段可以用npm link,相当于在主项目的node_modules目录中创建了一个链向组件项目的软链,方便是挺方便,但是有几个问题。一是Eslint的目录递归检查是基于最终实际目录的,也就是说虽然Eslint默认排除node_modules目录,但它依然会对该目录中的软链项目进行检查,一旦组件项目的Eslint规则和主项目的Eslint不一致的话,主项目Eslint就没法通过,

  • Bean Deng
    Bean Deng
8 min read
技术

Maven项目Docker一键发布配置

2018年04月12日 小雨🌦 Docker用了很久了,之前Maven项目一直用的docker-maven-plugin,但是作者目前已经不推荐使用这种方式了,该项目已经不再更新功能,只提供bugfix。他们的新项目叫做dockerfile-maven,配置上有些不同,之前一直没时间去更新,最近的一个项目中,采用了最新的插件,中间也踩过不少坑,刚刚终于都搞定了,记录一下。 Dockerfile无需多说,整理了一个通用的,可以用在任意Spring Boot项目中,如下: FROM frolvlad/alpine-oraclejdk8:slim RUN ln -sf /usr/share/zoneinfo/Asia/Shanghai /etc/

  • Bean Deng
    Bean Deng
2 min read
随笔

随笔

2018年3月1日,多云⛅️ 昨天骑车出去了一趟,那大风吹得,让我感慨万千。 不再有冬日刻骨铭心的凛冽,也不像夏日沁人心脾的凉爽,而是一股扑面而来的狂风,吹得我头发都变了形,这个时候就会意识到近视的好处了,当我抬起头,正面迎着风的时候,眼镜帮我挡住了本该吹进眼睛的风,让我能够睁开眼看着前面的路。 本该早上去交给中介的材料,昨晚熬夜,早上起晚了,到了中午她打电话催我才想起来。“屋漏偏逢连夜雨,船迟又遇打头风”,每每想起这句话,总觉得形容得太生动了。还好我是骑的电动车。我一路驰骋,顶风前进的时候,可以明显看得出旁边骑着自行车的人有多么吃力。 回来的时候,注意到路上的红绿灯都在风中摇曳,又想起杜甫那首《茅屋为秋风所破歌》,里面对大风的描述,也是让人画面感十足。 临近家的时候,

  • Bean Deng
    Bean Deng
2 min read
日志

2018年伊始

2018年1月1日,天气晴 2018年的第一天,下午,地铁4号线。 2017年,经历了很多事,有喜悦,有愤怒,有信心满满,有无可奈何。 理应在2017年末写点总结的内容,却一直没有心情。2018的第一天,跟手头项目的甲方老板聊了会天,豁然开朗,心情好了很多,对未来又多了些信心。 2017年,最大的成就应该就是牛拜单车的项目了。从问题百出的外包手上接过项目,从零开始搭建技术团队,最终稳定运营,累计几百万单,也是有史以来管理过的最大的项目了。技术层面,Docker、kotlin、VUE,这些新东西也都玩得很溜了。 2017年,最无奈的应该也是牛拜单车。这个项目是以全职的方式做的,

  • Bean Deng
    Bean Deng
4 min read
技术

微信小程序在安卓上SSL报错的问题

开发工具上和iOS真机上访问api都是正常的,在安卓上提示如下错误: request:fail ssl hand shake error 尝试在安卓的浏览器中访问api地址,提示“该证书并非来自可信的授权中心”,于是感觉应该是SSL证书的问题。 SSL证书是通过Let's Encrypt申请的,部署在阿里云SLB上。 通过https://www.ssllabs.com/ssltest/index.html 测试,TLS1.0、TLS1.1、TLS1.2都是支持的,但有如下提示 This server's certificate

  • Bean Deng
    Bean Deng
1 min read
技术

Ghost博客迁移至阿里云Docker

刚刚,将Ghost博客迁移到了阿里云Docker上。 由于近期网络问题,导致家里的NAS已经无法提供443端口的服务了,之前的临时解决方案是将hadb.me的域名解析到DigitalOcean的一台机器上,然后用nginx转发到NAS的20443端口,通过海外的服务器做了中转,访问速度可想而知。并且近期海外网络极不稳定,最终决定还是老老实实备案,迁移到阿里云上来。 近年来,Docker容器化越来越火,我最近的几个项目也都是通过Docker来部署的,非常方便。 域名备案经历了几波周折,提交备案后,阿里云初检未通过,有如下问题: 根据要求已经取得备案号的网站最下方必须显示您的备案号,并能链接到工信部网站www.miitbeian.gov.cn,目前您网站“monkeyrun.net”最下方备案号无法链接工信部网站,请您修改 根据要求网站名称必须与主办单位名称有一定的关联性。您备案的网站名称“HADB的博客”

  • Bean Deng
    Bean Deng
5 min read
随笔

喜迎十九大

最近十九大召开,我的博客、GitLab等服务都挂了。 以往,上海电信虽然封了80端口,但443端口还能用,我自己的站点基本都在家里自建的一台服务器上,通过猫的NAT设置,把443的流量转发到服务器上来,里面再通过Nginx,可以实现https访问自己的博客以及GitLab等服务。 不过现在443端口也禁用了的话,就只能用自定义端口了,看起来就很别扭了。GitLab目前临时换了别的端口在用,因为GitLab这货实在太耗性能了,云服务器上自己搭个的话,太费钱了。所幸的是Ghost的性能消耗应该不高,昨晚已经开始走域名备案的流程,妥协了,为了博客能稳定,打算把博客放到阿里云上。 作为一个程序猿,科学上网是必备技能。然而国内的网络环境,极其恶劣,在这样的情况下,也催生了很多产业,SS账号便是其中一个灰色产业。很早之前我也是通过购买各种第三方的账号来科学上网,但后面由于网络不稳定,加上项目上的关系,

  • Bean Deng
    Bean Deng
4 min read
随笔

小黑的故事

小黑是一只流浪狗。 生下来没几天就被遗弃到到垃圾房旁边,由它自生自灭。据我奶奶讲,她第一次在垃圾房旁边见到小黑的时候,它还是个小奶狗,饿得嗷嗷叫。我奶奶见它可怜,给了些剩菜它吃。过了几点再去扔垃圾见到它的时候,它已经会自己从垃圾里面找东西吃了。由于我奶奶经常喂东西它吃,它就跟着我奶奶回家了,赶都赶不走。 小时候它很粘人,也很讨人喜欢。我奶奶有时候早晨去田里干活,小黑不声不响地就跟着她了,一直陪着她,直到她干完活回来,奶奶那时候挺喜欢它的。我回过老家几次,第一次见到它,它一点都不认生,没有冲着我叫,见到我就摇尾巴。每次吃完饭,第一件事就是把骨头什么的给它吃,吃得可香了。没有骨头的时候,我会把火腿肠省给它吃。可能从小饿惯了的原因,它吃东西特别快,

  • Bean Deng
    Bean Deng
5 min read
生活

家里进小偷了

早上出门前老婆发现厨房靠外的窗纱被刀划开一个大口子,我去看了下,发现被划开一个L型的口子,人刚好可以穿过,再看窗台,发现有脚印,突然意识到应该是小偷光顾过了。 目前我们租在一楼,厨房是靠在外面的,平时窗户都会关,有人的时候有时候会开着通风。窗户外面做了一个大的纱窗,防蚊用的。 发现被小偷光顾后,赶紧检查家里值钱的东西,我看了下我的包,发现macbook、钱包以及钱包里的钱都在,老婆看了看戒指啥的也都在。仔细想了想,家里也没啥值钱的东西,最值钱的估计也就macbook跟戒指了。手机啥的都在床上,估计小偷没进卧室。 经过事后回忆,小偷很有可能是在早上8点多光顾的,因为我们上班比较晚,一般9点多才出门,小偷估计以为家里没人了,进来后发现床上有人,就跑了。 这件事情有这样几个想法: 尽量不要买或租1楼的房子,

  • Bean Deng
    Bean Deng
1 min read
日志

开始使用Ghost啦!

关注Ghost很久很久了,14年就尝试过0.5.3版,由于一直没有出正式版,所以一直处于关注和等待中。 终于在差不多一年前Ghost在GitHub上发布了1.0.0-alpha.1,本以为很快就能出正式版了,开始了焦急的等待。一开始基本上每天都会去GitHub上检查下他们的动态。后来变成了大约每周会去看一次,等了一个又一个版本,甚至等了大半年,终于在第21个alpha版后,推出了beta版,随后不久发布了1.0.0正式版。尝试去安装,结果发现挺多坑的,试了很久都没成功,正式版的Docker镜像也一直没出。再后面,Ghost团队的更新也非常勤奋,基本每周都会发布新版本,那段期间我正好也比较忙,一直在默默关注,没有再去尝试安装,任务列表里的“博客迁移到Ghost上”

  • Bean Deng
    Bean Deng
3 min read
日志

陪产日记

03:18,电梯里,老婆口渴了,我出去买点喝的。宫缩还不是很规律,五六分钟一次,偶尔十几分钟。 03:21,独自走在马路上,有点冷,身边仍然不断有汽车呼啸而过。红绿灯路口,仍有汽车电动车交错,凌晨3点的上海,依旧热闹。前段时间,又忙得没有坚持写日记了,从今天开始,恢复写。到全家了,附近也只有全家还开着。 03:34,买了一堆吃的喝的,全家对面的马路上停了好几辆出租车,司机在组团睡觉。买完东西突然肚子好饿,困倒不困,心里面的感觉,还说不上很激动。毕竟这种小打小闹的阵痛已经很久了,

  • Bean Deng
    Bean Deng
3 min read
生活

小黑啊小黑T.T

昨天爸爸从成都开车回老家了,连续开了22小时,1900公里到老家了。 早上告诉我到家的消息,以及小黑被隔壁二爹爹送掉的消息。 T.T,可怜的小黑,被蒙着头扔到到邓庄的某个十字路口了,又要变成流浪狗了,想想就可怜。老婆早上听到这个消息都哭了出来。 小黑是我目前见到的占有欲最强也是最热情的狗了,可谓性情中狗。它的故事以后有空再详说。只能说生而为狗,而且出生就被抛弃成为流浪狗,是一件很不幸的事。

  • Bean Deng
    Bean Deng
1 min read
技术

Entity Framework Core SQLite provider向已存在的表中添加外键

SQLite本身不支持向已创建的表中添加外键,类似的限制还有很多,比较蛋疼,具体可以参见SQLite Limitations。 项目中,如果是测试的时候,数据不是很重要的话,最方便的方法就是把已经创建的Migrations包括ModelSnapshot都删掉,重新Add-Migration重建数据库。 对于已经发布的应用,数据库不能删了创建的话,可以“曲线救国”。 假设需要给TableA添加一个需要建立外键的字段ColumnA,为了增加难度,假设TableB中的Column B是TableA的外键。具体操作方法如下: 先在代码中TableA里添加ColumnA(不设置外键),Add-Migration,更新到线上数据库 将本地的数据库改名为database-backup,删除项目中所有Migrations和ModelSnapshot,创建一个RebuildDatabase的Migration,创建全新的数据库,从新数据库中复制TableA的Create Statement SQL语句并将改SQL语句中的表名改为TableA-New 在线上数据库中执行步骤2中的SQL语句,将创建TableA-New(已经含有外键约束了)

  • Bean Deng
    Bean Deng
2 min read
技术

自建NAS及DDNS

众所周知的原因,前段时间360云盘也倒下了,之前大部分照片、电影资源都放在360云盘上。由于国内的环境,感觉第三方云盘的可靠程度还不如自己建个NAS。前端时间研究了硬件方案,今天研究了下外网访问的方案。 固定IP肯定是拉不起,太贵了,国内运营商太黑心。只能通过DDNS,但花生壳这种我也不想用,以前试用过,速度太慢。既然是程序猿,还是自己来吧。具体方案如下: 阿里云的云解析DNS,升级付费版,将最低TTL值拉到1秒,其余都拉成最低配置,一年40.8块钱,完全可以接受。 在自己的阿里云服务器上搭建一个小站点,用于返回来访请求的公网IP地址。没有外网服务器的,可以利用ip138的服务来做,http://city.ip138.com/

  • Bean Deng
    Bean Deng
1 min read
技术

解决阿里云CDN回源https返回503错误的问题

最近打算把www.monkeyrun.net改成全站https,使用的Let’s Encrypt的证书。然而在设置阿里云CDN的时候,阿里云CDN回源一直返回503错误,发工单,来来回回经过整整两天,终于把问题解决。容我娓娓道来。 最一开始,我先开启了阿里云的CDN,源站设置为www.monkeyrun.net,通过80端口回源,没有任何问题。 后来当时配置好证书,站点也开启了https之后,将回源端口改为443,开始出问题了,CDN资源全部返回503。而直接通过浏览器访问https的源站内容,都是没有问题的。 发工单,经过漫长的等待和提供链接等更详细的信息之后,阿里云的工作人员首先认为这个问题可能是由于我开启了防火墙或者一些安全软件导致,拦截或阻止了CDN节点的回源请求。我关闭了防火墙,问题依旧存在。 又经过漫长的等待以及转交专项处理人员处理之后,

  • Bean Deng
    Bean Deng
2 min read
技术

Windoows下Redis Sentinel的部署

虽然很久之前就了解了Redis的哨兵机制,今天第一次尝试在多个服务器上部署多个Redis实例,并且设置了哨兵用来进行自动的主从切换。 一、部署Redis 在3台服务器上分别安装了Redis,Redis on Windows下载地址:https://github.com/MSOpenTech/redis/releases。 配置文件添加密码: requirepass <密码> masterauth <密码> 除了设置本实例的密码外,还需要输入master的密码(需要和本实例密码相同),所有实例需要设置相同的密码,以便进行主从切换。 需要注意的是,Redis从某个版本起,加入了一个protected-mode的保护模式。启动保护模式的条件是protected-mode开启,

  • Bean Deng
    Bean Deng
3 min read
技术

使用Visual Studio Web Deploy发布ASP.NET Core至IIS

操作系统要求 Windows 7及以上 Windows Server 2008 R2及以上 IIS配置 在服务器管理器中,通过添加角色和功能的向导,在服务器角色中勾选Web服务器(IIS),并安装。 安装.NET Core Windows Server Hosting包 安装.NET Core Windows Server Hosting,这个包会安装.NET Core运行时、.NET Core库和ASP.NET Core模块,这个模块会在IIS和Kestrel服务器之间创建反向代理。

  • Bean Deng
    Bean Deng
4 min read
技术

“Bad Request - Invalid Hostname”的解决办法

最近在做一个微信端的应用,除了在本地测试之外,有时候还需要在手机上进行测试。 假设我的手机和PC在同一内网内,PC的IP是192.168.1.2,Website的端口是12345。 我的第一反应是,我应该在手机上通过http://192.168.1.2:12345来访问我的站点。 然而,我得到了这样一个错误: Bad Request - Invalid Hostname ------------------------------------------------ HTTP Error 400. The request hostname is invalid. 方法很简单,

  • Bean Deng
    Bean Deng
2 min read
技术

ASP.NET Core初体验

前两天试了下ASP.NET Core MVC,很好用。微软整合了大量前端工具,npm、Bower都可以很方便地使用了,甚至对Grunt、Gulp这类的工具都有集成一些任务管理器,这对前端来说,是一件鼓舞人心的事。 ASP.NET Core MVC的推荐目录结构也进行了调整,新增了wwwroot这样一个静态目录,js、css、图片都可以放这里面,而Bower管理的第三方前端库则会自动下载到wwwroot里面的lib目录下。作为强迫症的我,wwwroot这个目录必须全部是自动生成的。通过Gulp,可以很轻松的实现这一点。继承原先的目录结构习惯,在解决方案下建立Scripts、Styles、Images文件夹,里面用来放原始的js、less和图片,然后通过Gulp进行合并、压缩、

  • Bean Deng
    Bean Deng
3 min read
随笔

Plan B

今天从外面回来的路上,我在想,我的Plan B是什么。 直到刚刚,看到阮一峰老师新文章《你的B计划在哪里?》,才发现,我之前所想的那些Plan B其实并不算Plan B,而是基于Plan A的一些妥协与调整。真正的Plan B应该是那些实施起来非常艰苦,不到走投无路自己没办法下定决心去做的计划,但他往往是所有的Plan A都失败的情况下,能救命的计划。 前段时间很幸运接到了一个非常好的项目,APP的外包开发,要求签完合同两个月内完成。这对我来说,是个挑战,也是个机遇。一直很想转型,做前端也挺久了,然而现在的我越来越发现,在公司的这些项目对我而言没有任何挑战性,纯粹是堆时间。而且业务变动及其不稳定,加上一直被需求赶着走,甚至没有时间停下来整顿代码、

  • Bean Deng
    Bean Deng
5 min read
随笔

The End of 2015

不知不觉,2015年就快到尽头了。 这一年,经历了好多事。 自从5月20号离开新蛋之后,就开始了无休止的加班生活,仅有的一点周末,也被之前接的一些外包所占据,没有闲暇做自己的事,没有闲暇更新博客,总共只写了两篇文章,还都是在上班时间抽空写的。 这半年,论成长倒也成长了不少。技术上,在H5方面也积累了自己的一套框架,在和Native App甚至微信上的交互上实现了大一统,可以做到一个页面,同时给iOS、Android和微信H5使用,并可进行双向数据交互。职场上,也接触了更多的人和事,感触很多。 做了大半年的前端,等级也晋升为高级前端开发,但做着做着,也开始有点迷茫,不太看得清职业的发展方向。优秀的前端工程师很少,我感觉有这么几个原因: 一是,

  • Bean Deng
    Bean Deng
3 min read
技术

微信公众号中更换域名

更新 如果需要实现微信授权支持多个回调域名,可以参考我这个开源项目:GetWeixinCode 问题描述 项目刚做的时候,并没有找到好的域名,所以用了一个比较长的域名。后来公司花钱买了一个心仪的域名,理所当然,我们需要启用新域名了。 我们的H5站点是基于微信的,由于微信的各种坑,这里有很多值得注意的地方。 首先,需要在公众号设置中,将新域名加入到业务域名以及JS接口安全域名中,在微信支付的开发配置中,也要将新域名加入支付授权目录中。这几个比较容易,因为他们都支持配置多个域名。 我们的页面加载之后会立即通过静默授权跳转去拿用户的code以换取openid,来实现自动登录,为了减少跳转,我们在微信公众号的自定义菜单中配置的链接就是微信的授权链接 https://open.weixin.qq.com/connect/oauth2/authorize?

  • Bean Deng
    Bean Deng
3 min read