---
title: CodiMd 與 HedgeDoc 的愛恨情仇(誤)
date: 2021-01-26 21:09
is_modified: false
disqus: cynthiahackmd
categories:
- "資訊科技 › 開發與輔助工具"
tags:
- "Linux/Unix"
- "HackMD/CodiMD/HedgeDoc"
- "協同合作工具"
- "工具安裝與部署"
---
{%hackmd @CynthiaChuang/Github-Page-Theme %}
<br>
有天 PM 找了詢問關於 CodiMd 的新功能 **[Image Lightbox Support](https://hackmd.io/@codimd/release-notes/%2F%40codimd%2Fv2_2_0#Image-Lightbox-Support)**,並拜託我測試下這個功能。不過,當我用了上次的[安裝方法](https://hackmd.io/@CynthiaChuang/How-to-Setup-CodiMD)升級後,出現的卻是一個名為 **HedgeDoc** 頁面,著實嚇了我一跳。
<!--more-->
<p class="illustration">
<img src="https://i.imgur.com/sOg1sTf.png?1" alt="HedgeDoc">
HedgeDoc(圖片來源: <a href="https://demo.hedgedoc.org/">HedgeDoc Demo</a>)
</p>
## 變更歷史
認真回顧了下,它們兩個的[恩怨情仇](https://github.com/hackmdio/codimd/issues/1219)(!?),總結來說就是社群被原本開發團隊氣到(?),因此重新取名、換了 logo,並且使用 TypeScript 重新撰寫了 **HedgeDoc**。
還是一頭霧水?正常,它們歷經了好幾次的變更與命名,這真的會把人搞暈。
<p class="illustration">
<img src="https://i.imgur.com/uAhfGhq.jpg?1" alt="把人搞暈了">
把人搞暈了(圖片來源: <a href="https://www.pexels.com/zh-tw/photo/4458420/">Yan|Pexels</a>)
</p>
這得先從他們共同的起源—**HackMD** 說起,HackMD 是個主打即時文件協作(Real-time collaboration)的共享筆記工具,聽說它是由一份資訊安全的==學校作業==誕生的。嘖,大神就是大神,作業寫一寫,就推出了一個這麼棒的產品(來自魯蛇的忌妒 :upside_down_face:
後來 HackMD 逐漸成熟穩定後,遂推出了商業版本 **HackMD EE(Enterprise Edition,企業版)**;但同時,團隊也保持開源版本 **HackMD CE(Community Edition,社區版)**,不過後來為了避免兩個版本間的混淆,因此把 HackMD CE 改名成 CodiMD。
在這期間社群也基於此開源版本進行開發,但小尷尬的是社群版也是沿用了 CodiMD 這個名稱。所以一時間 Github 上存在兩個名為 CodiMD 的儲存庫—**[hackmdio/codimd](https://github.com/hackmdio/codimd)** 與 **[codimd/server](https://github.com/hedgedoc/hedgedoc)**,但說實話這對剛入門的人來說是非常難以理解的。
因此基於種種原因,社群版的 CodiMD 後來更名成為 HedgeDoc,並將 logo 換成一隻可愛小刺蝟。
<br>
總結來說:
<div class="blockquote-center">
HedgeDoc 是 CodiMD 的社群驅動分支,而後者是 HackMD 的開源版本。
</div>
<p class="illustration">
<img src="https://i.imgur.com/FqoEzbr.jpg" alt="HedgeDoc History">
HedgeDoc History(圖片來源: <a href="https://hedgedoc.org/history/">HedgeDoc 官網</a>)
</p>
## HedgeDoc
因為我之前所使用的 [Container](https://github.com/codimd/container) 是由社群所維護的,因此升級完後才會跑出那隻可愛的小刺蝟,出來的網站就像 [Demo 網站](https://demo.hedgedoc.org/)這樣。
HedgeDoc 的安裝步驟在之前的[《安裝踩雷筆記…》](/@CynthiaChuang/How-to-Setup-CodiMD)有介紹過,這邊就不再複述了。不過還是附上程式碼與 Container:
- Source code:[codimd/server](https://github.com/codimd/server)
- Container: [codimd/container](https://github.com/codimd/container)
<br>
對了,那刺蝟真的好可愛 :heart_eyes: ,害我對 HedgeDoc 愛不釋手...
<p class="illustration">
<img src="https://i.imgur.com/WDNpZ7v.png" alt="可愛的小刺蝟">
可愛的小刺蝟(圖片來源: <a href="https://pixabay.com/zh/photos/hedgehog-cute-animal-little-nature-1215140/">Pixabay</a>)
</p>
## CodiMd
不過,從那張歷史分支圖看來,兩邊的開發紀錄已經分開了。而 PM 所要求的功能的圖片放大縮小功能, 是 Hackmd 團隊底下所維護的 CodiMd 才有,所以還是得來看看怎安裝。
按照 CodiMd 官方的 [Docker Deployment](https://hackmd.io/c/codimd-documentation/%2Fs%2Fcodimd-docker-deployment) 的文件,我們一樣可以藉由 `docker-compose.yml` 部署,其中 `{{my_user}}` 與 `{{my_password}}` 換成自己的名字跟密碼:
```yaml=
version: "3"
services:
database:
image: postgres:11.6-alpine
environment:
- POSTGRES_USER={{my_user}}
- POSTGRES_PASSWORD={{my_password}}
- POSTGRES_DB={{database}}
volumes:
- "database-data:/var/lib/postgresql/data"
restart: always
codimd:
image: hackmdio/hackmd:2.3.2
environment:
- CMD_DB_URL=postgres://{{my_user}}:{{my_password}}@database/{{database}}
- CMD_USECDN=false
depends_on:
- database
ports:
- "3000:3000"
volumes:
- upload-data:/home/hackmd/app/public/uploads
restart: always
volumes:
database-data: {}
upload-data: {}
```
稍微研究了一下 HedgeDoc 的 [`docker-compose.yml`](https://github.com/hedgedoc/container/blob/master/docker-compose.yml)。我想兩者最主要的差別在於在於使用的 image 不同:
- [CodiMd](https://hub.docker.com/r/hackmdio/hackmd/tags/?page=1&ordering=last_updated)
- [HedgeDoc](https://quay.io/repository/hedgedoc/hedgedoc?tag=1.7.2&tab=tags)
<br>
啟動用的指令一樣是用:
```shell=
$ docker-compose up
```
不過超衰的的是,我又撞到 **could not find an available, non-overlapping IPv4 address** 的問題,按照[之前的經驗](/@CynthiaChuang/How-to-Setup-CodiMD#%E5%95%8F%E9%A1%8C2%EF%BC%9A-could-not-find-an-available-non-overlapping-IPv4-address),試著重起網路:
```shell=
$ sudo service network-manager restart
```
打完收工!理論上 DB 跟 Volume 也要處理,但 PM 只是要先嘗試新功能,所以也就不著急配置,先丟給 PM 玩玩,有需要再來處理吧。
## 參考資料
1. [CodiMD - release-notes](https://hackmd.io/@codimd/release-notes/) 。檢自 HackMD (2021-01-18)。
2. Maxine Maz (2019-05-09)。[為工程師文件而生的協作平台:HackMD 開發故事](https://medium.com/starrocket/hackmd-product-story-1e332f83d343) 。檢自 Star Rocket|Medium (2021-01-18)。
3. Daisy Tsai (2019-11-25)。[HackMD 技術長:從寫程式進化到做產品 你需要換一種思考方式!](https://tw.alphacamp.co/blog/hackmd-cto-ama-sharing) 。檢自 ALPHA Camp Blog (2021-01-18)。
4. HedgeDoc developers。[HedgeDoc History](https://demo.hedgedoc.org/)。檢自 HedgeDoc - Markdown 協作筆記 (2021-01-18)。
## 更新紀錄
:::spoiler 最後更新日期:2021-01-26
- 2021-01-26 發布
- 2021-01-26 完稿
- 2021-01-18 起稿
:::
<br><br>
> **本文作者**: 辛西亞.Cynthia
> **本文連結**: [辛西亞的技能樹](https://cynthiachuang.github.io/HedgeDoc-a-New-Fork-of-CodiMD/) / [hackmd 版本](https://hackmd.io/@CynthiaChuang/HedgeDoc-a-New-Fork-of-CodiMD)
> **版權聲明**: 部落格中所有文章,均採用 [姓名標示-非商業性-相同方式分享 4.0 國際](https://creativecommons.org/licenses/by-nc-sa/4.0/deed.en) (CC BY-NC-SA 4.0) 許可協議。轉載請標明作者、連結與出處!