搭建自己私有的PKM系统,各家PKM大比拼。。附:构建自己熟悉的基础Docker,破解联通光猫

时间:2024-03-01 08:51:44

    Docker这容器真是很好玩!干啥都想上docker了,快疯了。

    这不,最近wiz笔记开始收费,很是不爽,需要寻求新的PKM系统了。备选及落选理由如下:

  1. wiz笔记 —— 好用,顺手。要开始收费了,不然就只能本地用用,无法同步。
  2. evernote —— 记下日记挺好用的,但是不能markdown,不好贴代码,作为一个程序员伤不起啊。何况免费版就两台设备同步,区区数十MB的流量,逼人出钱买会员啊。
  3. 有道云笔记 —— 流量巨大,服务稳定,小巧高性能。奈何除了写日记简直没法用。另外,新版本移除了导出到其他客户端的功能,于此同时数据库接口变化导致旧版本的完全没法使用了,不建议大家使用,不然哪天关闭了就真的gg了。
  4. 简书、墨迹等 —— 支持markdown,支持本地客户端及同步。但是这blog形式怎么看都不安全,一不小心把公司项目信息发布出去就不好玩了,怕。
  5. oneNote —— 太强大,太需要管理技巧。太*,写的漂亮需要设计头脑。太高端,同步不是很顺畅的感觉。怂了。。。
  6. leanote —— 看起来不错哦,各端都有,而且server端、web端、移动端、桌面端貌似都是open source。试用了一下体验不错哦,还要什么自行车。自己固化一套妥妥的。

 

  本着一套硬件上搭建各种服务的原则,依旧在群晖NAS上部署,希望能搭建好后固化为一个docker image,方便自己也方便他人之后一键部署。

  1. 初步规划是,nginx运行在一个单独的容器,leanote基于ubuntu运行在另一个容器。通过宿主机上的本地端口进行通信。
  2. 先要部署ubuntu。想到以后很大可能再基于ubuntu容器开发其他docker image,所以需要打造一个适合自己的ubuntu-dev版本image。
    1. 先拖下来ubuntu docker image:docker pull ubuntu14.04:latest 
    2. 启动容器,进去就是root帐号:docker run ubuntu /bin/bash
    3. 在中国,默认源太慢了,现在官方的cn源是基于阿里云的,速度很赞。直接 sed \'s/archive./cn.archive./g\' /etc/apt/source.list
    4. 更新源,apt-get update
    5. 安装vim,apt-get install vim
    6. 安装sshd,apt-get install openssh-server
    7. 更改sshd配置,取消UsePAM,Vim /etc/ssh/sshd_config
    8. 启动sshd,service ssh start
    9. 安装其他你常用的工具&配置
    10. 保存镜像,需要在容器运行的时候commit,docker commit container-id
    11. 使用 docker tag <image_id> <your_account>/<docker project name>:<tag or version> 来给新生成的image打tag
    12. 推送到docker.io上空间里,docker register docker.io && docker push image-id
    13. 我已经推送到了我的docker空间里,参考 
      $ docker push hengbo12345/ubuntu14.04-vim-ssh-zsh:tagname
  3. 然后在ubuntu容器中,安装leanote
    1. 主要是参考 官方说明 进行安装 
    2. commit并提交到docker仓库,我整理了一个image,仓库地址为hengbo12345/leanote-based-ubuntu:a57f780
    3. 需要注意的是,app.conf里面的secret配置一定要改!admin账户的密码、邮箱一定要改!新增账号权限一定要改!---否则被挂马被入侵内网数据全拖or加密勒索了我概不负责!!
    4. 对于自建服务,客户端也能很好的兼容。注意自建服务地址要写成如:http://192.168.2.2:9000
  4. 最后如果想设置反向代理,可以部署nginx容器,这个就好说了,直接nginx.conf中设置代理规则就好  

 

  这么一套,有笔记、有markdown、有blog,很爽啊!观察了下,性能也消耗不多。那么,接下来希望在公司也能用到家里这套环境的服务。

  这里碰到两个问题:

  1. 家里接入网用的联通光纤,路由器前面有个光猫充当了路由器拨号的角色,而且用户基本没法设置。
  2. 暴露docker中的服务到外网,并能稳定访问。

  首先解决第一个问题,主要是破解联通的光猫,移除其路由器功能,变更为桥接。

  1. 主要思想参考:Chinadsl 原创文章,如需工具请留言栏留邮箱,尽量一周内回复
  2. 具体操作可以借鉴:张大妈的文章 ,需要注意的是
    1. 一定要实现准备好7-zip或gzip工具,非rar。
    2. 使能之前,先拔光纤,拔无关网线,把操作用电脑所接网线接入Lan1口,然后重启光猫;
    3. 使能启动成功并不是LAN1 LAN2 E/G灯亮,而是全部灯都亮,然后需要重启猫再telnel;使能成功可能需要2分钟,一次不行就重启再试一次。
    4. 执行完restorehwmode.sh以后光猫会恢复出厂设置,然后此时猫的网关变成默认192.168.100.1 ,所以需要注意光猫重启后电脑的ip是否192.168.100.0/24 网段,访问http://192.168.100.1这个页面;
    5. tftp下来的配置,工具解密后是gz文件,解压出来才是xml;解压出来用文本编辑器修改后,建议diff下,千万不能有非自己修改的差异;确认改好了,要先用gzip/7-zip压缩成gzip格式,后缀为gz;然后再用加解密工具加密,得到修改后的hw_tree.xml。
    6. 恢复设置是,使用文章中提供的默认帐号密码登陆,把之前改好压缩然后加密的xml文件导入。注意输入账号密码的时候不要复制粘贴,否则很可能报错。
    7. 恢复之后,hwmode的账号密码同样也变了,变为修改为userLevel为0的那个user账号,密码同破解前user密码,除非你自己也一并修改了。  

 

 

  实际参考以上张大妈的文章后,已经把光猫配置为了桥接模式。So:

  1. 如何恢复非桥接模式?一定要记住设置桥接前,光猫的对lan ip为多少,一般为192.168.1.1。需要恢复路由模式时,可以把电脑配置为192.168.1.0/24网段,然后访问192.168.1.1即可。
  2. 如何恢复破解前状态?翻译下就是说如何恢复运营商定制模式~~抱歉,我没找到对应工具or方法,请各位高人赐教。
  3. 如何暴露出leanote服务?
    1. 由于光猫已经废除路由模式,需自己的路由器配置pppoe上网,这时候你的路由器在公网上已经能扫描到了;为安全起见,路由器密码一定要改复杂点,能关的功能尽量关!
    2. 路由器上配置dmz,或者端口转发,千万不要设置80端口,没备案的80端口都访问不了!;为安全起见,不建议配置dmz!
    3. 在路由器or服务器上配置ddns服务,比如test.yourDomain.com;
    4. 掏出你的手机,断开wifi,输入http://test.yourDomain.com:9000,应该能看到leanote的网页了。enjoy it!!    

 

 

 

  你以为这样就大功告成了?长者说过,too young, too naive!

  1. 尽量把/home/$USER/data/下面的mongodb数据放到 挂载到docker上的卷上,这样方便随时备份和撤离数据。
  2. 需要在admin的管理界面配置Data->Mongodb Tool Configuration中配置好相应路径
  3. 然后,从wkhtmltopdf官网下载并解压,在config->exportPDF中配置wkhtmltopdf的路径
  4. 接下里,需要解决wkhtmltopdf的依赖库问题和中文乱码问题
  5. 依赖库一般Ubuntu会缺失libfontconfig和libXrender-dev,直接apt-get install这两个就好。
  6. 中文乱码问题呢~~其实也很简单,搞点中文字体放到系统字体目录下即可(注意ttc后缀的需要改成ttf后缀,另外Linux区分大小写!!),我放了以下这些,基本搞定

     

  一切为了折腾!!安拉胡克啊吧!!!

  上https!

  目前看来,leanote要上https得用nginx反向代理,为了契合docker的理念,nginx用单独的吧。

  1. FOA,首先,official的nginx build上起,参考 https://hub.docker.com/_/nginx/
  2. 在docker.io页面里有详细的说明,个人建议conf就cp进去,html目录通过卷映射进去
    1. 实际上我的实现方式是,html目录映射到/usr/share/nginx/html,config目录映射到/etc/nginx/conf.d  
  3. 证书用https://letsencrypt.org/getting-started/ 这家的,免费CA
    1. 由于家里用的联通宽带,对外的80/443/8080都是不通的,没法直接通过letsencrypt的host验证,需要走dns验证方式,这里推荐 Neilpand的acme工具doc点我      
    2. 通过dns验证方式获取的证书有效期较短,到期最好acme.sh --renew -d mydomain.com -d mydomain1.com 重新刷新下。nginx的证书更新后,nginx需要重启才能生效。
    3. 最新版的acme已经支持了多个域名共用一个证书(不支持正则),按照LetsEncrypt的政策,最多一个证书能包含100个域名。