Installing NextCloud on Linux, Raspberry Pi 4.

Thực hiện trên Linux, Raspberry Pi 4 có cài sẳn LAMP và đang hoạt động ổn định

cd /home/pi/apps
unzip nextcloud-19.0.3.zip
sudo chown -R www-data:www-data nextcloud
sudo ln -s /home/pi/apps/nextcloud /var/www/html/nextcloud
  • Tạo sẳn 1 thư mục chứa dữ liệu của nextcloud thư mục này trong nó sẽ có thư mục con mà dữ liệu của users sẽ đồng bộ lên, trong ví dụ thư mục đó được đặt tên nextcloud_data.
cd ~
mkdir nextcloud_data
sudo chown -R www-data:www-data nextcloud_data
  • Trước khi có thể chạy và Setup NextCloud lần đầu tiên. Cần dùng phpmyadmin tạo sẳn cho nó 1 database rổng và gán quyền truy cập cho user nào đó: ví dụ nextcloud và user là nextcloud-users sau đó chạy nó ở địa chỉ http://web…/nextcloud/ bắt đầu quá trình setup.
  • Nếu bị giới hạn kích thước files trong quá trình upload cần edit lại cấu hình apache/php
sudo nano /etc/php/7.2/apache2/php.ini

# editing two lines so that their data says
post_max_size = 128M
upload_max_filesize = 128M

# save and close nano and then restart the webserver
sudo service apache2 restart
  • Những bất cập.
    • 1. Thư mục data của NextCloud (nextcloud_data) đã được phân quyền cho www-data cho nên không thể truy cập trực tiếp từ user khác được nữa. Muốn truy cập được cần dùng Bindfs.
    • 2. Khi edit trực tiếp dữ liệu của NextCloud từ phía server mà không thông qua client thì cần phải thực hiện scan thủ công từ phía server để cập nhật những thay đổi và đồng bộ xuống các clients.

Bindfs – Mount files as another user

Today I wanted to mount a directory that belongs to Bob in Alice’s home directory while giving Alice full permissions. This is how I found out about Bindfs. I’ll get straight to what I was trying to do with the hope that this will help someone out there.
To install Bindfs: apt install bindfs
Let’s say we want to mount the directory /home/bob/share which belongs to Bob in Alice’s home under the directory called bobs_share. We’ll create the directory and then use bindfs to mount it. That’s all.
mkdir /home/alice/bobs_share/
bindfs -u alice -g alice /home/bob/share/ /home/alice/bobs_share/

Alice now has full ownership of /home/alice/bobs_share/. However, new files created by Alice will be owned by Alice, visible in both her mount as well as on the source directory, in Bob’s home. We can make it so that files created by Alice belong to bob by adding the “–create-for-user” and “–create-for-group” options.
bindfs -u alice -g alice --create-for-user=bob --create-for-group=bob /home/bob/share/ /home/alice/bobs_share/

You can also use /etc/fstab to mount the directy, here’s the syntax for the options we’ve used above: bindfs#/home/bob/share /home/alice/bobs_share fuse force-user=alice,force-group=alice,create-for-user=bob,create-for-group=bob 0 0

# mount trong terminal ngon lành.
sudo bindfs -u pi -g pi --create-for-user=www-data --create-for-group=www-data /home/pi/nextcloud_data/linh3t/files /home/pi/bindfs/nextcloud/linh3t
# mount trong fstab không hoạt động được mà còn gây lổi không boot được luôn.
# add vao /etc/rc.local để mount lúc khởi động cũng ok.
sudo bindfs -u pi -g pi --create-for-user=www-data --create-for-group=www-data /home/pi/nextcloud_data/linh3t/files /home/pi/bindfs/nextcloud/linh3t

Scan files trên server NextCloud dùng occ.

Khi edit trực tiếp files trên server NextCloud cần phải scan lại để cập nhật sự thay đổi để đồng bộ đến clients.

sudo -u www-data php7.2 /home/pi/apps/nextcloud/occ files:scan -- linh3t

Dùng cron job để lên lịch tự động quét định kỳ. Tạo file bash để add vào cronjob:

cd ~
nano apps/cronjob/scan_nextcloud_server.sh

Nội dung file scan_nextcloud_server.sh

#!/bin/bash
sudo -u www-data php /home/pi/apps/nextcloud/occ files:scan -- linh3t

Thêm quyền thực thi cho file scan_nextcloud_server.sh

chmod +x apps/cronjob/scan_nextcloud_server.sh

Thực hiện quét vào lúc 3am mỗi ngày.

crontab -e
# thêm vào nội dung cho crontab
0 3 * * * sh /home/pi/apps/cronjob/scan_nextcloud_server.sh >/dev/null 2>&1

Mặc định cron gửi email cho người thực thi cron job, nếu bạn muốn tắt chức năng gửi email này đi thì hãy thêm >/dev/null 2>&1 có nghĩa là khi cron thực thi, bất cứ output nào stderr hay stdout đều được gửi đến hố đen /dev/null vì gửi đến hố đen cho nên output cũng là null và cron sẽ không thực thi việc gửi email đi.

Nextcloud Troubleshooting

File is locked during occ scan – how to unlock

Manually disable locking state:

  • put Nextcloud in maintenance mode: edit nextcloud/config/config.php and change this line:
    'maintenance' => true,
  • Empty table oc_file_locks: Use tools such as phpmyadmin or connect directly to your database and run (the default table prefix is oc_, this prefix can be different or even empty):
    DELETE FROM oc_file_locks WHERE 1
  • disable maintenance mode (undo first step).
  • Make sure your cron-jobs run properly (you admin page tells you when cron ran the last time): https://docs.nextcloud.org/server/13/admin_manual/configuration_server/background_jobs_configuration.html 1.7k

Permanent solution (if it happens regularly)

  • on your own server: Use redis for this feature. It is faster and so far no problems have been reported. You can follow the instructions for memory-caching in the docs: https://docs.nextcloud.org/server/13/admin_manual/configuration_server/caching_configuration.html#id4 6.0k
  • Shared hosting (others who can’t install redis): You can disable the file locking, edit your configuration file config/config.php:
    'filelocking.enabled' => false,
    However, disabling is not a good solution. You can run into problems when several processes try to write to a file (especially online editors in the web-interface). In single-user and single-client environments, it’s probably less of a problem.

Leave a Reply

Your email address will not be published. Required fields are marked *