搭建自己私有的PKM系统,各家PKM大比拼。。附:构建自己熟悉的基础Docker,破解联通光猫
Docker这容器真是很好玩!干啥都想上docker了,快疯了。
这不,最近wiz笔记开始收费,很是不爽,需要寻求新的PKM系统了。备选及落选理由如下:
- wiz笔记 —— 好用,顺手。要开始收费了,不然就只能本地用用,无法同步。
- evernote —— 记下日记挺好用的,但是不能markdown,不好贴代码,作为一个程序员伤不起啊。何况免费版就两台设备同步,区区数十MB的流量,逼人出钱买会员啊。
- 有道云笔记 —— 流量巨大,服务稳定,小巧高性能。奈何除了写日记简直没法用。另外,新版本移除了导出到其他客户端的功能,于此同时数据库接口变化导致旧版本的完全没法使用了,不建议大家使用,不然哪天关闭了就真的gg了。
- 简书、墨迹等 —— 支持markdown,支持本地客户端及同步。但是这blog形式怎么看都不安全,一不小心把公司项目信息发布出去就不好玩了,怕。
- oneNote —— 太强大,太需要管理技巧。太自由,写的漂亮需要设计头脑。太高端,同步不是很顺畅的感觉。怂了。。。
- leanote —— 看起来不错哦,各端都有,而且server端、web端、移动端、桌面端貌似都是open source。试用了一下体验不错哦,还要什么自行车。自己固化一套妥妥的。
本着一套硬件上搭建各种服务的原则,依旧在群晖NAS上部署,希望能搭建好后固化为一个docker image,方便自己也方便他人之后一键部署。
- 初步规划是,nginx运行在一个单独的容器,leanote基于ubuntu运行在另一个容器。通过宿主机上的本地端口进行通信。
- 先要部署ubuntu。想到以后很大可能再基于ubuntu容器开发其他docker image,所以需要打造一个适合自己的ubuntu-dev版本image。
- 先拖下来ubuntu docker image:docker pull ubuntu14.04:latest
- 启动容器,进去就是root帐号:docker run ubuntu /bin/bash
- 在中国,默认源太慢了,现在官方的cn源是基于阿里云的,速度很赞。直接 sed 's/archive./cn.archive./g' /etc/apt/source.list
- 更新源,apt-get update
- 安装vim,apt-get install vim
- 安装sshd,apt-get install openssh-server
- 更改sshd配置,取消UsePAM,Vim /etc/ssh/sshd_config
- 启动sshd,service ssh start
- 安装其他你常用的工具&配置
- 保存镜像,需要在容器运行的时候commit,docker commit container-id
- 使用 docker tag <image_id> <your_account>/<docker project name>:<tag or version> 来给新生成的image打tag
- 推送到docker.io上空间里,docker register docker.io && docker push image-id
- 我已经推送到了我的docker空间里,参考
$ docker push hengbo12345/ubuntu14.04-vim-ssh-zsh:tagname
- 然后在ubuntu容器中,安装leanote
- 主要是参考 官方说明 进行安装
- commit并提交到docker仓库,我整理了一个image,仓库地址为hengbo12345/leanote-based-ubuntu:a57f780
- 需要注意的是,app.conf里面的secret配置一定要改!admin账户的密码、邮箱一定要改!新增账号权限一定要改!---否则被挂马被入侵内网数据全拖or加密勒索了我概不负责!!
- 对于自建服务,客户端也能很好的兼容。注意自建服务地址要写成如:http://192.168.2.2:9000
- 最后如果想设置反向代理,可以部署nginx容器,这个就好说了,直接nginx.conf中设置代理规则就好
这么一套,有笔记、有markdown、有blog,很爽啊!观察了下,性能也消耗不多。那么,接下来希望在公司也能用到家里这套环境的服务。
这里碰到两个问题:
- 家里接入网用的联通光纤,路由器前面有个光猫充当了路由器拨号的角色,而且用户基本没法设置。
- 暴露docker中的服务到外网,并能稳定访问。
首先解决第一个问题,主要是破解联通的光猫,移除其路由器功能,变更为桥接。
- 主要思想参考:Chinadsl 原创文章,如需工具请留言栏留邮箱,尽量一周内回复
- 具体操作可以借鉴:张大妈的文章 ,需要注意的是
- 一定要实现准备好7-zip或gzip工具,非rar。
- 使能之前,先拔光纤,拔无关网线,把操作用电脑所接网线接入Lan1口,然后重启光猫;
- 使能启动成功并不是LAN1 LAN2 E/G灯亮,而是全部灯都亮,然后需要重启猫再telnel;使能成功可能需要2分钟,一次不行就重启再试一次。
- 执行完restorehwmode.sh以后光猫会恢复出厂设置,然后此时猫的网关变成默认192.168.100.1 ,所以需要注意光猫重启后电脑的ip是否192.168.100.0/24 网段,访问http://192.168.100.1这个页面;
- tftp下来的配置,工具解密后是gz文件,解压出来才是xml;解压出来用文本编辑器修改后,建议diff下,千万不能有非自己修改的差异;确认改好了,要先用gzip/7-zip压缩成gzip格式,后缀为gz;然后再用加解密工具加密,得到修改后的hw_tree.xml。
- 恢复设置是,使用文章中提供的默认帐号密码登陆,把之前改好压缩然后加密的xml文件导入。注意输入账号密码的时候不要复制粘贴,否则很可能报错。
- 恢复之后,hwmode的账号密码同样也变了,变为修改为userLevel为0的那个user账号,密码同破解前user密码,除非你自己也一并修改了。
实际参考以上张大妈的文章后,已经把光猫配置为了桥接模式。So:
- 如何恢复非桥接模式?一定要记住设置桥接前,光猫的对lan ip为多少,一般为192.168.1.1。需要恢复路由模式时,可以把电脑配置为192.168.1.0/24网段,然后访问192.168.1.1即可。
- 如何恢复破解前状态?翻译下就是说如何恢复运营商定制模式~~抱歉,我没找到对应工具or方法,请各位高人赐教。
- 如何暴露出leanote服务?
- 由于光猫已经废除路由模式,需自己的路由器配置pppoe上网,这时候你的路由器在公网上已经能扫描到了;为安全起见,路由器密码一定要改复杂点,能关的功能尽量关!
- 路由器上配置dmz,或者端口转发,千万不要设置80端口,没备案的80端口都访问不了!;为安全起见,不建议配置dmz!
- 在路由器or服务器上配置ddns服务,比如test.yourDomain.com;
- 掏出你的手机,断开wifi,输入http://test.yourDomain.com:9000,应该能看到leanote的网页了。enjoy it!!
你以为这样就大功告成了?长者说过,too young, too naive!
- 尽量把/home/$USER/data/下面的mongodb数据放到 挂载到docker上的卷上,这样方便随时备份和撤离数据。
- 需要在admin的管理界面配置Data->Mongodb Tool Configuration中配置好相应路径
- 然后,从wkhtmltopdf官网下载并解压,在config->exportPDF中配置wkhtmltopdf的路径
- 接下里,需要解决wkhtmltopdf的依赖库问题和中文乱码问题
- 依赖库一般Ubuntu会缺失libfontconfig和libXrender-dev,直接apt-get install这两个就好。
- 中文乱码问题呢~~其实也很简单,搞点中文字体放到系统字体目录下即可(注意ttc后缀的需要改成ttf后缀,另外Linux区分大小写!!),我放了以下这些,基本搞定
一切为了折腾!!安拉胡克啊吧!!!
上https!
目前看来,leanote要上https得用nginx反向代理,为了契合docker的理念,nginx用单独的吧。
- FOA,首先,official的nginx build上起,参考 https://hub.docker.com/_/nginx/
- 在docker.io页面里有详细的说明,个人建议conf就cp进去,html目录通过卷映射进去
- 实际上我的实现方式是,html目录映射到/usr/share/nginx/html,config目录映射到/etc/nginx/conf.d
- 证书用https://letsencrypt.org/getting-started/ 这家的,免费CA
- 由于家里用的联通宽带,对外的80/443/8080都是不通的,没法直接通过letsencrypt的host验证,需要走dns验证方式,这里推荐 Neilpand的acme工具,doc点我
- 通过dns验证方式获取的证书有效期较短,到期最好
acme.sh --renew -d mydomain.com -d mydomain1.com 重新刷新下。nginx的证书更新后,nginx需要重启才能生效。
- 最新版的acme已经支持了多个域名共用一个证书(不支持正则),按照LetsEncrypt的政策,最多一个证书能包含100个域名。