讓 nextcloud 有全文檢索能力FullText Search ElasticSearch

nextcloud 搜尋很好用,若能有全文檢索能力就更棒了,於是外掛 fulltextsearch_elasticsearch就登場了。

開發團隊只針對還在維護的nextcloud版本進行更新,也就是說一旦我們的nextcloud已經EOL了,就不會再收到ElasticSearch的更新。

以下是甘苦談

原本使用的nextcloud 25.x 能搭配ElasticSearch 7.x ,但遇到外掛存在非常嚴重效能低下問題(兩萬個檔案有設定分享,100人使用,建立索引表算一算需要至少三、四個月,太誇張了);由於nextcloud 25版已經停止維護,於是我只剩下升級nextcloud一途。 

我的nextcloud架設在 CentOS 7,docker上面跑好多容器,很穩定;但nextcloud要升級到26時候,出現容器dns錯亂,無法進行dns查詢,只好先還原回25版。

初步認定是CentOS 7或docker版本過於老舊,但我不敢隨意升級docker,最後只能將nextcloud資料複製到新的虛擬主機(RockyLinux 9.4),測試由25升級到26,然後26升級27 結果就很正常,沒有出現dns錯亂問題。

移轉注意事項請參考「將nextcloud從CentOS7移轉到RockyLinux9。

** 升級nextcloud到27,搭配新fulltextsearch外掛,初始索引要18小時,效率差了百倍以上。

開始安裝囉

安裝 ElasticSearch 8.x(ES 8) 引擎

Nextcloud 26或以上必須搭配 ES 8,最新docker版本可至此查詢 https://hub.docker.com/_/elasticsearch

#RockyLinux 9.4、docker 27.0.2

##############  檔案 ./docker-compose.yaml  ################

version: "3.9"

services:
elasticsearch:
build:
context: .
dockerfile: ./docker/es/Dockerfile
container_name: elasticsearch

environment:
- discovery.type=single-node
- xpack.security.enabled=false
- xpack.security.http.ssl:enabled=false
ports:
- 9200:9200
- 9300:9300
networks:
- elastic
restart: always
volumes:
- indexdata:/usr/share/elasticsearch/data
# 索引過的資料將存放到 /usr/share/elasticsearch/data裡面

networks:
elastic:
driver: bridge

volumes:
indexdata:
driver: local

###########################################################



################ 檔案 ./docker/es/Dockerfile ###############
FROM elasticsearch:8.14.2
# ingest-attachment 一定要安裝
RUN bin/elasticsearch-plugin install ingest-attachment
###########################################################
# 執行容器
docker-compose up -d

安裝完畢,瀏覽器測試一下引擎是否正常 http://ip:9200/ ,事後需填入到nextcloud外掛設定裡面。

nextcloud 安裝外掛 fulltextsearch

#若安裝出問題,請移除app後,再刪除以下資料庫資料,之後就可以正常安裝了
drop table oc_fulltextsearch_indexes;
drop table oc_fulltextsearch_ticks;
delete from oc_appconfig where appid='fulltextsearch';
delete from oc_appconfig where appid='fulltextsearch_elasticsearch';
delete from oc_appconfig where appid='files_fulltextsearch';
delete from oc_appconfig where appid='files_fulltextsearch_tesseract';
DELETE FROM oc_migrations WHERE app='fulltextsearch';
DELETE FROM oc_preferences WHERE appid='fulltextsearch';

外掛需要設定

外掛安裝完畢,還需要填入引擎網址、與索引名稱,其他預設值即可。

「檢查」外掛設定是否正常

docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:check

「測試」外掛設定是否正常

 docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:test

一切正常後,就可以開始建立索引表了,這裡建議定期重做索引。

 docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:index

這裡強烈建議「文件掃描PDF檔」需要利用acrobat adobe pro版內建文字辨識功能(OCR),進行一次自我辨識

第一次初始化索引建立後,才可以使用

最後還需要額外執行live指令,針對後續異動的檔案進行索引

# 自動索引官方沒建議怎做,我自己是在容器本體VM(RL9.4)利用console常駐執行
# 這樣做比較麻煩,需要注意重開後需要手動做
docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:live

** 有一次我要刪除原本的索引,一直失敗,搞了很久很久很久很久,才發現要先進入容器下指令才有用

docker exec -t --user www-data <nextcloud容器名稱> php occ fulltextsearch:reset

** 目錄裡面新增「 .noindex」 這個檔案,就可以不做index

** 若有安裝tesseract ocr這個外掛,記得進nextcloud容器,額外安裝相關程式(此功能我一直沒成功過)

apt install tesseract-ocr tesseract-ocr-chi-tra-vert  tesseract-ocr-chi-tra tesseract-ocr-chi-sim  tesseract-ocr-script-viet tesseract-ocr-script-hant tesseract-ocr-script-hant-vert

** 以前安裝Micro$oft單機版sharepoint,是個重量級系統,早就有全文檢索功能,但實在是太吃系統資源了,果斷不用。

wordpress 6.5.5 出現ERR_TOO_MANY_REDIRECTS error

場景

  1. 有對外IP充當反向代理程式VM(CentOS 7.9)
    httpd reverse proxy 2.4.6
  2. 無對外IP,內部vm (RockyLinux 9.4)
    Docker CE + Container WordPress 6.5.5

讓反向代理程式連到wordpress,網頁測試居然出現ERR_TOO_MANY_REDIRECTS 錯誤

爬文之後,要在wordpress的wp-config.php加上

if (isset($_SERVER['HTTP_X_FORWARDED_PROTO']) && $_SERVER['HTTP_X_FORWARDED_PROTO'] === 'https') {
$_SERVER['HTTPS'] = 'on';
}

再不行,要加上

if (isset($_SERVER['HTTP_X_FORWARDED_HOST']) && isset($_SERVER['HTTP_X_FORWARDED_PORT'])) {
$_SERVER['HTTP_HOST'] = $_SERVER["HTTP_X_FORWARDED_HOST"];
$_SERVER['SERVER_PORT'] = $_SERVER["HTTP_X_FORWARDED_PORT"];
}

來源 https://lukashermann.dev/writing/wordpress-too-many-redirects/

Nextcloud又一個坑,使用onlyoffice造成的

上次提到我又回歸使用 onlyoffice 75.1版,過了一段安穩日子後,沒想到居然遇到有個pdf,裡面小圖片不見的靈異現象,我還罵同事眼睛業障重,叫同事把看不到圖的那個pdf檔案,直接下載改用adobe reader看看,結果是「要不是我親眼所見,我是萬萬不能相信啊」,還真的連我都業障重,onlyoffice就是看不到小圖片,而adobe reader可以。

後來我先解除onlyoffice檢視pdf檔案設定,改使用nextcloud外掛 pdf.js, 就可以看到原本看不到的小圖片了,坑真的很多很大。

問題雖暫時解決,但pdf.js 功能太少了,不能鎖下載,也不能有浮水印,Gold害。

在沒有更好的處理方案前,我只好先搞定“公司規定不能下載PDF”的規定;最後手動修改程式,直接暴力停用pdf.js的下載功能
環境是:nextcloud 26,pdf.js 2.6

vi /var/www/html/apps/viewer/js/viewer-main.js
# 找到以下字串,將紅色部分刪掉
,e.canDownload?t(“NcActionLink”,{attrs:{download:……,e._v(” “),e.canDelete?…

cd /var/www/html/apps/files_pdfviewer
egrep -r "toolbarViewerRight" .|more
# 找到toolbarViewerRight 後面加上 hidden='true'

另外,安裝完pdf.js 我不確定是否要執行”啟用” javascript功能,但還是記下來好了(官網有特別提到此指令)

docker exec --user www-data -it nextcloud2 php occ config:app:set files_pdfviewer enable_scripting --value=yes

			
		

「FydeOS – 为中国用户打造的ChromeOS」初體驗

公司希望Android撰寫的測試程式移植到windows平台上,但是這樣做很耗時,程式要重新開發; 因此我想到讓筆電或電腦桌機能夠直接執行android, 這樣就能解決問題了。

我排除已知的解決方案之一-Android模擬器、windows 11模擬andorid不考慮(因為要停用了)。

最後我希望類似chrome book 使用chrome OS直接支援android 的方式,沒想到還真的找到了 –FydeOS

安裝FydeOS有些眉角要注意的:

  1. 筆電-panasonic CF-NX3,12G Ram
  2. 官方安裝方式,我要連續安裝好幾次才成功
  3. 安裝時,我的舊電腦BIOS先調整非UEFI才能安裝,安裝後再調回UEFI,才能啟用開發者模式(v18版)
  4. 安裝時,我使用本機帳號,不線上註冊
  5. 安裝完畢,FydeOS系統成功開機,啟用Android位置權限失敗,後來發現安裝Open GApps,GApps會將Play商店裝起來,才能啟用位置權限
  6. Play商店無法登入(未通過Play防護安全認證)
  7. 其他方面很順,簡直就是chrome book

修改註冊表以停用切換中文輸入法(shift鍵)

話說我一度以為酪梨醬解決了切換中文輸入的問題,結果並沒有,真是掉漆。

後來我只能退而求其次,使用酪梨醬之前,先關掉左邊shift鍵來停用主機本體的中文切換,這樣就可以解決遠端連線切換問題;使用完畢後,再還原主機本體的左邊shift鍵。

這樣做法對我來說不是很難,但難的是”會忘記”切換回來,所以我也不用問麻瓜了,自己都不能接受這做法。

於是我再再退而求其次,找到透過「修改註冊表」的方式,來「停用/啟用」切換中文輸入法。

# dos 指令
# 0x00000001 (啟用)、0x00000002 (停用)
powershell -Command Set-ItemProperty -Path 'HKCU:\Software\Microsoft\IME\15.0\IMETC' -Name 'Left Shift Usage' -Value 0x00000002

這樣或許我就可以寫個簡單的windows程式,或是批次檔案,一旦執行,會先關閉左邊shift鍵切換中文功能,然後召換chrome瀏覽器帶出酪梨醬網址,使用完畢後,程式或是批次檔案會自動回原回原本的設定,這樣就不會再忘記切換回來了。

# dos 指令 (存成bat檔案)
powershell -Command Set-ItemProperty -Path 'HKCU:\Software\Microsoft\IME\15.0\IMETC' -Name 'Left Shift Usage' -Value 0x00000002


powershell -NoProfile -Command ^
Start-Process -passthru chrome.exe '酪梨醬網址' ; ^
while ((get-process -name chrome).count -ne 0){} 


powershell -Command Set-ItemProperty -Path 'HKCU:\Software\Microsoft\IME\15.0\IMETC' -Name 'Left Shift Usage' -Value 0x00000001

OpenProject與GIT整合

OpenProject能與GitHub、GitLab深度整合,當然也包含一般git server或local git。整合後,專案成員可看到所有檔案內容,我覺得有必要管控權限,畢竟有些人只要看到修改記錄即可,如PM。

既然我的目標只是想讓OpenProject能看到git的修改記錄,於是硬著頭皮改openproject程式,好險不難,硬生生讓我改成只能看到修改記錄。

詳請參考咖啡偶之書。

https://book.kafeiou.pw/books/openproject/page/git

情人節快樂-老牌遊戲柏德之門I、II

前陣子柏德之門III問世,引發眾玩家為了想要跟隊員愛愛,將各種情侶組合(不限種族,性別,年紀),與通關方式翻了個遍。

一想到這幾天大過年的,我每次都會玩一下柏德之門三部曲,這遊戲經由第三方套件–BGT-WeiDU,套件整合了「劍灣傳奇」、「柏德之門I」與「柏德之門II」,最值得一提的是裡面包含了N種額外的劇情,當然也有戀愛的情節(比較隱晦一點),想嘗試戀愛滋味的宅男們,建議一定要玩,而且老電腦都跑得起來哦! 想辦法組裝玩玩吧–提示:GOG GalaxyBG1(the original saga)BG2

玩柏德之門三部曲時候,解析度只有800×600真是惱人,後來到安裝widescreen之後就可以自訂解析度,雖然字還是很小,但可以滿版螢幕,改善很多了。

OpenProject 翻譯

我在進行OpenProject翻譯時,把特殊的部分列出來(後續在咖啡偶之書更新):

Placeholder Users  ->  非專案成員 ── 原本翻譯成佔位符用戶
Repository -> 版本庫  ── 大部分都翻譯成儲存庫,但在Open project很確定是版本控管git or svn

要抓特定檔案裏面特定字串,可執行以下指令

 find . -name '特定檔案' | xargs egrep "特定字串"

nextcloud雲端檔案,新增額外屬性

公司有追蹤「檔案過期」需求,最方便就是賦予檔案新的屬性—過期日,作為nextcloud粉絲,當然由nextcloud著手,萬幸有個app customproperties能達到要求,最後再寫個程式追查一下資料庫資料表oc_properties 過期日資料,就可以完成系統自動通知功能,定期通知檔案主人快到期,讓主人進行延展或是不再追蹤。

但是該app已經有一陣子沒更新了,不支援nextcloud 25以上版本,有人告知可以小改繼續在25、26版使用,真是幸運,我也依樣畫葫蘆,弄了一個能支援25~28的版本來,有興趣的可以按此下載,下載後先解開zip可得tar.gz檔案,再解開成一個目錄「customproperties」,將整個目錄放在nextcloud的custom_apps目錄裡,並且確認目錄權限正確後,回到nextcloud就會出現「 Custom Properties」外掛,即可啟用。

1 2 3 ... 5