在 Nextcloud 中讓 Redis 運作的奮鬥
您好,我是無能。
在 Ubuntu 20.04 上設定 Nextcloud21.0.1+Nginx+PHP+MariaDB+Redis
我按照之前導入 Nextcloud 時也參考過的這篇文章進行操作,但是在我的環境下 Redis 無法正常運作。
即使不運作也能正常使用,所以不做也沒關係,但是...
我一直很困惑,所以這是解決篇。
順帶一提,因為我在 Nginx 中設定了代理快取,所以我想知道兩者有什麼不同?於是我請 ChatGPT 幫我解釋。點擊下面的按鈕即可查看。
#myText { display: none; } #toggleButton:checked ~ #myText { display: block; }
顯示說明
Nginx 的代理快取內建於網頁伺服器(Nginx)本身。
它作為反向代理運作,快取對應用程式伺服器的請求並返回響應。
主要用於快取網頁內容(如 HTML、圖片、CSS、JavaScript 等)。
它加速靜態檔案的傳遞,並減輕伺服器的負載。
Nginx 的代理快取可以使用 Nginx 的設定檔輕鬆管理和控制。
您可以設定快取的過期時間、大小、快取目標 URL 等。
Nginx 的代理快取在單一 Nginx 伺服器內運作,為了實現可擴展性和高可用性,需要 Nginx 的叢集或複製等技術。
它在磁碟上儲存臨時快取檔案,但不提供長期資料持久性或耐用性的功能。
Redis 是一個獨立的資料庫和快取平台。
它在另一個伺服器上執行,應用程式連接到 Redis 讀取和寫入快取資料。
它是一個通用的快取平台,可以快取各種資料。
可快取的資料類型包括字串、列表、集合、有序集合、雜湊等。
Redis 直接由程式控制和管理。
使用 Redis 命令來操作快取資料,例如設定、取得、刪除資料和設定過期時間等。
問題
首先,Redis 根本沒有運作。
最終安裝的套件
Redis , Redis-server , Redis-tools , php-fpm
當我嘗試啟動 Redis 時
sudo service redis-server start
出現的錯誤
錯誤 1
Reading the configuration file, at line 1
>>> 'logfile "/var/log/redis/redis.log"'
Can't open the log file: No such file or directory
解決:被告知無法存取在 redis.conf 中設定的日誌!
即使不指定 logfile,它似乎也會自動建立,所以我將其設定為空字串 `""`。如果真的需要,設定日誌、權限和許可後應該就能正常運作。
錯誤 2
# Opening port: bind: Address already in use
解決:被告知該埠已被使用!
在 redis.conf 中初始設定的埠是 6379。不知為何,在 Devuan (OpenRC) 中,即使執行 `sudo service redis-server stop` 也會出現錯誤且無法停止。因此,為了確認是哪個程序在使用,我輸入了以下指令。
root@hoge:~# lsof -i :6379
如果後台有 Redis 進程在運行,那就對了。確認 PID 並終止它。
root@hoge:~# kill -9 <PID>
之後應該就能正常啟動了。
錯誤 3
*** FATAL CONFIG FILE ERROR ***
Reading the configuration file, at line 135
>>> 'slave-serve-stale-data yes'
Bad directive or wrong number of arguments
解決:我發現這種錯誤通常是由於 Redis 版本與 redis.conf 設定檔中的語法版本不符所引起的。
從 Redis 官網選擇與您版本相符的設定檔,然後全部複製貼上吧。
錯誤 4
Failed opening the RDB file dump.rdb (in server root dir /) for saving: Permission denied
6232:M 07 Jul 2023 03:56:39.182 # Background saving error
解決:被告知無法開啟 dump.rdb 檔案。
類似的情況是,如果存在舊的 RDB 檔案,Redis 在啟動後可能會中途崩潰。我最初以為是記憶體問題,但不是。
這發生在 Redis 啟動後,我更改了 redis.conf 中快取目標資料夾 `Dir */~` 的設定時。
即使更改了快取目錄,它似乎仍然會嘗試讀取舊的,所以強制刪除它吧。我的檔案在 `/var/lib/redis/dump.rdb`。
sudo rm /var/lib/redis/dump.rdb
這樣 Redis 方面的問題就解決了。
Nextcloud 方面
root@hoge:~# sudo -u www-data php /var/www/html/nextcloud/occ maintenance:update:htaccess
更新 htaccess 時執行的操作。
RedisException: Connection refused in /var/www/html/nextcloud/lib/private/RedisFactory.php:137
~~~~~
解決:如果之後出現大量帶有檔案名的錯誤,那表示 Redis 根本沒有正常運作,或者 Nextcloud 方面的設定有誤,導致無法連接 Redis。
主要檢查 Redis 和 Nextcloud 的 php.config。
我記得還有其他問題,但大概就是這些了。
這樣一來,即使將來需要處理 Redis 也能安心了。
話說,如果疊加記憶體快取,速度反而會變慢嗎?我這麼想,但實際情況如何呢?快到一定程度後,瓶頸似乎會變成通訊中的伺服器或終端設備的響應速度。
還有很多未探索的領域,我很期待。
我已經筋疲力盡了。
那麼,再見。