Etherpad:修訂版本之間的差異
出自福留子孫
(→附錄、DS218上共筆頁列表) |
(→一、安裝) |
||
(未顯示3位用戶所作出之83次版本) | |||
第 1 行: | 第 1 行: | ||
− | [[分類: | + | [[分類:Etherpad]] |
===一、安裝=== | ===一、安裝=== | ||
前置準備: | 前置準備: | ||
第 5 行: | 第 5 行: | ||
# root 權限 | # root 權限 | ||
安裝步驟 | 安裝步驟 | ||
+ | #先在 DS720+ 安裝 git server ,使得可以使用 git clone … 指令。 | ||
#進 OS 取得 root 權限 | #進 OS 取得 root 權限 | ||
#cd 到 web 服務的根目錄 | #cd 到 web 服務的根目錄 | ||
− | #git clone https | + | #git clone https://github.com/ether/etherpad-lite.git 安裝資料夾<br/>省略安裝資料夾則會安裝到 etherpad-lite 資料夾<br/>(士賢:從etherpad官網下載,再解壓縮再將資料夾上傳到伺服器)<br/>會建立安裝資料夾 |
#chown -R adminNas:administrators ./etherpad-lite | #chown -R adminNas:administrators ./etherpad-lite | ||
+ | #檢查 etherpad-lite 路徑是否沒有任何可操作之權限,若是:chmod -R 777 ./etherpad-lite | ||
#回復到 adminNas 的帳號身份 | #回復到 adminNas 的帳號身份 | ||
#cd etherpad-lite | #cd etherpad-lite | ||
− | #bin/run.sh | + | #bin/run.sh<br/>(士賢:src/bin/run.sh) |
納入排程: | 納入排程: | ||
#去「DSM/控制台/任務排程表/新增」 | #去「DSM/控制台/任務排程表/新增」 | ||
第 22 行: | 第 24 行: | ||
#bin/run.sh --root | #bin/run.sh --root | ||
#export NODE_ENV=production | #export NODE_ENV=production | ||
+ | |||
+ | ====debug==== | ||
+ | 若是安裝啟動後,首頁及頁面CSS顯示出問題(跟預設不同) | ||
+ | *可以更改setting.json的下面這行(大約在295行),將true改成false | ||
+ | *:: "minify": true, ----->> "minify": false, | ||
+ | *(如果為 true,則所有 css 和 js 在傳送到客戶端之前都會被縮小。) | ||
===二、使用=== | ===二、使用=== | ||
− | #http:// | + | #http://網址:9001 |
− | #http:// | + | #http://網址:9001/p/頁名 // 進入某頁 |
− | #http:// | + | #http://網址:9001/admin // 安裝 Plugin 或編輯設定檔<br/>設定要可更改,須先「chmod 777 setting.json」 |
+ | #*重新啟動:http://網址:9001/admin/settings 中有「存設定」與「重啟 Etherpad」的按鈕 | ||
+ | #*#「存設定」按了也不會存入新的設定 | ||
+ | #*#「重啟 Etherpad」按鈕按了可以關停 Etherpad ,但不會重新啟動。 | ||
+ | #*管理外掛:http://網址:9001/admin/plugins | ||
+ | #*運行資訊:http://網址:9001/admin/plugins/info | ||
+ | #重新啟動 Etherpad : | ||
+ | #*先利用「http://網址:9001/admin/settings」的「重啟 Etherpad」按鈕,會關停 Etherpad ,但重啟會失敗。 | ||
+ | #*再執行「DSM / 控制台 / 任務排程表 / run2.sh」使新設定生效。 | ||
====刪除一篇便箋(pad)==== | ====刪除一篇便箋(pad)==== | ||
http://網址:9001/api/1/deletePad?padID=便箋名&apikey=.......<br/>apikey 去 APIKEY.txt 中查閱 | http://網址:9001/api/1/deletePad?padID=便箋名&apikey=.......<br/>apikey 去 APIKEY.txt 中查閱 | ||
− | === | + | ===三、有用外掛=== |
+ | ====(一)插入圖照==== | ||
+ | :名稱:previewimages | ||
+ | :用法:直接在便箋文中插入圖照連結,會自動調大小顯示圖照。 | ||
+ | :補充: | ||
+ | :#使用維基共享資源圖照時,可利用各種尺寸的縮圖 | ||
+ | :#同一行可以插入兩個圖照連結 | ||
+ | ====(二)插入影片==== | ||
+ | :名稱:embedmedia | ||
+ | :用法:安裝完會在工具列出現「Embed Media」圖示,按此圖示,輸入影片連結,可嵌入影片。 | ||
+ | ====(三)設定字的大小==== | ||
+ | :名稱:font_size | ||
+ | :用法:安裝完會在工具列出現「字級尺寸」圖示,是下拉選單。先選定字串,再設定字級。 | ||
+ | ====(四)列出所有的 pad(便箋)==== | ||
+ | :名稱:padlist2 | ||
+ | :用法:網址列輸入「http://網址:9001/list 」,會列出所有便箋,並可以蒐尋字串找出「便箋名」含蒐尋字串的便箋。 | ||
+ | |||
+ | ====(五)可以 wiki 格式匯出單一 pad(便箋)的內容==== | ||
+ | :名稱:mediawiki | ||
+ | :用法:安裝完會在匯出功能中,多一個 MediaWiki。 | ||
+ | :補充:多層文字的完整度不如預設的 Plain text ,多媒體完整度要靠預設的 Etherpad 格式(json 語法) | ||
+ | :#多層列表只會表現出單層 | ||
+ | :#換行不會產生空白行 | ||
+ | :#沒有段落功能(等號) | ||
+ | :#影片與圖照都轉成單層中括號 | ||
+ | :#加粗轉為三個單引號 | ||
+ | |||
+ | ===四、進階設定=== | ||
編輯 settings.json | 編輯 settings.json | ||
====(一)使用 MySQL 在資料==== | ====(一)使用 MySQL 在資料==== | ||
第 50 行: | 第 93 行: | ||
},</pre> | },</pre> | ||
− | ====(二) | + | 在重新開etherpad前,請先去設定的MySQL資料庫(例如使用 adminer),在資料表已有其他字集內容之前,將資料表的校對字集設定(Collation)與上面"charset"相符,否則 etherpad 會無法開啟。 |
− | #"requireAuthentication" : true, | + | |
+ | ====(二)須登入才能使用 Etherpad==== | ||
+ | #"requireAuthentication": true, | ||
+ | #"requireAuthorization": false, | ||
#"users":{} // 諸帳號 | #"users":{} // 諸帳號 | ||
第 79 行: | 第 125 行: | ||
*由 src/static/css/pad/icons.css 中查到上述各類別的字形編碼 | *由 src/static/css/pad/icons.css 中查到上述各類別的字形編碼 | ||
*由 src/static/font/fontawesome-etherpad.svg 中的各 glyph 標籤 unicode 屬性,查出其向量繪圖資料 | *由 src/static/font/fontawesome-etherpad.svg 中的各 glyph 標籤 unicode 屬性,查出其向量繪圖資料 | ||
+ | ===四、檔案列表=== | ||
+ | <pre>ep_<plugin>/ | ||
+ | ├ .github/ | ||
+ | │ └ workflows/ | ||
+ | │ └ npmpublish.yml ◄─ GitHub workflow to auto-publish on push | ||
+ | ├ static/ | ||
+ | │ ├ css/ ◄─ static .css files | ||
+ | │ ├ images/ ◄─ static image files | ||
+ | │ ├ js/ | ||
+ | │ │ └ index.js ◄─ static client-side code | ||
+ | │ └ tests/ | ||
+ | │ ├ backend/ | ||
+ | │ │ └ specs/ ◄─ backend (server) tests | ||
+ | │ └ frontend/ | ||
+ | │ └ specs/ ◄─ frontend (client) tests | ||
+ | ├ templates/ ◄─ EJS templates (.html, .js, .css, etc.) | ||
+ | ├ locales/ | ||
+ | │ ├ en.json ◄─ English (US) strings | ||
+ | │ └ qqq.json ◄─ optional hints for translators | ||
+ | ├ .travis.yml ◄─ Travis CI config | ||
+ | ├ LICENSE | ||
+ | ├ README.md | ||
+ | ├ ep.json ◄─ Etherpad plugin definition | ||
+ | ├ index.js ◄─ server-side code | ||
+ | ├ package.json | ||
+ | └ package-lock.json | ||
+ | </pre> | ||
− | === | + | ===五、啟動解說=== |
+ | <pre>#!/bin/sh | ||
+ | MY_DIR=$(cd "${0%/*}" && pwd -P) || exit 1 | ||
+ | cd "${MY_DIR}/../.." || exit 1 | ||
+ | . src/bin/functions.sh | ||
+ | exec node $(compute_node_args) src/node/server.js "$@"</pre> | ||
+ | |||
+ | 這是一個 shell 腳本,它使用 Node.js 執行一個 JavaScript 文件。讓我們逐行解析: | ||
+ | |||
+ | # #!/bin/sh (如何執行)<br>這是一個 shebang 行,它告訴系統用哪個解釋器來執行腳本。在這個例子中,它指定用 /bin/sh,即 Bourne shell 或其相容的 shell。 | ||
+ | # MY_DIR=$(cd "${0%/*}" && pwd -P) || exit 1 (執行路徑設定)<br> 這行命令首先通過 ${0%/*} 獲取腳本所在的目錄,$0 表示腳本本身的路徑,${0%/*} 則是去掉文件名,只保留目錄路徑。<br> 然後使用 cd 切換到該目錄,並使用 pwd -P 獲取實際的絕對路徑,將其賦值給變量 MY_DIR。<br>如果操作失敗,則使用 exit 1 終止腳本執行並返回錯誤碼 1。 | ||
+ | # cd "${MY_DIR}/../.." || exit 1 (切換執行路徑)<br> 切換到 MY_DIR 變量所指向的目錄的上兩級目錄。<br>如果操作失敗,則使用 exit 1 終止腳本執行並返回錯誤碼 1。 | ||
+ | # . src/bin/functions.sh (常數參數設定)<br>使用點命令(.)來源(source)src/bin/functions.sh 文件。<br>這將執行該文件中的所有命令,並將其中定義的函數和變量導入當前腳本的環境。<br>可以使腳本中的函數(如 compute_node_args)在當前腳本中可用。 | ||
+ | # exec node $(compute_node_args) src/node/server.js "$@" (執行伺服器)<br>這行命令與之前解釋的命令相同。<br>它在當前 shell 進程中使用 Node.js 執行 src/node/server.j 文件,並將 compute_node_args 腳本的輸出作為額外的命令行參數,再把所有其他傳遞給當前腳本的參數傳遞給 server.js 文件。 | ||
+ | *<mwdetails><summary>第五行程式碼更詳細解說</summary>這條命令是在 Bash 環境下運行的,用於使用 Node.js 執行一個 JavaScript 文件。讓我們逐步解析這條命令: | ||
+ | *#exec<br>exec 是一個 shell 內建命令,它用於在當前進程中執行指定的命令,而不是創建一個新的進程。<br>這意味著當你使用 exec 執行一個命令時,該命令會替換當前 shell 進程,而不是在新的子進程中運行。當命令執行完畢後,進程將終止,而不是返回到原始的 shell 進程。 | ||
+ | *#node<br>node 是 Node.js 的命令行工具,用於執行 JavaScript 文件。<br>Node.js 是一個用於開發伺服器端應用程式的 JavaScript 運行環境。 | ||
+ | *#$(compute_node_args)<br>這是一個命令替換(command substitution)表達式。<br>它將會執行 compute_node_args 腳本(假設它是一個可執行腳本),並將其輸出插入到當前位置。<br>這個腳本可能會計算並生成一些 Node.js 需要的參數,例如指定的 Node.js 版本、記憶體限制等。 | ||
+ | *#src/node/server.js<br>這是要執行的 JavaScript 文件的路徑。<br>在這個例子中,這是一個 Node.js 伺服器應用程式的入口點。 | ||
+ | *#"$@"<br>這是一個特殊的 shell 參數,代表所有傳遞給當前腳本或函數的參數。<br>在這裡,它將會把所有參數傳遞給 server.js 文件。<br>綜上所述,這條命令的功能是在當前 shell 進程中使用 Node.js 執行 src/node/server.js 文件,並將 compute_node_args 腳本的輸出作為額外的命令行參數,再把所有其他傳遞給當前腳本的參數傳遞給 server.js 文件。 | ||
+ | </mwdetails> | ||
+ | 總結一下,這個腳本的目的是確保在正確的目錄下執行 Node.js 伺服器應用程式,並在需要時使用額外的命令行參數。在執行過程中,它還導入了一些函數和變量,可能對腳本的後續操作有用。 | ||
+ | |||
+ | ===六、參考外掛=== | ||
+ | [https://static.etherpad.org/index.html 外掛列表]: | ||
+ | #[https://www.npmjs.com/package/ep_embedmedia ep_embedmedia]:嵌入媒體 (youtube、vimeo 等)。 | ||
+ | #[https://www.npmjs.com/package/ep_image_insert ep_image_insert]:可插入圖像並調整圖像大小的功能。 | ||
+ | #[https://www.npmjs.com/package/ep_webrtc ep_webrtc]:WebRTC的音頻/視頻聊天的功能。 | ||
+ | #[https://www.npmjs.com/package/ep_mathjax ep_mathjax]:支持 LaTeX STylee 數學公式。 | ||
+ | #[https://www.npmjs.com/package/ep_mediawiki ep_mediawiki]:在 Etherpad 中編輯並導出為 mediawiki | ||
+ | #[https://www.npmjs.com/package/ep_real_time_chat ep_real_time_chat]:即時聊天更新。 | ||
+ | #[https://www.npmjs.com/package/ep_inline_voting?activeTab=readme ep_inline_voting]:添加選項以對部分文本進行投票 | ||
+ | #[https://www.npmjs.com/package/ep_catalog_plugin ep_catalog_plugin]:etherpad目錄插件 | ||
+ | #[https://www.npmjs.com/package/ep_align ep_align]:用於設置段落的左對齊、居中對齊、右對齊或完全對齊的功能。 | ||
+ | #[https://www.npmjs.com/package/ep_markdown ep_markdown]:可應用 Markdown 編輯和導出。 | ||
+ | #[https://www.npmjs.com/package/ep_font_size ep_font_size]:可改變文字大小的功能。 | ||
+ | #[https://www.npmjs.com/package/ep_font_color ep_font_color]:可改變文字顏色的功能。 | ||
+ | #[https://www.npmjs.com/package/ep_print_preview_pdf ep_print_preview_pdf]:列印及預覽 PDF | ||
+ | #[https://www.npmjs.com/package/ep_print ep_print]:列印功能。 | ||
+ | #[https://www.npmjs.com/package/ep_desktop_notifications ep_desktop_notifications]:接收聊天桌面通知。 | ||
+ | #[https://www.npmjs.com/package/ep_themes ep_themes]:改變 theme 的不同部分的主題、樣式和顏色。 | ||
+ | #[https://www.npmjs.com/package/ep_guest ep_guest]:限制未登錄的使用者有限的訪問許可。 | ||
+ | #[https://www.npmjs.com/package/ep_openid_connect ep_openid_connect]:限制特定的登錄者帳號密碼 | ||
+ | #[https://www.npmjs.com/package/ep_table_of_contents ep_table_of_contents]:表格相關] | ||
+ | #[https://www.npmjs.com/package/ep_private_pad ep_private_pad]: 用戶註冊和登錄以管理私人pad (安裝會導致 EtherPad 無法開啟) | ||
+ | #[https://www.npmjs.com/package/ep_tableau ep_tableau]: 出現表格選單,可以新增表格、刪除表格 | ||
+ | |||
+ | ===七、參考文件=== | ||
#https://benson82208.pixnet.net/blog/post/44426446-線上多人共同編輯-etherpad-安裝 | #https://benson82208.pixnet.net/blog/post/44426446-線上多人共同編輯-etherpad-安裝 | ||
#https://docs.gandi.net/zh-hant/cloud/tutorials/etherpad_lite.html | #https://docs.gandi.net/zh-hant/cloud/tutorials/etherpad_lite.html | ||
第 90 行: | 第 210 行: | ||
SQL 指令:SELECT `key` FROM store WHERE `key` LIKE 'pad:%' AND `key` NOT LIKE '%:revs:%' AND `key` NOT LIKE '%:chat:%' | SQL 指令:SELECT `key` FROM store WHERE `key` LIKE 'pad:%' AND `key` NOT LIKE '%:revs:%' AND `key` NOT LIKE '%:chat:%' | ||
− | + | 資料表中,key 可以有如下涵意 | |
#pad:頁名:該頁當前版本內容 | #pad:頁名:該頁當前版本內容 | ||
#pad:頁名:revs:數字:版本 | #pad:頁名:revs:數字:版本 | ||
#pad:頁名:chat:數字:聊天 | #pad:頁名:chat:數字:聊天 | ||
− | 一些頁面說明: | + | ====一些頁面說明:==== |
− | + | '''當前諸頁列表:''' | |
− | + | <sqltbl> | |
− | + | dbname=etherpad | |
+ | sql=SELECT if(char_length(`key`)>20,concat('pad:<br/>',substring(`key`,5)),`key`),caption FROM store a left join pageCaption b on a.`key`=b.page WHERE `key` LIKE 'pad:%' AND `key` NOT LIKE '%:revs:%' AND `key` NOT LIKE '%:chat:%' | ||
+ | </sqltbl> | ||
+ | |||
<sqltbl> | <sqltbl> | ||
dbname=etherpad | dbname=etherpad | ||
− | sql=SELECT `key` FROM store | + | sql=SELECT page,caption,b.`key` FROM pageCaption a left join store b on a.page=b.`key` where b.`key` is null |
</sqltbl> | </sqltbl> |
2024年2月21日 (三) 15:09的最新修訂版本
目錄
一、安裝
前置準備:
- 一個 OS 專用於 etherpad 的帳號,如 adminNas
- root 權限
安裝步驟
- 先在 DS720+ 安裝 git server ,使得可以使用 git clone … 指令。
- 進 OS 取得 root 權限
- cd 到 web 服務的根目錄
- git clone https://github.com/ether/etherpad-lite.git 安裝資料夾
省略安裝資料夾則會安裝到 etherpad-lite 資料夾
(士賢:從etherpad官網下載,再解壓縮再將資料夾上傳到伺服器)
會建立安裝資料夾 - chown -R adminNas:administrators ./etherpad-lite
- 檢查 etherpad-lite 路徑是否沒有任何可操作之權限,若是:chmod -R 777 ./etherpad-lite
- 回復到 adminNas 的帳號身份
- cd etherpad-lite
- bin/run.sh
(士賢:src/bin/run.sh)
納入排程:
- 去「DSM/控制台/任務排程表/新增」
- 任務名稱:可取「run etherpad」(無法用英文)
- 使用者帳號:adminNas
- 「排程/在以下日期執行/不重複」
- 任務設定:「bash /volume1/web/etherpad-lite/bin/run.sh」
- 回到「控制台/任務排程表」挑選剛才新增的任務,按「執行」按鈕
額外的安裝布驟:
- bin/run.sh --root
- export NODE_ENV=production
debug
若是安裝啟動後,首頁及頁面CSS顯示出問題(跟預設不同)
- 可以更改setting.json的下面這行(大約在295行),將true改成false
- "minify": true, ----->> "minify": false,
- (如果為 true,則所有 css 和 js 在傳送到客戶端之前都會被縮小。)
二、使用
- http://網址:9001
- http://網址:9001/p/頁名 // 進入某頁
- http://網址:9001/admin // 安裝 Plugin 或編輯設定檔
設定要可更改,須先「chmod 777 setting.json」- 重新啟動:http://網址:9001/admin/settings 中有「存設定」與「重啟 Etherpad」的按鈕
- 「存設定」按了也不會存入新的設定
- 「重啟 Etherpad」按鈕按了可以關停 Etherpad ,但不會重新啟動。
- 管理外掛:http://網址:9001/admin/plugins
- 運行資訊:http://網址:9001/admin/plugins/info
- 重新啟動:http://網址:9001/admin/settings 中有「存設定」與「重啟 Etherpad」的按鈕
- 重新啟動 Etherpad :
- 先利用「http://網址:9001/admin/settings」的「重啟 Etherpad」按鈕,會關停 Etherpad ,但重啟會失敗。
- 再執行「DSM / 控制台 / 任務排程表 / run2.sh」使新設定生效。
刪除一篇便箋(pad)
http://網址:9001/api/1/deletePad?padID=便箋名&apikey=.......
apikey 去 APIKEY.txt 中查閱
三、有用外掛
(一)插入圖照
- 名稱:previewimages
- 用法:直接在便箋文中插入圖照連結,會自動調大小顯示圖照。
- 補充:
- 使用維基共享資源圖照時,可利用各種尺寸的縮圖
- 同一行可以插入兩個圖照連結
(二)插入影片
- 名稱:embedmedia
- 用法:安裝完會在工具列出現「Embed Media」圖示,按此圖示,輸入影片連結,可嵌入影片。
(三)設定字的大小
- 名稱:font_size
- 用法:安裝完會在工具列出現「字級尺寸」圖示,是下拉選單。先選定字串,再設定字級。
(四)列出所有的 pad(便箋)
- 名稱:padlist2
- 用法:網址列輸入「http://網址:9001/list 」,會列出所有便箋,並可以蒐尋字串找出「便箋名」含蒐尋字串的便箋。
(五)可以 wiki 格式匯出單一 pad(便箋)的內容
- 名稱:mediawiki
- 用法:安裝完會在匯出功能中,多一個 MediaWiki。
- 補充:多層文字的完整度不如預設的 Plain text ,多媒體完整度要靠預設的 Etherpad 格式(json 語法)
- 多層列表只會表現出單層
- 換行不會產生空白行
- 沒有段落功能(等號)
- 影片與圖照都轉成單層中括號
- 加粗轉為三個單引號
四、進階設定
編輯 settings.json
(一)使用 MySQL 在資料
用多行註解註解掉:
"dbType": "dirty", "dbSettings": { "filename": "var/dirty.db" },
改成:
"dbType" : "mysql", "dbSettings" : { "user": "某使用者", "host": "localhost", "port": 3306, "password": "密碼", "database": "etherpad", "charset": "utf8mb4" },
在重新開etherpad前,請先去設定的MySQL資料庫(例如使用 adminer),在資料表已有其他字集內容之前,將資料表的校對字集設定(Collation)與上面"charset"相符,否則 etherpad 會無法開啟。
(二)須登入才能使用 Etherpad
- "requireAuthentication": true,
- "requireAuthorization": false,
- "users":{} // 諸帳號
三、圖示
圖示是被做成字型使用,並且套用「Font_Awesome_5」
- 由主介面看原始碼,查 button 標籤的 class 屬性,查到諸圖示類別有:
- buttonicon-bold
- buttonicon-italic
- buttonicon-underline
- buttonicon-strikethrough
- buttonicon-insertorderedlist
- buttonicon-insertunorderedlist
- buttonicon-indent
- buttonicon-outdent
- buttonicon-undo
- buttonicon-redo
- buttonicon-clearauthorship
- buttonicon-import_export
- buttonicon-history
- buttonicon-savedRevision
- buttonicon-settings
- buttonicon-embed
- buttonicon-showusers
- btn-primary
- btn-default
- chatloadmessages
- 由 src/static/css/pad/icons.css 中查到上述各類別的字形編碼
- 由 src/static/font/fontawesome-etherpad.svg 中的各 glyph 標籤 unicode 屬性,查出其向量繪圖資料
四、檔案列表
ep_<plugin>/ ├ .github/ │ └ workflows/ │ └ npmpublish.yml ◄─ GitHub workflow to auto-publish on push ├ static/ │ ├ css/ ◄─ static .css files │ ├ images/ ◄─ static image files │ ├ js/ │ │ └ index.js ◄─ static client-side code │ └ tests/ │ ├ backend/ │ │ └ specs/ ◄─ backend (server) tests │ └ frontend/ │ └ specs/ ◄─ frontend (client) tests ├ templates/ ◄─ EJS templates (.html, .js, .css, etc.) ├ locales/ │ ├ en.json ◄─ English (US) strings │ └ qqq.json ◄─ optional hints for translators ├ .travis.yml ◄─ Travis CI config ├ LICENSE ├ README.md ├ ep.json ◄─ Etherpad plugin definition ├ index.js ◄─ server-side code ├ package.json └ package-lock.json
五、啟動解說
#!/bin/sh MY_DIR=$(cd "${0%/*}" && pwd -P) || exit 1 cd "${MY_DIR}/../.." || exit 1 . src/bin/functions.sh exec node $(compute_node_args) src/node/server.js "$@"
這是一個 shell 腳本,它使用 Node.js 執行一個 JavaScript 文件。讓我們逐行解析:
- #!/bin/sh (如何執行)
這是一個 shebang 行,它告訴系統用哪個解釋器來執行腳本。在這個例子中,它指定用 /bin/sh,即 Bourne shell 或其相容的 shell。 - MY_DIR=$(cd "${0%/*}" && pwd -P) || exit 1 (執行路徑設定)
這行命令首先通過 ${0%/*} 獲取腳本所在的目錄,$0 表示腳本本身的路徑,${0%/*} 則是去掉文件名,只保留目錄路徑。
然後使用 cd 切換到該目錄,並使用 pwd -P 獲取實際的絕對路徑,將其賦值給變量 MY_DIR。
如果操作失敗,則使用 exit 1 終止腳本執行並返回錯誤碼 1。 - cd "${MY_DIR}/../.." || exit 1 (切換執行路徑)
切換到 MY_DIR 變量所指向的目錄的上兩級目錄。
如果操作失敗,則使用 exit 1 終止腳本執行並返回錯誤碼 1。 - . src/bin/functions.sh (常數參數設定)
使用點命令(.)來源(source)src/bin/functions.sh 文件。
這將執行該文件中的所有命令,並將其中定義的函數和變量導入當前腳本的環境。
可以使腳本中的函數(如 compute_node_args)在當前腳本中可用。 - exec node $(compute_node_args) src/node/server.js "$@" (執行伺服器)
這行命令與之前解釋的命令相同。
它在當前 shell 進程中使用 Node.js 執行 src/node/server.j 文件,並將 compute_node_args 腳本的輸出作為額外的命令行參數,再把所有其他傳遞給當前腳本的參數傳遞給 server.js 文件。
第五行程式碼更詳細解說
這條命令是在 Bash 環境下運行的,用於使用 Node.js 執行一個 JavaScript 文件。讓我們逐步解析這條命令:- exec
exec 是一個 shell 內建命令,它用於在當前進程中執行指定的命令,而不是創建一個新的進程。
這意味著當你使用 exec 執行一個命令時,該命令會替換當前 shell 進程,而不是在新的子進程中運行。當命令執行完畢後,進程將終止,而不是返回到原始的 shell 進程。 - node
node 是 Node.js 的命令行工具,用於執行 JavaScript 文件。
Node.js 是一個用於開發伺服器端應用程式的 JavaScript 運行環境。 - $(compute_node_args)
這是一個命令替換(command substitution)表達式。
它將會執行 compute_node_args 腳本(假設它是一個可執行腳本),並將其輸出插入到當前位置。
這個腳本可能會計算並生成一些 Node.js 需要的參數,例如指定的 Node.js 版本、記憶體限制等。 - src/node/server.js
這是要執行的 JavaScript 文件的路徑。
在這個例子中,這是一個 Node.js 伺服器應用程式的入口點。 - "$@"
這是一個特殊的 shell 參數,代表所有傳遞給當前腳本或函數的參數。
在這裡,它將會把所有參數傳遞給 server.js 文件。
綜上所述,這條命令的功能是在當前 shell 進程中使用 Node.js 執行 src/node/server.js 文件,並將 compute_node_args 腳本的輸出作為額外的命令行參數,再把所有其他傳遞給當前腳本的參數傳遞給 server.js 文件。
- exec
總結一下,這個腳本的目的是確保在正確的目錄下執行 Node.js 伺服器應用程式,並在需要時使用額外的命令行參數。在執行過程中,它還導入了一些函數和變量,可能對腳本的後續操作有用。
六、參考外掛
外掛列表:
- ep_embedmedia:嵌入媒體 (youtube、vimeo 等)。
- ep_image_insert:可插入圖像並調整圖像大小的功能。
- ep_webrtc:WebRTC的音頻/視頻聊天的功能。
- ep_mathjax:支持 LaTeX STylee 數學公式。
- ep_mediawiki:在 Etherpad 中編輯並導出為 mediawiki
- ep_real_time_chat:即時聊天更新。
- ep_inline_voting:添加選項以對部分文本進行投票
- ep_catalog_plugin:etherpad目錄插件
- ep_align:用於設置段落的左對齊、居中對齊、右對齊或完全對齊的功能。
- ep_markdown:可應用 Markdown 編輯和導出。
- ep_font_size:可改變文字大小的功能。
- ep_font_color:可改變文字顏色的功能。
- ep_print_preview_pdf:列印及預覽 PDF
- ep_print:列印功能。
- ep_desktop_notifications:接收聊天桌面通知。
- ep_themes:改變 theme 的不同部分的主題、樣式和顏色。
- ep_guest:限制未登錄的使用者有限的訪問許可。
- ep_openid_connect:限制特定的登錄者帳號密碼
- ep_table_of_contents:表格相關]
- ep_private_pad: 用戶註冊和登錄以管理私人pad (安裝會導致 EtherPad 無法開啟)
- ep_tableau: 出現表格選單,可以新增表格、刪除表格
七、參考文件
- https://benson82208.pixnet.net/blog/post/44426446-線上多人共同編輯-etherpad-安裝
- https://docs.gandi.net/zh-hant/cloud/tutorials/etherpad_lite.html
- https://gis90.github.io/articles/7544/
- http://www.unixlinux.online/unixlinux/gdliunx/linuxj/201703/96960.html
- 以太墊的安裝與使用
附錄、DS218上共筆頁列表
SQL 指令:SELECT `key` FROM store WHERE `key` LIKE 'pad:%' AND `key` NOT LIKE '%:revs:%' AND `key` NOT LIKE '%:chat:%'
資料表中,key 可以有如下涵意
- pad:頁名:該頁當前版本內容
- pad:頁名:revs:數字:版本
- pad:頁名:chat:數字:聊天
一些頁面說明:
當前諸頁列表: