安裝 Nextcloud 並啟用 LDAP 與 NFS 功能

目標

建立一個 Nextcloud,並包含以下功能

  • LDAP 登入
  • 讀寫 NFS 資料
  • 可以同時上傳多個單檔超過 5GB 的檔案

安裝 Nextcloud

先 Git clone Docker 版本的 Nextcloud
https://github.com/nextcloud/docker
使用的範本是 /.examples/docker-compose/insecure/mariadb/fpm
先更新一下 db.env

MYSQL_PASSWORD=PASSWD
MYSQL_DATABASE=nextcloud
MYSQL_USER=nextcloud

以及 docker-compose.yml 的 MYSQL_ROOT_PASSWORD

使用 root 執行 PHP-FPM

接著由於要掛載 NFS 資料,若掛載的是已經存有很多檔案和各種權限的資料,不想遇到權限不足的問題,可以用 root 身份執行 Nextcloud,多人開放環境可自行決定是否設定
docker-compose.yml app 區段加入

privileged: true
command: /entrypoint.sh php-fpm -R

接著啟動所有 Container

docker-compose up -d

進入到 app container 修改檔案

docker exec -it fpm_app_1 sh

打開 /usr/local/etc/php-fpm.d/www.conf,將下列字串的 www-data 改成 root

user = root
group = root

回到 Host,restart app

docker-compose restart app

Nextcloud 啟用外部儲存空間

先到 Nextcloud 的應用程式啟用 External storage support
接著進入 app container,安裝以下套件

docker exec -it fpm_app_1 sh
apk add --no-cache procps ffmpeg imagemagick supervisor $PHPIZE_DEPS samba-dev samba-client nfs-utils
pecl install smbclient
docker-php-ext-enable smbclient
apk add --no-cache nfs-utils cifs-utils

NFS

測試 mount

mount -t nfs [NFS_IP]:/vol/ML_Data /mnt/ML_Data nfs -o nolock
ls -al /mnt/ML_Data
umount /mnt/ML_Data

更新 /etc/fstab

[NFS_IP]:/vol/ML_Data        /mnt/ML_Data       nfs     defaults       0       0

defaults表示 rw,suid,dev,exec,auto,nouser,async
可以修改 /entrypoint.sh 設定開機自動掛載

mount -a

設定 Nextcloud

接下來就到後台的外部儲存空間,新增一個本機的空間,路徑就是對應前面設定在 /etc/fstab 的路徑

LDAP

進入 app container,安裝以下套件

docker exec -it fpm_app_1 sh
apk add ldb-dev libldap openldap-dev
docker-php-ext-install ldap
docker-php-ext-enable ldap

到 Nextcloud 設定 LDAP,主要就是輸入正確的 User DN 和密碼,Base DN 就可以自動偵測帶出來
UserDN: cn=mowd,cn=Users,dc=example,dc=com
Base DN: dc=example,dc=com

加大單檔上傳限制

進入 app container,安裝以下套件

docker exec -it fpm_app_1 sh

修改 /var/www/.user.ini,加入以下幾行

upload_max_filesize=20G
post_max_size=20G
max_input_time 3600
max_execution_time 3600
upload_tmp_dir=/tmp

進入 web container

docker exec -it fpm_web_1 sh

修改 /etc/nginx/nginx.conf,修改以下設定

client_max_body_size 20G;
fastcgi_request_buffering off;

並新增

fastcgi_connect_timeout 60;
fastcgi_send_timeout 1800;
fastcgi_read_timeout 1800;

restart app and web

docker-compose restart app
docker-compose restart web

其他疑難雜症

MariaDB 障礙排除

Error

[ERROR] mysqld: Aria recovery failed. Please run aria_chk -r on all Aria tables and delete all aria_log.######## files
[ERROR] Plugin 'Aria' init function returned error.
[ERROR] Plugin 'Aria' registration as a STORAGE ENGINE failed.
....
[ERROR] Could not open mysql.plugin table. Some plugins may be not loaded
[ERROR] Failed to initialize plugins.
[ERROR] Aborting

修復方法

docker-compose run db bash -c 'aria_chk -r /var/lib/mysql/**/*'
docker-compose run db bash -c 'rm /var/lib/mysql/aria_log.*'

Internal Server Error

先確定 Redis 是否有在執行,若正常,則可嘗試在 app container 執行以下指令

sudo -u www-data php /var/www/occ maintenance:mode --on
chown -R www-data:www-data /var/www/
chmod -R 770 /var/www/
sudo -u www-data php /var/www/occ maintenance:repair
sudo -u www-data php /var/www/occ db:add-missing-columns
sudo -u www-data php /var/www/occ db:add-missing-indices
sudo -u www-data php /var/www/occ maintenance:update:htaccess
sudo -u www-data php /var/www/occ maintenance:mode --off

最後再 restart app container

Error when assembling chunks, status code 504

確認有照「加大單檔上傳限制」這段進行,以及 /tmp 必須要足夠大,必要的話可以在上傳時觀察

watch -n1 ls -alh /tmp

以及

watch -n1 df -h

Unable to write to stream

確定磁碟空間是否滿了

Nextcloud All In One

後來才發現有這個 All In One 的 Repository,應該可以少裝很多需要手動安裝的東西,未來可以試試看
https://github.com/nextcloud/all-in-one

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *