在Docker的Nextcloud用腳本新增外部網頁連結 / Adding External Site Links Using Scripts in Nextcloud on Docker
客製化Nextcloud的下一步,我們能不能將外部網頁嵌入到Nextcloud的應用程式裡面呢?答案是使用外部網頁(External sites)擴充功能。我們可以進一步在Docker的Hook Folders中的post-installation資料夾中加入腳本,讓Nextcloud安裝完成後,自動開啟外部網頁擴充功能,並且將指定的網址加入到Nextcloud系統中。
The next step in customizing Nextcloud: can we embed external web pages into Nextcloud applications? The answer is yes, using the External sites app. We can further automate this process by adding a script to the post-installation folder within the Docker Hook Folders. This script will enable the External sites app and add specific URLs to the Nextcloud system after Nextcloud installation is complete.
Nextcloud的外部網站應用程式 / External Sites in Nextcloud
https://apps.nextcloud.com/apps/external
Nextcloud 的外部網站應用程式(External Sites App)是一個簡潔卻功能強大的工具,讓管理者可以輕鬆地將外部網站連結整合到 Nextcloud 的網路介面中。使用者只需點擊對應的圖示,即可在 Nextcloud 框架內直接瀏覽外部網站,帶來如同使用 Nextcloud 內建服務般的無縫體驗。這對於需要經常參考特定外部資源的團隊或個人來說,無疑提升了工作效率,也簡化了操作流程。例如,公司可以將內部網路(Intranet)、客戶關係管理系統(CRM)或其他常用線上工具的連結新增到 Nextcloud,讓員工可以集中管理和快速取用這些資源。
這個應用程式設定起來非常簡單,管理者只需提供外部網站的網址(URL)和名稱即可。系統會自動產生對應的圖示,並將其顯示在 Nextcloud 的應用程式選單中。更進一步地,管理者還可以針對不同的語言、裝置類型或使用者群組設定不同的外部網站連結,實現更精細的客製化管理。舉例來說,可以針對不同部門設定專屬的外部資源連結,或是根據使用者使用的裝置(例如電腦或手機)顯示不同的網站版本。
除了基本功能外,外部網站應用程式還支援透過 OCS(OwnCloud/Nextcloud Service)API 進行互動。這表示開發者或系統管理者可以透過程式化的方式管理這些連結,例如自動新增、修改或刪除連結,進而實現自動化管理和與其他系統的整合。而我們這篇的做法,就是利用了Nextcloud內建的API,用指令來新增外部網站的網址。
安裝後新增網站的腳本 / Add External Sites in Post-Installation Script
這篇的做法繼承自「讓Docker架設的Nextcloud預設關閉或開啟應用程式」的操作,我們一樣使用Docker的鉤子資料夾(hook folders)裡面的/docker-entrypoint-hooks.d/post-installation,將客製化的腳本放在裡面。這樣Nextcluod在安裝完成之後,就會自動執行這個資料夾裡面的腳本。
我將啟用外部網站應用程式與新增網站的腳本寫成add_external_sites.sh腳本。檔案內容很簡單,只有兩行指令:
#!/bin/bash
/var/www/html/occ app:enable external
/var/www/html/occ config:app:set external sites --value='{"1":{"id":1,"name":"My Blog","url":"https://blog.pulipuli.info","icon":"icon-external","lang":"","redirect":false}}'
我們用「/var/www/html/occ app:enable external」開啟Nextcloud的外部網站應用程式。然後用後面的指令加入外部網站,其中值得注意的參數是:
- id:會影響Nextcloud開啟外部網站的網址,只能使用數字。如果設定為1,那麼你就可以用「http://localhost:8080/apps/external/1/」開啟該外部網站。
- name:顯示在按鈕上的名稱。
- url:外部網站的實際網址。
- icon:外部網站的圖示。你可以在「List of available icons」裡面找到其他圖示設定。
如此一來,安裝好Nextcloud之後,腳本就會自動將外部網站的網址加入到Nextcloud中。我們就能在Nextcloud直接開啟這個外部網址了。
結語 / Conclusion
https://github.com/nextcloud/external/issues/6
乍看之下add_external_sties.sh只有兩行指令,但實際上我花了很多時間才找到正確的設定方式。一開始我本來是想用ChatGPT跟Gemini給我建議,但AI給的建議並不正確。而後我在很多網頁上找到各種可能的指令形式,直到最後找到rbax的建議,才釐清正確的指令形式。
可能是因為Nextcloud外部網站是一個很少人在使用的功能吧,找起來真是意外地棘手啊。希望未來有類似需求的開發者可以參考一下我這篇的做法。
這篇關於在Nextcloud用腳本新增外部網站的做法就到此為止了。文章最後的問題是:你覺得雲端硬碟需要這種整合外部網站的功能嗎?
- 1. 需要:把相關網站都擺到Nextcloud,使用上應該會更為便利。
- 2. 不需要:Nextcloud就做好雲端硬碟即可,不需要搞這些雜七雜八的玩意兒。
- 3. 應該讓使用者自行判斷:(其實本來就可以讓使用者自己調整外部網站啦)
- 4. 其他:歡迎在下面留言,分享你的看法吧!
非常謝謝你的分享, 請問你有遇過嵌入有包含麥克風功能的網頁無法使用的情況嗎?
回覆刪除https://medium.com/@bohachu/%E5%A6%82%E4%BD%95%E5%9C%A8-chrome-extension-sidepanel-%E8%A3%A1%E9%9D%A2-iframe%E9%82%84%E8%83%BD%E9%81%8B%E7%94%A8%E9%BA%A5%E5%85%8B%E9%A2%A8%E9%8C%84%E9%9F%B3%E7%9A%84%E8%BE%9B%E9%85%B8%E8%A1%80%E6%B7%9A2-5%E5%B0%8F%E6%99%82-2357a833f9e4
刪除必須要明確在iframe上面指定 allow=”microphone” 這樣的東西,iframe裡面的網頁才能用麥克風
謝謝, 已可以使用, 順便分享, 因為我外面還有一層nginx, 所以光在iframe處加上還不能使用, 需要在最外層的nginx處location加入麥克風相關索取權限就可以~
刪除To YW,
刪除確實。有用到iframe的地方都要加上相關權限才行呀。