在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

Nextcloud 34.0.2 引入了捆綁的 Redis 相容KeyValueCache後端,因此目前版本的 Nextcloud 無需安裝 PHP 的 Redis 擴充功能即可使用 Redis。在單一 Ubuntu 24.04 伺服器上,使用 APCu 作為快速本地緩存,並使用 Redis 作為分散式快取和事務性檔案鎖定,兩者透過 Unix 套接字連接。這樣可以將 Redis 置於網路之外,並為 Nextcloud 提供一個可在 PHP 請求之間共用的快取。

首先選擇合適的 Redis 後端。

目前的 Nextcloud 35 管理手冊記錄了兩種 Redis 路徑。對於 Nextcloud 34.0.2 或更高版本,建議KeyValueCache使用 Nextcloud 自帶的 Predis;您只需安裝 Redis 伺服器並進行設置memcache.kvstore,無需其他配置php-redis。較舊的 Nextcloud 版本使用 PhpRedis 擴充功能和不同的config.php配置區塊。使用 `npm run dev` 指令檢查您的版本sudo -u www-data php /var/www/nextcloud/occ status,如果您的 Redis 安裝位於其他位置,請取代對應的路徑。

本指南假設 Nextcloud 和 Redis 運行在同一台 Ubuntu 主機上,Web 伺服器運行在 `<path>` www-data,並且您直接管理 PHP 和 Redis。如果您是透過 Snap、AIO、Docker 或其他裝置安裝的 Nextcloud,請遵循該軟體套件的服務和檔案系統約定,而不是盲目地執行主機級命令。 APCu 在本地快取方面比 Redis 更快,而 Redis 更適合分散式快取和檔案鎖。請參閱Nextcloud 記憶體快取文件。

安裝 Redis 和 APCu

更新Ubuntu的軟體包索引,安裝Redis伺服器和APCu PHP模組,並啟用Redis開機啟動:

sudo apt update
sudo apt install redis-server php-apcu
sudo systemctl enable --now redis-server
Ubuntu 終端機顯示 apt 更新並安裝 redis-server 和 php-apcu。
在編輯任一設定檔之前,請先安裝 Redis 伺服器和 APCu 軟體包。

在 Ubuntu 24.04 上,預設的 PHP 版本是 8.3,這php-apcu是發行版軟體套件的名稱。 Redis 是一個獨立的服務;APCu 由 PHP 載入。安裝 APCu 後,請重新啟動 PHP 進程,以便以 Web 為導向的 PHP 進程載入模組。如果您使用 PHP-FPM,通常需要重新啟動php8.3-fpm;如果 Apache 使用 mod_php,則需要重新啟動apache2。重新啟動前請檢查您的活動服務名稱。

將 Redis 部署在伺服器本地

對於這種單主機配置,請使用 Unix 套接字並關閉 Redis 的 TCP 監聽器。編輯設定檔/etc/redis/redis.conf。更新現有的活動指令,而不是保留多個衝突的副本,然後設定:

port 0
unixsocket /run/redis/redis-server.sock
unixsocketperm 770
Redis 設定編輯器顯示 TCP 已停用,且 Unix 套接字路徑的模式為 770。
在 Redis 和 Nextcloud 中使用相同的套接字路徑,並將存取權限限制在 Redis 使用者群組。

port 0停用 TCP 連接埠;Redis 改為透過套接字路徑監聽。權限模式770允許 Redis 擁有者和使用者群組存取套接字,同時拒絕其他本機使用者存取。將 Web 伺服器帳戶新增至 Redis 使用者群組:

sudo usermod -aG redis www-data
sudo systemctl restart redis-server

變更群組成員關係後,請重新啟動 PHP-FPM 服務或 Apache,因為執行中的進程會保留其舊的群組清單。請使用實際執行 Nextcloud PHP 的服務。 Redis 文件建議限制對受信任用戶端的存取;使用本機套接字可以避免在面向網際網路的介面上暴露快取連接埠。請參閱Redis 安全指南。

在套接字上指向 Nextcloud

備份文件config/config.php,然後將這些條目新增至現有的 PHP 設定陣列。不要替換文件的其餘部分。使用 Nextcloud 安裝所在的路徑。

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\KeyValueCache',
'memcache.locking' => '\OC\Memcache\KeyValueCache',
'memcache.kvstore' => [
    'server' => [
        'host' => '/run/redis/redis-server.sock',
    ],
],
Nextcloud config.php 編輯器顯示使用 Redis 套接字的 APCu 本機快取和 KeyValueCache 條目。
將 APCu 部署在本機,並在 config.php 中設定 Redis 快取後端和套接字主機。

主機路徑開頭的斜線告訴 Nextcloud 的 KeyValueCache 使用 Unix 套接字,因此無需設定 TCP 連接埠或協定。 Redis 同時提供了這兩種方式memcache.distributed;memcache.locking後者將事務性檔案鎖定從資料庫移開。memcache.local使用 APCu 可以實現更低延遲的本地快取存取。具體的設定項目和套接字選項請參閱 Nextcloud 的KeyValueCache 和 Unix 套接字說明以及事務性檔案鎖定指南。

驗證連線並排查權限問題

首先確認 Redis 服務已啟動且套接字有回應:

sudo systemctl status redis-server
redis-cli -s /run/redis/redis-server.sock ping
Ubuntu 終端運行 redis-cli 連接到 Nextcloud Redis 套接字,並顯示 PONG。
PONG 回應確認 Redis 接受透過已設定套接字建立的本機連線。

第二個命令的預期回應是PONG。然後登入 Nextcloud 並開啟管理設定概覽。確認本機快取警告已消失,並檢查 Nextcloud 日誌中是否仍存在 Redis 或快取警告。您也可以執行以下sudo -u www-data php /var/www/nextcloud/occ status命令來確認實例是否仍在載入;此命令檢查的是 Nextcloud 的可用性,而不是快取本身。

如果 Redis 報告「權限被拒絕」或 Nextcloud 無法連接,請檢查套接字是否存在、是否www-data屬於指定redis群組,以及套接字的群組和模式是否允許存取。更改組成員關係後,請重新啟動 Redis 和 PHP 處理程序。如果 Redis 無法建立套接字,請檢查配置路徑中是否有拼字錯誤sudo journalctl -u redis-server -n 50。切勿透過將 Redis 開放到公共網路來解決套接字權限問題。

舊版 Nextcloud:請改用 PhpRedis

如果您的 Nextcloud 版本低於 34.0.2,請安裝與 Nextcloud 運行環境的 PHP 版本相符的 PHP Redis 擴充。在標準的 Ubuntu 24.04 PHP 8.3 系統中,該軟體包為 `<package_name>` php-redis;Ubuntu 將其列為 PHP 8.3 Redis 擴充功能。安裝完成後,請重新啟動活動的 PHP 處理程序。在 `<config_name>` 檔案中config.php,請使用舊版 Redis 類別和連接區塊,而不是上述的 `KeyValueCache` 條目:

'memcache.local' => '\OC\Memcache\APCu',
'memcache.distributed' => '\OC\Memcache\Redis',
'memcache.locking' => '\OC\Memcache\Redis',
'redis' => [
    'host' => '/run/redis/redis-server.sock',
    'port' => 0,
],

Ubuntu 的Noble php-redis 軟體包清單確認了軟體包映射關係。請勿同時配置兩個後端。儲存符合的配置後,請重複執行套接字 ping 和 Nextcloud 管理概覽檢查。

留下評論

設定 Nextcloud 的公共 URL,以便它可以存取自身。

透過設定其規範 URL 並從伺服器本身檢查 DNS、HTTPS 和反向代理路由,修復 Nextcloud 缺少出站位址警告的問題。

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

在 Ubuntu 24.04 上設定 Nextcloud Redis 快取

透過本機 Unix 套接字配置 APCu 和 Redis,以實現 Nextcloud 快取和檔案鎖定,並提供目前和舊版 Nextcloud 的步驟。

使用 Systemd 定時器自動執行 Nextcloud Cron

檢查 Nextcloud 的 cron 模式,修復其 systemd 服務和計時器,並驗證後台作業在啟動後以及每隔五分鐘運行一次。

使用 Redis 清除 Nextcloud 的檔案鎖定警告

啟用可靠的 Nextcloud 檔案鎖定,選擇適當的 Redis 或 Valkey 後端,並驗證警告是否清除,同時避免並發檔案變更的風險。

如何才能獲得 Nextcloud A+ 安全評級

如何才能獲得 Nextcloud A+ 安全評級

使用最新更新、HTTPS 和 HSTS、精確的反向代理信任以及針對公共伺服器的檢查,修復 Nextcloud 掃描中常見的錯誤。

啟用 Nextcloud 伺服器端加密,並評估其影響

為需要加密的儲存配置 Nextcloud SSE,保護加密金鑰,並在加密現有文件之前測量傳輸和 CPU 影響。

將 Elasticsearch 全文搜尋功能新增至 Nextcloud

將 Nextcloud 的檔案搜尋連接到 Elasticsearch,索引文件內容,並選擇適合您的伺服器和安全需求的設定。

為 Nextcloud 已刪除檔案設定可靠的過期策略

為 Nextcloud 已刪除檔案設定可靠的過期策略

配置 Nextcloud 在規定的保留期後刪除已刪除的文件,可靠地安排後台作業,並避免執行清除所有使用者回收站的命令。

清除 Nextcloud 缺少資料庫索引警告

清除 Nextcloud 缺少資料庫索引警告

安全地執行 Nextcloud 的 OCC 修復程序,預覽資料庫更改,並檢查警告仍然存在的原因。

將 Nextcloud 的 Web 上傳限制提高到 2 GB 以上

將 Nextcloud 的 Web 上傳限制提高到 2 GB 以上

透過調整 PHP、Nginx 或 Apache、暫存和逾時設置,讓 Nextcloud 瀏覽器上傳更大的文件,並驗證是哪個限制阻止了文件上傳。