Synology HedgeDoc HackMD docker-compose docker markdown container

如何將 HackMD(HedgeDoc with PostgreSQL) 服務安裝到您的 Synology Docker,解決您的筆記到處公開困擾!

Rock Liu / 劉鎮豪 Rock Liu 2024/10/07 08:05:30
1447

如何將 HackMD(HedgeDoc with PostgreSQL) 服務安裝到您的 Synology Docker,解決您的筆記到處公開困擾!

 

HedgeDoc 是什麼?

HedgeDoc 是 CodiMD 的 Community Edition 社群版本分支,而 CodiMD 則是 HackMD 的 OpenSource 版本。也區分企業付費版 HackMD Enterprise Edition
在官方網站 HackMD History 您可以看到詳細的分支歷史。

需求與目標說明

使用 HackMD (Markdown) 在軟體開發領域中已經是相當常見的一個雲端筆記服務,提供給許多程式開發人員進行規格書的撰寫,團隊內的同仁同時便於互相分享、共同編輯等情境,但卻經常發生客戶的系統設計規格被不經意的公開在網路上,衍生資訊系統資料外洩或隱私與資安等問題。

因此,為了解決這個問題,HackMD 提供了企業版本方便公司內部做導入,將重要規格文件保留在企業資訊環境下不被隨意公開。

而本篇提供一個 HedgeDoc (即 HackMD Community Edition 社群版本) 的安裝模式,供個人使用和評估,說明 Synology NAS 如何以 docker-compose 安裝的過程。

 

目標架構圖

 

先安裝 PostgreSQL 步驟說明

1. 登入您的 Synology DSM 並進入套件中心

2. 在 NAS 上安裝 Container Manager 容器管理工具

3. 進入套件中心並搜尋 Container Manager,安裝它

4. 準備 Markdown 資料儲存空間

  1. 進入 File Station 新增 docker/hedgedoc 資料夾。
  2. 於 hedgedoc 資料夾下新增 appdata 及 postgresql 用於存放 Markdown 筆記內容與圖檔資料。

5. 開啟 putty 並以 ssh 方式登入 NAS 主機

6. 切換至 Docker 資料夾

cd Docker

7. 準備以下 docker-compose.yml 並放置到 NAS 於上述所建立的 Docker 資料夾位置

 
version: '3' # 使用 Docker Compose 3.0 格式

services:

  db:
    image: postgres:16-bullseye # 使用 postgresql 13 的版本
    container_name: HedgeDoc-DB # 容器名稱
    hostname: hedgedoc-db # 主機名稱
    security_opt:
      - no-new-privileges:false # 允許 postgresql 容器中執行的程式碼能夠創建新的權限
    environment:
      # - POSTGRES_USER=hedgedoc # postgresql 的使用者名稱
      - POSTGRES_USER=postgresuser # 設定 PostgreSQL 使用者名稱
      - POSTGRES_PASSWORD=hedgedocpass # postgresql 的使用者密碼
      - POSTGRES_DB=postgresdb # postgresql 的資料庫名稱
      # - POSTGRES_PORT=5437 # postgresql 的埠口
      - PGDATA= /var/lib/postgresql/data/pgdata # 設定 PostgreSQL 資料存儲路徑
    ports:
      - 5437:5432 # 將主機的 5437埠口映射到容器的 5432埠口
      # 左邊的 port 是主機上的埠口,右邊的 port 是容器上的埠口
    volumes:
      # 1. 將 postgresql 的資料夾掛載到主機的 /volume1/docker/hedgedoc/db
      - /volume1/docker/hedgedoc/postgresql:/var/lib/postgresql/data:rw # 將 postgresql 的資料夾掛載到主機的 /volume1/docker/hedgedoc/db
      # 左邊的路徑是主機上的資料夾,右邊的路徑是容器上的資料夾
    restart: on-failure:5 # 如果 postgresql 容器崩潰了,則重啟 5 次
  

8. 開始下載 docker image 並建立 PostgreSQL 資料庫容器

以 root 權限執行 sudo docker-compose up -d

  1. 執行完,可看到 image 已下載完成。

  2. 於容器頁面下,可看到資料庫已正常啟動。

  3. 以 pgAdmin 4v8 進行連線測試,確認資料庫可正常連線。

接著安裝 HedgeDoc 步驟說明

1. 準備以下 docker-compose.yml 並放置到 NAS 於上述所建立的 Docker 資料夾位置

version: '3' # 使用 Docker Compose 3.0 格式

services:

 
  hedgedoc:
    image: lscr.io/linuxserver/hedgedoc:latest # 使用最新的 HedgeDoc image
    container_name: HedgeDoc # 容器名稱
    # hostname: hedgedoc # 主機名稱
    # security_opt:
    #   - no-new-privileges:true # 禁止 HedgeDoc 容器中執行的程式碼能夠創建新的權限
    # healthcheck:
    #   test: wget --no-verbose --tries=1 --spider http://localhost:3000 || exit 1 # 每 5 秒檢查一次 HedgeDoc 的健康狀態
    # healthcheck:
    #   test: wget --no-verbose --tries=1 --spider http://localhost:3070 || exit 1
    environment:
      - PUID=1000 # 設定 HedgeDoc 的使用者 ID
      - PGID=1000 # 設定 HedgeDoc 的群組 ID
      - TZ=Etc/UTC # 設定時區為台灣
      - NODE_ENV=production # 設定 Node.js 的環境變數為生產模式
      #- CMD_DB_DIALECT=mariadb # 設定資料庫為 mariadb
      - CMD_DB_DIALECT=postgres # 設定資料庫為 postgresql
      - CMD_DB_HOST=HedgeDoc-DB # postgresql 的主機名稱,這邊要設定容器名稱,才能彼此使用同一個 NAS 主機提供的IP介面
      - CMD_DB_PORT=5437 # postgresql 的埠口
      - CMD_DB_USERNAME=postgresuser # postgresql 的使用者名稱
      - CMD_DB_PASSWORD=hedgedocpass # postgresql 的使用者密碼
      - CMD_DB_DATABASE=postgresdb # postgresql 的資料庫名稱
      - CMD_DB_URL=postgres://postgresuser:hedgedocpass@192.168.1.218:5437/postgresdb
      - CMD_SESSION_SECRET=OIOAbwzEunLf3lv2YOdFlLIuYcanfm78fy4jhr9feiU= # 設定 session 的 secret
      - CMD_DOMAIN=192.168.1.218 # HedgeDoc 的網域名稱,這邊如果指定 localhost 會造成圖片的來源往址變 http://localhost/圖片.svg,因此要設定成主機的 IP
      - CMD_HOST=0.0.0.0 # HedgeDoc 的網域名稱
      # - CMD_PORT=3070 # HedgeDoc 的埠口
      # - CMD_PORT=3000 # HedgeDoc 的埠口
      - CMD_PROTOCOL_USESSL=false  # 不使用 SSL
      - CMD_URL_ADDPORT=true # 不要在 URL 中添加埠口
      - CMD_ALLOW_ORIGIN=* # 設定允許的來源
    volumes:
      - /volume1/docker/hedgedoc/appdata:/config:rw # 將 HedgeDoc 的設定檔案掛載到主機的 /volume1/docker/hedgedoc/appdata
    ports:
      - 3000:3000 # 將主機的 3000埠口映射到容器的 3000埠口
    restart: unless-stopped # 如果 HedgeDoc 容器崩潰了,則不重啟

註:更進階的參數設定,請參考官方設定頁面

2. 開始下載 docker image 並建立 HedgeDoc 資料庫容器

  1. 以 root 權限執行 sudo docker-compose up -d
  2. 將 HedgeDoc 容器停止,可執行 sudo docker container stop HedgeDoc

3. 從 Container Manager 找到 HedgeDoc 容器,查詢容器 IP

4. 至防火牆將 HedgeDoc 容器 IP 設定為允許存取 PostgreSQL 的來源 IP

  1. 進入控制台。
  2. 於連線能力下找到安全性,點擊進入。
  3. 切換至防火牆頁籤。
  4. 點擊編輯規則。
  5. 新增 5437 Port,並允許 172.22.0.3 TCP 存取。

5. 啟動 HedgeDoc 容器

6. 進入網站,就可以開始註冊一個使用者來登入使用囉~

http://你的NAS主機位址或DNS:3000

Rock Liu