在使用新私有化部署的书签导航应用一个月之后,我们来聊聊书签导航工具,以及介绍如何使用 Docker 在几分钟之内部署属于你自己的书签导航应用。

写在前面

我目前使用的书签导航工具的界面是这样的(马赛克掉了一部分链接内容):

作为一个使用了十多年 Chrome 的用户,Chrome 书签管理器一直是我的主要的书签管理工具。在漫长的岁月里,我的 Chrome 书签管理器中,最多的时候存放了上千个书签链接。

但是 Chrome 的书签栏面积十分有限,随着折腾的东西越来越多,导致导航栏基本放不了多少东西,许多书签常常需要在书签二级目录甚至三级目录中查找,非常麻烦。当然,Chrome 地址栏和搜索栏二合一之后,浏览器支持从这个全能文本框中搜索某个书签以及历史搜索结果,但是在缺少提示的情况下,也时常出现 “茫茫人海,不知从何搜起”的状况,或者出现搜索结果中的书签会混杂在一堆历史浏览记录中的状况。

几个月前,我开始进行个人 PKM 重建。在过程中,我期待有更好的方式来使用书签,让我能够更多的使用“一次点击”来解决问题,减少大量翻箱倒柜式的“翻找”和“搜索”动作;同时,我也希望这些书签内容,可以在不同的浏览器和设备中共享,而不是仅限在 Chrome、Safari 或某个特定的产品中使用、甚至仅限在桌面浏览器环境中使用;我希望尽可能不使用在线的云服务,因为在过去的十年中,非常多的以云收藏夹为主营业务的公司都折戟在了互联网长河中;最后,我希望这些数据是能够使用比较友好的格式被妥善的存储,在未来某个时刻能够很方便的迁移到更先进的工具中。

基于上面的种种考虑,我在一众开源软件中找到了 Flame,在使用了一段时间后,我觉得 Flame 中的一些设计对于我而言比较多余,以及软件本身的性能效率并不是特别好,尤其是针对我这种拥有非常多书签的用户而言。所以,在借鉴 Flame 原有功能的基础上,我写了一套新的工具 Flare。关于 Flare 的制作和性能调优,感兴趣的同学可以围观之前的文章《Flare 制作记录:应用前后端性能优化》。

虽然我制作了“改良版” Flare,但是 Flame 对于多数人而言,依旧是一款不错的软件。所以,接下来我会分别聊聊两款软件在容器下的使用,供我的读者按需选择。​

在容器中使用 Flame

相比较其他的要么功能纷繁复杂,要么界面陈旧落后的开源软件,功能相对简单,界面颜值也非常高的 Flame 很快进入我的视野。

在花费了一番功夫之后,我将 flame 封装成了 Docker 镜像,Flame 的镜像尺寸 50MB 多一点点。

它的使用方式很简单,将下面的内容保存为 docker-compose.yml

version: '3.6'services:flame:image: soulteary/flame:2.2.0container_name: flamevolumes:- ./data:/app/data# 如果需要 Docker 集成,可选择开启# - /var/run/docker.sock:/var/run/docker.sockports:- 5005:5005# 如果想使用 Docker Secrets,可选择开启# secrets:#   - password # optional but required for (1)environment:- NODE_ENV=production# 默认管理密码- PASSWORD=flame_password# 如果想使用 Docker Secrets,可选择开启# - PASSWORD_FILE=/run/secrets/password # optional but required for (1)restart: always# 如果想使用 Docker Secrets,可选择开启
# secrets:
#   password:
#     file: /path/to/secrets/password

然后使用 docker-compose up -d 启动应用,接着访问浏览器中的 http://localhost:5005 就能看到软件的默认界面啦。

关于如何进行个性化调整,以及书签的添加等,同样非常简单,聪明的你可以自行探索,为了不“剧透”,这里就不过多赘述啦。

这个项目地址在这里:https://github.com/soulteary/docker-flame,其中的一些改动已经被合并到了 flame 官方仓库。

接下来聊聊为什么我要制作 Flare、以及 Flare 如何在容器环境下使用。

为什么要制作 Flare

随着深入使用 Flame,我发现了一些体验上的小问题:比如软件不支持搜索中文内容;比如软件获取天气数据需要使用经纬度(以及需要注册获取天气平台 API)非常麻烦;软件后台存在一些浪费性能的问题;软件前端的实现方式,在大量书签的场景下,性能表现比较糟糕,会出现卡顿;软件虽然功能简单,但是整体性能不够好,我希望用更少的资源运行这个服务。

而 Flame 原本的功能设计,对于我个人使用的场景而言,也显得稍微有一些多余:

  • 我不太需要软件本身的 Docker、K8S 集成功能,这两个功能的初衷是从 Docker Label、K8S Ingress 注解中提取链接信息,进行动态的链接添加和删除,但是我比较抵触 All In One,所以我的设备和服务多是分布式部署的,并且长期运行的服务非常固定,变动比较少;
  • 随着整理了越来越多的书签后,我发现我对于书签的写入频率其实不高,原本的书签编辑器的体验也不是很好,我希望有更好的方式来进行替换;
  • 以及作为私人使用的书签导航,我似乎也不需要用户功能;
  • Flame 使用 SQLite 进行数据存储,虽然比使用 PG、MySQL 要轻不少,但是在数据变化不大的场景下,或许结构化的明文保存会简单,也更利于未来的数据迁移。

在明确了上面的问题,以及我到底想要什么之后,我制作了 Flare,一个轻量的、适合私有化部署,个人使用的导航工具

相比较 Flame 在裁剪功能后封装的容器镜像需要 50MB 的大小,Flare 只需要不到 10MB 的空间,以及远低于 Flame 的运行资源(通常情况下远小于 1% 的CPU占用、30M以内的内存)。

在这个基础上,Flare 除了可以运行在传统的 x86 主机上,比如你的笔记本、你的NAS、云服务器上,还可以运行在各种 ARM 设备上,甚至是很早之前分享过的成本不到 50 元的玩客云上。(感兴趣的同学可以阅读《玩客云折腾记录(一):编译 ArmBian 系统》)

我们可以使用文本文件的方式来针对链接数据的管理,尤其是在链接数据非常少的情况下,简单的文本文件,配合任意你喜爱的编辑器,编辑体验远胜于各种简单引入的 Web IDE 或简陋的应用提交表单。而这些文件,也更容易保存、备份,以及在未来合适的时候,导入到更好的工具中。

在容器中使用 Flare

Flare 的使用同样也非常简单,你可以使用 docker 的一句话命令,快速启动一个 flare 应用:

docker run --rm -it -p 5005:5005 -v `pwd`/app:/app soulteary/flare:0.2.3

或者将下面的内容保存为 docker-compose.yml

version: '3.6'services:flame:image: soulteary/flare:0.2.3restart: alwayscommand: flareports:- 5005:5005volumes:- ./app:/app

然后使用 docker-compose up -d 来启动应用。

当应用启动完毕之后,还是访问相同的浏览器地址,你将看到类似下面的界面:

应用会在启动目录的 app 文件夹中生成默认的示例数据,方便你参考修改,数据文件格式为 yaml,如果你不熟悉也没关系,参考文件内的内容格式进行调整,保证缩进一致即可。

当你编辑完 app/bookmarkd.ymlapp/apps.yml 两个文件后,刷新浏览器,你的修改就生效了,不必进行应用重启。

其他

Flare 目前还处于比较早期的阶段,不过对于个人使用而言,或许已经足够了,和 Flame 一样漂亮的界面,更高效的资源使用,没有迁移负担的数据格式。

接下来,我会在慢慢更新这个小工具,在保证数据兼容、性能高效的前提下,慢慢将它的用户体验持续提升,如果你对这个项目感兴趣,或者在使用过程中遇到了问题,可以关注或者在这里反馈:https://github.com/soulteary/docker-flare。

至于书签内容的离线管理,我将在后续文章中介绍另外一个工具,先按下不表。

最后

写到这里,两款书签导航软件的使用就介绍完啦。

浏览器书签是众多知识管理方式的其中一种,它和电子书库、电子笔记、桌面文件、云端文档等其他形式的工具一起构建了我们的知识体系。

接下来的文章里,我会逐步分享我在过程中的一些经验。希望能帮助到有同样需求的你。

–EOF


我们有一个小小的折腾群,里面聚集了一些喜欢折腾的小伙伴。

在不发广告的情况下,我们在里面会一起聊聊软硬件、HomeLab、编程上的一些问题,大家也会在群里不时讨论一些技术问题。

喜欢折腾的小伙伴欢迎扫码添加好友。(请注明来源和目的,备注实名,否则不会通过审核)

关于折腾群入群的那些事


如果你觉得内容还算实用,欢迎点赞分享给你的朋友,在此谢过。

如果你想更快的看到后续内容的更新,请戳 “点赞”、“分享”、“喜欢” ,这些免费的鼓励将会影响后续有关内容的更新速度。


本文使用「署名 4.0 国际 (CC BY 4.0)」许可协议,欢迎转载、或重新修改使用,但需要注明来源。 署名 4.0 国际 (CC BY 4.0)

本文作者: 苏洋

创建时间: 2022年02月08日
统计字数: 4426字
阅读时间: 9分钟阅读
本文链接: https://soulteary.com/2022/02/08/building-bookmark-navigation-for-homelab-with-docker.html

使用 Docker 搭建适用于 HomeLab 的书签导航相关推荐

  1. 使用docker搭建Hadoop

    Hadoop简介 1.Hadoop的整体框架 Hadoop由HDFS.MapReduce.HBase.Hive和ZooKeeper等成员组成,其中最基础最重要元素为底层用于存储集群中所有存储节点文件的 ...

  2. 【译文】用Spring Cloud和Docker搭建微服务平台

    by Kenny Bastani Sunday, July 12, 2015 转自:http://www.kennybastani.com/2015/07/spring-cloud-docker-mi ...

  3. 树莓派4b学习笔记三--基于Ubuntu搭建Docker 和portainer,基于Docker 搭建Homeassistant、EMQX

    文章目录 一.基于Ubuntu搭建Docker和portainer 1.Docker简介 2.Ubuntu20.04安装Docker-ce 3.Ubuntu20.04安装Docker图形化界面port ...

  4. WindowsServer2019下使用Docker搭建内网GitLab

    文章目录 导读 需求文档说,要有域名. 第一次尝试 第二次尝试 第三次尝试 DNS配置 一定要优先设置域! 哪怕你是管理员也不准改的文件! 绑定域名 测试访问 配置DNS Windows所有版本通用的 ...

  5. docker 搭建本地 coredns 服务器

    coredns简介 CoreDNS是一款灵活可扩展的 DNS 服务器,并且基于插件架构,具有强大的模块化能力.其快速,简单,可扩展等特性也非常受人欢迎. CoreDNS 最初是一个单独的项目,由Mie ...

  6. 用Spring Cloud和Docker搭建微服务平台

    This blog series will introduce you to some of the foundational concepts of building a microservice- ...

  7. docker搭建grafana+loki+promtail日志收集系统

    文章目录 docker搭建grafana+loki+promtail日志收集系统 1.拉取镜像 2.loki搭建 1)新建配置文件 2)启动容器 3.promtail搭建 1)新建配置文件 2)启动容 ...

  8. Linux+MCSM9+Docker 搭建我的世界mohist1.18.2版服务器,MC开服教程

    Debian系统使用MCSManager9面板和Docker容器搭建Minecraft Java版私服的教程,本教程用的mohist1.18.2服务端,用其他服务端的也可以参考一下. mohist支持 ...

  9. Docker搭建企业邮箱,poste.io教程

    poste.io介绍 首先要知道,搭建企业邮箱即可拥有自己的域名后缀邮箱,自定义邮件地址,什么admin,root,info都是随便用的.Poste.io官网:https://poste.io/ 文档 ...

最新文章

  1. hung-yi lee_p12_深度学习简介
  2. 面试官:你能说说事务的几个特性是啥?有哪几种隔离级别?
  3. 蛋白质导论: 结构,功能和运动,第二版 Introduction to Proteins : Structure, Function, and Motion, Second Edition
  4. 7-5 编程题:选修课成绩统计问题-hebust (12 分)
  5. Myeclipse连接Mysql数据库时报错:Error while performing database login with the pro driver:unable...
  6. 【每日scrum】NO.5
  7. 基于强跟踪卡尔曼滤波的隔振系统故障诊断——matab simulink仿真
  8. android之uniapp弹出activity
  9. Mac新手必装App推荐
  10. 惯性导航系统--百科笔记
  11. Windows配置maven环境变量
  12. 对视频马赛克的调研学习报告
  13. 【Qt】解决 “由于找不到Qt5Cored.dll,无法继续执行代码”(亲测有效)
  14. 水哥王昱珩的教育语录:输不丢人,怕输才丢人
  15. 使用 COLOR THIEF 获取图片主色,实现图片渐变遮罩,颜色填充等
  16. unity 2d贴图
  17. 2016年软件产业规模
  18. JAVA卸载报错无法访问网络位置
  19. 《武道神尊》12.29上线链游玩家|放置挂机、轻松修真
  20. Text to image论文精读PDF-GAN:文本生成图像新度量指标SSD Semantic Similarity Distance

热门文章

  1. 标签右浮动顺序倒转问题
  2. 2.2-tensorflow2-基础教程-加载和预处理数据
  3. win10 软件总结
  4. 多丽体质特膳,专为特殊人群精制的配方食物
  5. python 网页中插入自己的图片
  6. census变换verilog实现
  7. Revit软件用幕墙工具创建百叶窗及CAD门窗生成方法
  8. java panel paint_在paintbrush类型的GUI中,java – paintComponent()和paint()和JPanel对Canvas
  9. pandas 语法讲解
  10. 独家:小程序再添新能力,QQ空间5.62亿月活用户福利来袭