自架wordpress避開docker早期–link參數,該如何連到mariadb資料庫

以前安裝wordpress容器的時候,可以利用–link參數,綁定以有的資料庫容器(mariadb),讓資料庫容器主機名稱變身成「mysql」,就可以不用安裝一大堆資料庫容器惹。(wordpress容器只認mysql這個主機(host)名稱,所以我們不得已而這樣做)

我先前的文章舊版(Docker)(WordPress)如何使用docker安裝wordpress (帳密皆為guest),也是建議醬做;可是好景不常,docker終於受不了了,新版廢棄–link參數,podman也跟進。

當然會這樣做一定是為了區分子網路,方便管理使用,我也「被」樂見其成,因此我安裝wordpress也必須避開–link參數。

該如何做呢? 以podman為例子,首先我們要想一個很威的網路橋接名稱mynet(可自訂):

 podman create network mynet

然後將以前就有的資料庫容器,加到這個網路橋接器上:

podman network connect mynet mariadb-container

接下來賦予資料庫容器別名,讓資料庫變身成wordpress心目中的mysql

 podman network connect  --alias mysql mynet mariadb-container

這樣一來安裝wordpress就可以不用加上 –link 這個參數,且wordpress容器也能自動認得資料庫容器了。

先前的文章新版(Docker)(WordPress)如何使用docker安裝wordpress

自架wordpress網站如何重設管理帳號密碼

wordpress 4、5、6這三個大版本,密碼皆使用hash方式加密,若我們忘記管理者帳號密碼,且無法從資料庫看到明碼密碼;此時如果你有資料庫(mariadb)管理者權限那就好辦了,可以先以資料庫的管理者帳號登入,該帳號為整個wordpress資料庫最高權限,而非wordpress管理者帳號;登入後,找出wordpress管理者帳號名稱,然後進行hash密碼加密。

網路上有提供該加密的網站,請google WordPress Password Hash Generator,就可以輕易產出密碼,甚至有些網站還產出SQL語法,修改一下語法內之管理者名稱即可使用,非常方便。

 --

 --

Podman容器備份

備份手法很多,最簡單就是整個主機定期做快照,加上離線備份,這樣就沒甚麼問題了。
但是我最近思考一件事,若我們想將podman上的容器軟體改成docker或是改回實體機使用, 這樣就比較棘手了。

我自己因為遇到podman storage要改不同位置,依照我以前文章更改storage路徑的做法再改一次路徑,podman居然整個崩潰了,搞到還要執行 podman system reset 才能恢復使用,但是reset後,原本的容器軟體全部出問題,若我有乖乖針對容器軟體進行備份,就不會這麼難堪了,最後只能整個VM還原。

所以我想了又想,覺得還是要直接備份容器的「images」與「volumes」。

爬文爬了幾天,修修改改後,我終於融合一個能備份容器以及其volume的腳本,很適合容器母體(host)為Linux使用,該腳本會備份所有的images、volume與執行容器指令。

按此下載podman容器備份腳本(需要輸入guest/guest,下載後請記得修改開頭幾行之備份路徑)

執行備份,先備份images,然後掃描volume,查詢volume若與images互通款取,也一併備份,最後追蹤最初容器執行之指令,也一併圈禁備份起來。

備份後,每個目錄將包含容器使用之images、volumes與rush.sh(啟用指令)

後來我發現volume很適合restic增量備份方式,可以減少我這腳本full backup很耗空間的作法。

因此又改寫了一份針對volume能增量備份的腳本,兩種可以同時搭配使用,例如每個月一次full backup,剩下的定期每日或每周進行restic備份。

按此下載podman容器使用restic備份腳本(需要輸入guest/guest,下載後請記得修改開頭幾行之備份路徑)

nextcloud 25.0.7 搜尋檔案功能失效

同仁反應搜尋檔案(檔名)失敗,我重開nextcloud沒用,系統剛好出現可以升級到25.0.8訊息,升級後也沒用;我冷靜仔細想想,覺得可能跟檔案快取有關,然後就想到一個神奇的指令,這個指令應該跟資料庫重新作index類似吧。

這個適合「換新container」或一季做一次
docker exec -u www-data -it nextcloud php occ  files:scan --all

#這個適合每天做一次
docker exec -u www-data -it nextcloud php occ  files:scan --unscanned --all

重新scan檔案後,該同仁就可以搜尋到了。

最後我們要讓這個指令在host本體主機上,定期以排程(crontab)方式執行工作:

PVE 6 zfs 檢查硬碟狀況並且發通知

zfs很強,pve也支援,但很多要手動調整,例如zfs的快取。直到現在我才發現,pve設定好zfs,若硬碟壞了,是不會主動通知的,甚至使用pve介面查詢,一樣發現不了硬碟壞了,我真的有點驚訝到,或許其他系統如FreeNAS也是如此。

查詢zfs狀態

PVE設定好zfs之後,請定期執行zfs檢查

#zpool scrub <zfs名稱>
#例如我在pve使用3顆1T硬碟,作成zfs,名稱取為Z1
#我就可以輸入以下指令,進行背景檢查
zpool scrub Z1
#若不想背景檢查,則改成
zpool scrub -S Z1

當執行完 zpool scrub指令後,可以再下zpool status -v ,此時會出現 scrub in progress(正在執行中)字樣

最後發現一顆硬碟壞了

此時使用pve gui介面,才會出現錯誤訊息

設定zfs 設定檔案,使其能正確發送email

vi /etc/zfs/zed.d/zed.rc
######################################################3
#請修改紅色部分
ZED_EMAIL_ADDR="it@test.com"
ZED_NOTIFY_INTERVAL_SECS=3600

#若為1則任何zfs動作一律發email,懶得測試0,反正email多收比少收好 
ZED_NOTIFY_VERBOSE=1 
######################################################3

設定crontab並且測試

收到email了,但硬碟壞一顆,不開心

其他指令

#若更換硬碟後,需要resilver
zpool resilver <zpool名稱>

因nextcloud而認識F-Droid

nextcloud上面有個很讚的開源看板軟體「Deck」,看板(kanban)概念屬於敏捷(Agile)開發的一部分,既然是敏捷,我直覺想到Deck一定有mobile app版本;於是我查了一下,發現iOS, Android都有,而且Deck 行動版還開源,iOS直接在app store就可以免費下載安裝,Android Deck則須小收3.49 USD 辛苦費。

我的手機一向都使用android,若想要免費版還有一個方式,就是到 F-Droid 下載免費編譯好的Deck 安裝;後來甚至發現nextcloud建議聯絡人同步軟體 DAVx5 也開源,一樣可以在 F-Droid 下載安裝,非常方便。

F-Droid 理念

F-Droid 是一個可在 Android 平台上安裝的自由與開源FOSS(Free and Open Source Software)的應用程式目錄,可供您輕鬆瀏覽、安裝並持續追蹤裝置上應用程式的更新。

因為我有兩個軟體從F-Droid下載,沒有google商店,將會面臨更新問題,所以最後乾脆安裝 F-Droid App 商店,讓他幫我更新。

nextcloud(容器)連到windows檔案伺服器

nextcloud若能跟公司內部的檔案伺服器連線,在外面就能方便存取公司檔案,也不失為一個好方法;只要安裝「External Storage Support」這個app就能存取外部檔案。

External Storage support 預設無法連線windows檔案伺服器,我們需要額外安裝一些套件,安裝完畢就能支援了。

docker(podman) exec -it <nextcloud container> bash

apt update 
apt -y install libsmbclient-dev libmagickwand-dev 
pecl install smbclient 
pecl install inotify
echo "extension=smbclient.so" > /usr/local/etc/php/conf.d/docker-php-ext-smbclient.ini
echo "extension=inotify.so" > /usr/local/etc/php/conf.d/docker-php-ext-inotify.ini

安裝相關套件後,就能選取到「SMB/CIFS」

原本連線到\\10.1xxx.x.x\taipei 拆開成兩部分,帳號若屬於網域,也要填進去,最後還限制群組使用

nextcloud「通知(Notification)」功能兩三事

nextcloud 要做到系統通知,首先要確認是否安裝「Notification」與「Activity」兩個外掛app,安裝完畢還要確保自動排程(crontab)正常執行,請參考「捨棄nextcloud(容器)內背景排程,改用主機排程(cron)」。

我因為啟用nextcloud的「Deck看板」功能,被使用者要求email通知看板功能的進度,所以安裝了「通知」app,安裝完畢會有一個全域預設的設定值,可以設定那些事件需要通知。

現在問題來了,全域設定預設會通知一大推事件,例如行事曆異動、新增標籤、群組異動與新留言訊息等等,就算關掉這些設定,使用者還是抱怨持續收到一大堆通知;後來發現使用者可以自行設定這些設定值,原來是使用者登入後,就會把系統預設值謄一份到屬於使用者的基本設定上,當然關掉預設值是沒有用的,必須使用者自行更改通知方式才有用,無奈麻瓜就是醬子,很難請他們自己動手改,我只好自己研究系統資料庫內容,將所有使用者設定值改成跟我一樣

以下是例子,紅色須注意。

資料庫為mariadb

1. 取得我們帳號uid
select * from oc_accounts

2. 取消通知
update oc_preferences set configvalue = 0 where  appid='activity' and configkey like 'notify%' and configkey not in  (
select configkey from oc_preferences where userid='帳號uid' and appid='activity' and configkey like 'notify%' and configvalue='1'
)

3. 保留通知
update oc_preferences set configvalue = 1 where  appid='activity' and configkey like 'notify%' and configkey  in  (
select configkey from oc_preferences where userid='帳號uid' and appid='activity' and configkey like 'notify%' and configvalue='1'
)

使用者須自行設定通知

1 ... 3 4 5 6 7 ... 72