備份神器restic必須搭配restic-browser
windows畢竟還是主流,所以在windows上設定restic備份之後,事後要提取還原,windows系統上必須搭配好用的GUI軟體,因此我推薦 https://github.com/emuell/restic-browser
windows畢竟還是主流,所以在windows上設定restic備份之後,事後要提取還原,windows系統上必須搭配好用的GUI軟體,因此我推薦 https://github.com/emuell/restic-browser
慘,我的錯。
解決方式:
1. 到nextcloud該使用者目錄,找出<user>/files_trashbin/files 複製到 <user>/files
2. 執行 php occ files:scan –all
若出現 Exception during scan: “files/xxx”) is locked 則進入資料庫,刪除資料表資料 DELETE FROM oc_file_locks WHERE 1;
刪除之後,再次執行 php occ files:scan –all 還原檔案後,原本分享的狀態可能會不見,要自己重新設定了。
先講結論,nextcloud聯盟功能分享的目錄,並不會把檔案傳到對方服務器。(這樣就無法達到檔案兩邊都有的需求)
如何正確啟用聯盟功能
1. 啟用「Federation」app
2. 在管理介面->分享頁面,做好設定以及加入遠端服務器
3. 設定檔加上「allow_local_remote_servers = true」
修改 config/config.php
或是下指令
occ config:system:set allow_local_remote_servers --value true --type bool
4. 同步位址簿(需加入crontab定期執行)
occ dav:sync-system-addressbook occ federation:sync-addressbooks
5. 分享目錄給遠端的聯盟使用者
6. 遠端使用者將會接收到分享目錄的請求
幾天前我想把nextcloud 25.0.11 升級到 26.0.5 ,這麼多年來從18版一路高歌升到25版,都沒遇到問題,這次卻栽了無法升級,原因卡在資料庫那段,這問題似乎無解,在不想等待的情況下,我決定還原回去。
2023/9/22 發現我25.0.11升級會出錯,官方馬上釋出25.0.12 ,但我升級還是失敗,原來資料庫mariadb 10.3.2版本有問題,我直接docker pull mariadb:10.3 後面不接了,這樣就從25->26能升級成功
還原步驟:
我先將restic 所備份最新版nextcloud備份的snapshot掛載起來,接著停用目前的資料庫(mariadb 10.3.2 多個容器共用);再將nextcloud的相關volume、資料庫還原,結果失敗,失敗原因不明,docker看log也看不出來,web登入出現「Nextcloud the server was unable to complete your request」錯誤,真真急死人;後來爬文,歸納問題可能有三種:目錄權限沒設定好、資料庫問題與ldap無法連線。
不屈不撓檢查才發現原來是我偷懶,當初所有容器所用到的資料庫都統一讓唯一的資料庫容器管理,現在要還原,我停止資料庫容器後,只有還原其中nextcloud的資料庫,其他資料庫不還原,導致重新啟動資料庫容器時,nextcloud資料庫居然有一些資料表損毀(ENGINE=InnoDB)。
好在損毀的資料表是oc_authtoken,只要重建就好了,但是重建失敗,mysql會說該資料表已在,但是query時,mysql又說沒有該資料表,網上有位苦命工程師說建資料表時,遇到這情形,請改用ENGINE=MyISAM格式就能成功,我照著做之後,nextcloud又恢復往日雄風還原成功,但重建的資料表MyISAM跟其他使用InnoDB的資料表格格不入,以後要找一天將資料庫修復才行。
這故事告訴我們,還原資料庫容器要全部都還原,不可只還原其中一部分資料庫。
CREATE TABLE `oc_authtoken` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `uid` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '', `login_name` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '', `password` longtext COLLATE utf8_bin, `name` longtext COLLATE utf8_bin NOT NULL, `token` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '', `type` smallint(5) unsigned NOT NULL DEFAULT '0', `remember` smallint(5) unsigned NOT NULL DEFAULT '0', `last_activity` int(10) unsigned NOT NULL DEFAULT '0', `last_check` int(10) unsigned NOT NULL DEFAULT '0', `scope` longtext COLLATE utf8_bin, `expires` int(10) unsigned DEFAULT NULL, `private_key` longtext COLLATE utf8_bin, `public_key` longtext COLLATE utf8_bin, `version` smallint(5) unsigned NOT NULL DEFAULT '1', `password_invalid` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `authtoken_token_index` (`token`), KEY `authtoken_last_activity_idx` (`last_activity`), KEY `authtoken_uid_index` (`uid`), KEY `authtoken_version_index` (`version`) ) ENGINE=InnoDB AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
以上重建table失敗
CREATE TABLE `oc_authtoken` ( `id` bigint(20) unsigned NOT NULL AUTO_INCREMENT, `uid` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '', `login_name` varchar(64) COLLATE utf8_bin NOT NULL DEFAULT '', `password` longtext COLLATE utf8_bin, `name` longtext COLLATE utf8_bin NOT NULL, `token` varchar(200) COLLATE utf8_bin NOT NULL DEFAULT '', `type` smallint(5) unsigned NOT NULL DEFAULT '0', `remember` smallint(5) unsigned NOT NULL DEFAULT '0', `last_activity` int(10) unsigned NOT NULL DEFAULT '0', `last_check` int(10) unsigned NOT NULL DEFAULT '0', `scope` longtext COLLATE utf8_bin, `expires` int(10) unsigned DEFAULT NULL, `private_key` longtext COLLATE utf8_bin, `public_key` longtext COLLATE utf8_bin, `version` smallint(5) unsigned NOT NULL DEFAULT '1', `password_invalid` tinyint(1) NOT NULL DEFAULT '0', PRIMARY KEY (`id`), UNIQUE KEY `authtoken_token_index` (`token`), KEY `authtoken_last_activity_idx` (`last_activity`), KEY `authtoken_uid_index` (`uid`), KEY `authtoken_version_index` (`version`) ) ENGINE=MyISAM AUTO_INCREMENT=4 DEFAULT CHARSET=utf8 COLLATE=utf8_bin;
改成MyISAM就成功重建table
公司有追蹤「檔案過期」需求,最方便就是賦予檔案新的屬性—過期日,作為nextcloud粉絲,當然由nextcloud著手,萬幸有個app customproperties能達到要求,最後再寫個程式追查一下資料庫資料表oc_properties 過期日資料,就可以完成系統自動通知功能,定期通知檔案主人快到期,讓主人進行延展或是不再追蹤。
但是該app已經有一陣子沒更新了,不支援nextcloud 25以上版本,有人告知可以小改繼續在25、26版使用,真是幸運,我也依樣畫葫蘆,弄了一個能支援25~28的版本來,有興趣的可以按此下載,下載後先解開zip可得tar.gz檔案,再解開成一個目錄「customproperties」,將整個目錄放在nextcloud的custom_apps目錄裡,並且確認目錄權限正確後,回到nextcloud就會出現「 Custom Properties」外掛,即可啟用。
outlook作為麻瓜收發郵件軟體最高殿堂,另存檔案當然只能讓outlook打開,其餘閒雜軟體皆不可冒犯。
某日一麻瓜以附件方式,寄給朋友,豈料朋友並沒有outlook,無法開啟msg格式附件,真是大膽!麻瓜求助郎中,郎中開出一帖msgviewer軟體,該軟體佐以java服用,即可將outlook之msg檔案,轉成eml格式(國際標準rfc822格式),經熬煮60個時辰煉化成eml,檔案寄給朋友,朋友以異端thunderbird軟體開啟,正確無誤。
我在去年讓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=密碼