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

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

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

onlyoffice再次回歸啟用

我在去年讓nextcloud改用collabora online,原因為onlyoffice官方編譯的社群版本限制只能20人使用,只好用collabora online 無限人版;最近同事又開始抱怨與M$ office相容性不好,這樣會影響我想要讓大家習慣上雲端進行檔案編輯的目標。於是我挖呀挖呀挖,找了找,想要找一款好用的線上編輯office軟體。

首選台灣晟鑫科技https://www.ossii.com.tw/,一般社群版就很好用了,與微軟相容性極高。

但公司需要更多的功能,只好捨棄oxoo office社群版,我又花了些時間回頭看onlyoffice,冀望有人重新編譯無限人版,沒多久還真的找到,藏在一個很低調的github頁面上,直接是容器版本,實在太棒了。

這裡是自己手動編譯的教學文章

我建議的安裝方式與之前一樣,只要改後面的images來源就可以了,請參考這裡

ghcr.io/thomisus/onlyoffice-documentserver-unlimited:7.4.1

點選這裡「隱藏的網址」,要低調阿

2023/9/25 後記,原來是「Collaborative tags」害我不能正常使用onlyoffice設定功能。

我在重新回歸onlyoffice時候,發現無法透過在nextcloud的 「onlyoffice 設定畫面」進行設定,只能使用指令,只好將相關指令一併紀錄下來。

# 列出onlyoffice設定
docker exec -u www-data nextcloud php occ config:list onlyoffice
# 清除nextcloud設定
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice DocumentServerUrl
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice StorageUrl
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice advanced
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationChat
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationCompactHeader
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationFeedback
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice DocumentServerInternalUrl
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationForcesave
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationHelp
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationReviewDisplay
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationTheme
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customizationToolbarNoTabs
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice customization_macros
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice defFormats
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice demo
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice editFormats
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice enabled
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice groups
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice installed_version
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice jwt_header
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice jwt_secret
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice sameTab
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice settings_error
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice types
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice verify_peer_off
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice versionHistory
docker exec -u www-data nextcloud php occ config:app:delete onlyoffice preview
#設定onlyoffice網址,忽略證書,密碼
docker exec -u www-data nextcloud php occ config:app:set onlyoffice DocumentServerUrl --value=https://xxx
docker exec -u www-data nextcloud php occ config:app:set onlyoffice verify_peer_off --value=true
docker exec -u www-data nextcloud php occ config:app:set onlyoffice jwt_secret --value=密碼

簡易電子白板,可整合nextcloud、可同時共同編輯

docker安裝

#修改紅色部分
docker volume create app
docker run -d -p 80:8080 -v app:/opt/app --restart=always --name whiteboard rofl256/whiteboard

安裝完畢使用反向代理就可使用了。參考文件如下:

https://hub.docker.com/r/rofl256/whiteboard

https://github.com/cracker0dks/whiteboard

還可以跟nextcloud整合

這個很陽春,可以設定密碼,但麻煩;白板可以取名字就可以開多個白板,但是掛載nextcloud只能掛同一個。

https://xxx.xxx.xxx/whiteboard/?whiteboardid=WHITEBOARDNAME

關掉wordpress的xml-rpc API呼叫功能

最近發現我安裝的nextcloud常常優雅的關閉(shutting down gracefully),當然原因很多很多,終究是我不好(一副政治人物的口吻);我接著查看log的時候,意外發現有個xmlrpc.php一直被呼叫,於是查了一下,原來是被攻擊了,當然這種無差別攻擊最後也是失敗告終。

像我這種對資安敏感度差的人,又管很多很多開源網站,一般只知道版本更新,不看是否有資安漏洞,除非網站出問題。現在問題來了,我爬了文,一般都建議關閉xml-rpc api,反正99.99%都用不到。wordkpress裡面就能找到停用XML-RPC外掛。

同場加映,我從wordpress 4.9開始使用,裡面有個阻擋廣告留言的Akismet Anti-Spam,很好用,後來升級5.x之後,又出現另一個Akismet Anti-Spam,所以我的網站有兩個Aiti-Spam但版本不同,我也不以為意;但期間我這個網站一直會要求訪問網站的人「同意訂閱」,這問題我找了很久,終於抓到是舊版Akismet Anti-Spam搞的鬼,或許是該外掛有漏洞我不自知,兼沒移除所致。現在刪掉就清爽多,也不再詢問訪問網站者是否訂閱惹。

舊版Akismet Anti-Spam存在的時候,會有一個wp_pushup目錄,裡面時常出現一個js檔案,刪了又會出現,導致來我網站的人們,都會被要求訂閱;在移除舊版Akismet Anti-Spam之後,該wp_pushup目錄也隨之被移除,也不會出現要求訂閱的訊息了。

CentOS 更新特定版本APP

上一則文章提到docker必須升級到20.10.6版,但是我刷了yum update發現原本20.10.3要直上 24.x.x版,有點怕怕的,因此希望能更新到20.10.6就好了,爬文之後解答如下:

sudo yum list docker-ce --showduplicates | sort -r
sudo yum install docker-ce-<VERSION_STRING>  docker-ce-cli-<VERSION_STRING>
#一般來說docker-ce與docker-ce-cli版本要一致比較好

gitea(吉茶)需要更新docker版本20.10.6或以上

前陣子我協助機構部門導入git LFS大檔案版本控管,當時希望push資料時,觸發webhooks,執行我寫好的程式進行分析。

我使用gitea內建測試功能,能很順利觸發webhooks,進而執行程式。

可是實作時卻觸發不了,經檢查logs與爬文後,發現docker版本必須大於等於 20.10.6 有作用,我更新到20.10.6之後測試,還是一樣沒用,只好先擺著,希望主機重開後,能有改善,但無論如何,吉茶說要更新我就照作了。

Gitea無法觸發webhook

我在Gitea上面設定達成某個條件,觸發webhook執行

但是出現以下錯誤

 ...webhook can only call allowed HTTP servers (check your webhook.ALLOWED_HOST_LIST setting)

需要允許webhook執行遠端的http程式

#修改app.ini
[root@firewall crontab]# docker exec -it gitea bash
14c18c2bd6c0:/# vi data/gitea/conf/app.ini
#加上
[webhook]
ALLOWED_HOST_LIST = 192.168.1.0/24

修改完成重開gitea就能使用了

小公司應用軟體系統-戰略與戰術

對於一個小公司來說,當然非常想用各式各樣的應用軟體系統,可是公司沒人懂IT,對於所謂的上雲端更是丈二金剛摸不著頭腦,搞不清楚,若找來軟體公司,公司說了一大堆,一開口說預算多少,老闆也跟著張大口嚇得不要不要的。

所以我常建議軟體公司,必須提供小企業能負擔的解決方案,至少要能解決小公司「辦公室能用到的軟體系統」,如nextcloud這樣的雲端檔案系統,同樣也必須做到虛擬伺服器(proxmox ve) + 虛擬主機(容器服務);一個應用系統必須虛擬化、容器化,千萬不要安裝在一台實體主機(除非是故意的,這樣才能賺錢,反正客戶都不懂)。

前幾天看到YT閱部客談到《跨能致勝:顛覆一萬小時打造天才的迷思,最適用於AI世代的成功法》這本書,提到「戰略與戰術」,我相當認同其中的見解:單一專業的部分交給AI,綜觀全局的部分就交給人類。

https://www.youtube.com/watch?v=-j8MSMqDfs0

軟體公司能提供給小公司的戰略重點就是「備份」,而且要麻瓜都懂的備份方式,我先前就遇到一家小公司透過朋友輾轉向我求救,他們IT突然跑了,沒有交接,他做好的系統是運行3年多的實體機,看起來搖搖欲墜,後端NAS也無人知曉如何登入。

我接手後,先確認他們只需要mail server 與 對會員收費網站(wordpress),我花了很多功夫,終於移植到一台單一主機(ssd*1 for os、hdd*3 for zfs),pve 8.0 +RockyLinux 9.2 +podman container。

系統移植成功後,還要考慮麻瓜備份問題,戰略戰術一併考慮,我額外安裝一個容器:nextcloud雲端檔案系統,透過此雲端檔案系統能連到外部空間的特異能力(external storage support),直接俗又有力的掛載宿主(pve)主機已準備好的備份目錄,最後只要讓麻瓜安裝nextcloud 用戶端app,就能同步備份目錄到麻瓜其他檔案空間,達到離線備份的效果,離線異地備份就再也跟IT沒關(頂多半年協助做個還原演練即可),我也能全身而退。

nginx 反向代理wordpress容器,出現failed (111: Connection refused) while connecting to upstream

系統大概長這樣,一個RockyLinux 9.2 主機安裝 iRedMail 1.6.3版(容器還在Beta版),iRedMail安裝滿簡單的,很快就搞定;但因為太霸氣應改主機的nginx設定,並且深度修改,若這主機只當mail server倒是沒問題,但可惜因為種種原因需要再安裝一個wordperss容器,這就麻煩了,我得了解如何讓nginx使用反向代理方式(proxy),才能連到wordpress,nginx反向代理設定似乎很簡單,也成功了,可惜log卻一直跳出錯誤:

connect() failed (111: Connection refused) while connecting to upstream

我祭出google大神,試了很多建議與解法卻失敗了,就在第9999次嘗試之後,突然意識到甚麼,將設定改了一下,只是簡單的將原本連到容器的方式 http://127.0.0.1:8080 改成該具名稱連線 http://www.test.com:8080 (該wordpress容器對外連結為https://www.test.com),錯誤訊息居然就停止了,真是神奇。

proxy_pass http://127.0.0.1:8080;
改成以下具名設定
proxy_pass http://www.test.com:8080;

算一算農曆七月快到了,就當作是靈異事件好了。

安裝wordpress(容器)掛載在子網址(目錄)

安裝wordpress這麼多次,第一次遇到掛載子目錄的需求,也就是安裝完畢,透過反向代理程式,網址看起來像這樣:

https://xxx.xxx.xxx/subfolder

一樣感謝google, 我爬了很多文,說法很多,自己覺得修改檔案這方式很靠譜(非透過web設定)可以避免掛載正式網址時候,若因錯誤很難進入網址改或是到資料庫研究要改哪個table

1.、修改 wp-config.php

 define('WP_SITEURL', 'https://你的網站名稱/你的子目錄');
 define('WP_HOME', 'https://你的網站名稱/你的子目錄');
 #以下是可以不使用ftp就安裝外掛
 define('FS_METHOD', 'direct');

2、修改.htaccess (與wp-config.php都是在wordpress根目錄)

<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /你的子目錄/
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /你的子目錄/index.php [L]
</IfModule>

3、nginx反向代理

 location /你的子目錄 {
    proxy_set_header Host $http_host;
    proxy_set_header X-Real-IP $remote_addr;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    proxy_set_header X-Forwarded-Proto $scheme;
    proxy_headers_hash_bucket_size 128;
    proxy_pass http://容器ip(通常127.0.0.1):port/你的子目錄;
  }

4、apache 反向代理

等待遇到實例
1 2 3 4 5 ... 15