Synology
HedgeDoc
HackMD
docker-compose
docker
markdown
container
如何將 HackMD(HedgeDoc with PostgreSQL) 服務安裝到您的 Synology Docker,解決您的筆記到處公開困擾!
2024/10/07 08:05:30
3
1514
如何將 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 資料儲存空間
- 進入 File Station 新增 docker/hedgedoc 資料夾。
- 於 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
- 執行完,可看到 image 已下載完成。
- 於容器頁面下,可看到資料庫已正常啟動。
- 以 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 資料庫容器
- 以 root 權限執行
sudo docker-compose up -d
- 將 HedgeDoc 容器停止,可執行
sudo docker container stop HedgeDoc
3. 從 Container Manager 找到 HedgeDoc 容器,查詢容器 IP
4. 至防火牆將 HedgeDoc 容器 IP 設定為允許存取 PostgreSQL 的來源 IP
- 進入控制台。
- 於連線能力下找到安全性,點擊進入。
- 切換至防火牆頁籤。
- 點擊編輯規則。
- 新增 5437 Port,並允許 172.22.0.3 TCP 存取。