搭建自己私有的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点我
搭建自己私有的PKM系统,各家PKM大比拼。。附:构建自己熟悉的基础Docker,破解联通光猫的更多相关文章
- 使用gitlab, jenkins搭建CI(持续集成)系统(2) -- 配置webhook触发构建
1. 在gitlab上配置192.168.1.30的ssh秘钥,使jenkins可以操作gitlab上的project 进入gitlab,点击右上角 点击 Settings -> SSH key ...
- 如何构建一个PKM系统
原文链接 这篇文章是个人知识总结相关的第一篇文章,主要目的是为了阐述我们为什么需要一个 PKM 系统,并且简单对自己这几年亲身形成的PKM 系统进行总结. PKM 是什么? PKM 是 Persona ...
- linux下使用URLOS搭建nextcloud私有云盘系统
Nextcloud是一个免费专业的私有云存储网盘开源项目,可以让你简单快速地在个人/公司电脑.服务器甚至是树莓派等设备上架设一套属于自己或团队专属的云同步网盘,从而实现跨平台跨设备文件同步.共享.版本 ...
- 环境准备阶段--搭建oracle linux 6.5系统
环境准备阶段--搭建oracle linux 6.5系统 选择9.x版本兼容性 分配6GB内存 再次重启可以进入桌面,提示如下,勾选然后close 配置主机名,网络.hosts [root@ocp-1 ...
- 搭建一个microblaze的最小系统
搭建一个microblaze的最小系统 首先例化一个microblaze核 对microblaze核进行配置 勾选: 这个是使能外部存储BRAM作为程序运行缓冲区 第二个是需要勾选 这个是使能AXI数 ...
- 什么是高防服务器?如何搭建DDOS流量攻击防护系统
关于高防服务器的使用以及需求,从以往的联众棋牌到目前发展迅猛的手机APP棋牌,越来越多的游戏行业都在使用高防服务器系统,从2018年1月到11月,国内棋牌运营公司发展到了几百家. 棋牌的玩法模式从之前 ...
- 【手摸手,带你搭建前后端分离商城系统】01 搭建基本代码框架、生成一个基本API
[手摸手,带你搭建前后端分离商城系统]01 搭建基本代码框架.生成一个基本API 通过本教程的学习,将带你从零搭建一个商城系统. 当然,这个商城涵盖了很多流行的知识点和技术核心 我可以学习到什么? S ...
- 【手摸手,带你搭建前后端分离商城系统】02 VUE-CLI 脚手架生成基本项目,axios配置请求、解决跨域问题
[手摸手,带你搭建前后端分离商城系统]02 VUE-CLI 脚手架生成基本项目,axios配置请求.解决跨域问题. 回顾一下上一节我们学习到的内容.已经将一个 usm_admin 后台用户 表的基本增 ...
- 【手摸手,带你搭建前后端分离商城系统】03 整合Spring Security token 实现方案,完成主业务登录
[手摸手,带你搭建前后端分离商城系统]03 整合Spring Security token 实现方案,完成主业务登录 上节里面,我们已经将基本的前端 VUE + Element UI 整合到了一起.并 ...
随机推荐
- 根据判断PC浏览器类型和手机屏幕像素自动调用不同CSS的代码
1.媒体查询方法在 css 里面这样写 -------------------- @media screen and (min-width: 320px) and (max-width: 480px) ...
- Anaconda 安装 ml_metrics package
ml_metrics is the Python implementation of Metrics implementations a library of various supervised m ...
- HotSpot JVM常用参数设置
转自:https://www.zybuluo.com/jewes/note/57352 选项的分类 Hotspot JVM提供以下三大类选项: 1. 标准选项:这类选项的功能是很稳定的,在后续版本中也 ...
- 轮播插件unsilder 源码解析(一)---使用
啰嗦几句:学习的可以直接省略,一直本着写原生的插件想法,但是前天看了吕大豹的博客觉得自己都没有正经的写个jquery插件:所以在开始写之前我会先对几个比较热门的jquery的插件进行源码分析:至于为什 ...
- SPSS课程学习思路及流程
数据挖掘领域对行的分析
- Excel—SUMPRODUCT用法指南
1.最简单的SUMPRODUCT函数等同与SUM函数. 2.SUMPRODUCT可以设置多参数,其输出值为各参数对应值的乘积之和. E2=6*7+8*6+2*8+9*8+3*8+5*9 3.SUMPR ...
- [Machine Learning] Active Learning
1. 写在前面 在机器学习(Machine learning)领域,监督学习(Supervised learning).非监督学习(Unsupervised learning)以及半监督学习(Semi ...
- JavaScript对象详解
JavaScript中的数据类型作为javascript的核心,我们经常要用到,也是最基础的. javascript中有非常复杂的数据类型:包括对象(Object)数据类型,还有五个基本数据类型(N ...
- A()方法
A方法用于在内部实例化控制器,调用格式:A('[项目://][分组/]模块','控制器层名称')最简单的用法: $User = A('User'); 复制代码 表示实例化当前项目的UserActi ...
- 关于JQ toggle 的注意事项
1.9.1以后的版本,好像不支持 jq 的 toggle function的用法啦.