После новости о том, что Dropbox вводит ограничение на 3 устройства – я таки созрел для установки NextCloud.
Огорчил не сам лимит – у меня три устройства и используются, плюс оно повлияет только на новых пользователей (старые будут ограничены их текущим количеством устройств, а вот за дополнительные – придётся платить), сколько вообще введение подобных ограничений.
Когда компании начинают менять правила игры, потому что им захотелось больше денег – в этом приятного мало.
Кроме того – спокойнее хранить данные у себя, чем доверять их третьим лицам.
Потому – сейчас выполним быструю установку и настройку NexCloud вручную – просто, что бы посмотреть на то, как оно всё будет работать, а в следующий раз – внесём его в имеющуюся автоматизацию для RTFM (для примера – см. Prometheus: мониторинг для RTFM — Grafana, Loki и promtail) – NextCloud будет располагаться на том же сервере, в отдельном виртуалхосте и использовать отдельный Digital Ocean Block Storage (aka Volumes).
Digital Ocean имеет так же Object Storage, налог AWS S3, и, в принципе, это было бы более подходящим решением, но это дополнительные 5 уе. Кроме того – со Spaces в DO я ещё не работал, и пока тратить время на знакомство с ними не хочу.
Документация по хранилищам Digital Ocean – тут>>>.
В любом случае – потом можно будет просто перенести данные.
Кстати – никто не мешает держать сервер в DO, а для хранения данных – подключать к нему AWS S3.
Официальная документация NexСloud доступна тут>>>.
Содержание
NexСloud vs ownCloud
NextCloud (появился в 2016) является форком ownCloud (появился в 2010).
Хорошие сравнения можно почитать тут:
- Nextcloud vs ownCloud – The Whole Story
- Owncloud vs NextCloud? Whats best for a dropbox alternative?
- Nextcloud vs. OwnCloud vs Seafile: The Best Self-Hosted File-Syncing Service
Диски Digital Ocean дроплета
Запускаем виртуальную машину, и подключаем к ней дополнительный Volume.
Тут детально описывать процесс не буду, см. пост DigitalOcean: знакомство — Droplet, Floating IP, Firewall.
При создании Volume выбираем тип Manually Format & Mount:
Подключаемся:
[simterm]
$ ssh [email protected] -i do-rtfm-dev-droplet
[/simterm]
Проверяем диски:
[simterm]
root@nextcloud-testing:~# lsblk NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1G 0 disk vda 254:0 0 25G 0 disk └─vda1 254:1 0 25G 0 part / vdb 254:16 0 434K 1 disk
[/simterm]
/dev/sda
– диск для NextCloud.
Создаём новый каталог:
[simterm]
root@nextcloud-testing:~# mkdir -p /data/nextcloud
[/simterm]
Создаём раздел на /dev/sda
:
[simterm]
root@nextcloud-testing:~# fdisk /dev/sda ... Device does not contain a recognized partition table. Created a new DOS disklabel with disk identifier 0xc5322339. Command (m for help): n Partition type p primary (0 primary, 0 extended, 4 free) e extended (container for logical partitions) Select (default p): Using default response p. Partition number (1-4, default 1): First sector (2048-2097151, default 2048): Last sector, +sectors or +size{K,M,G,T,P} (2048-2097151, default 2097151): Created a new partition 1 of type 'Linux' and of size 1023 MiB. Command (m for help): w The partition table has been altered. Calling ioctl() to re-read partition table. Syncing disks.
[/simterm]
Форматируем раздел /dev/sda1
:
[simterm]
root@nextcloud-testing:~# mkfs.ext4 /dev/sda1
[/simterm]
Монтируем его в /data/nextcloud/
:
[simterm]
root@nextcloud-testing:~# mount /dev/sda1 /data/nextcloud/
[/simterm]
Получаем UUID раздела:
[simterm]
root@nextcloud-testing:~# blkid /dev/sda1 /dev/sda1: UUID="37e8697e-e51e-4a91-83d5-79efe61fe91b" TYPE="ext4" PARTUUID="c5322339-01"
[/simterm]
Добавляем в fstab
с опцией nofail
:
UUID="37e8697e-e51e-4a91-83d5-79efe61fe91b" /data/nextcloud/ ext4 nofail 0 0
Отмонтируем:
[simterm]
root@nextcloud-testing:~# umount /data/nextcloud
[/simterm]
И монтируем через /etc/fstab
, что бы проверить, что всё корректно записано:
[simterm]
root@nextcloud-testing:~# mount -a root@nextcloud-testing:~# lsblk /dev/sda NAME MAJ:MIN RM SIZE RO TYPE MOUNTPOINT sda 8:0 0 1G 0 disk └─sda1 8:1 0 1023M 0 part /data/nextcloud
[/simterm]
С этим всё.
Можно ещё перезагрузить машину, что бы проверить, что всё работает.
NGINX и PHP
Устанавливаем NGINX:
[simterm]
root@nextcloud-testing:~# apt update && apt -y upgrade && apt -y install nginx
[/simterm]
Устанавливаем PHP и PHP-FPM:
[simterm]
root@nextcloud-testing:~# apt install php php-xml php-curl php-gd php-zip php-mysql php-mbstring php-fpm wget unzip -y
[/simterm]
Создаём конфиг виртуалхоста.
Тут для примера будем использовать nextcloud-testing.setevoy.org.ua.
Сейчас всё делаем без TLS, конфиг будет выглядеть так:
server { listen 80; listen [::]:80; server_name nextcloud-testing.setevoy.org.ua; root /var/www/html/nextcloud-testing.setevoy.org.ua; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; location / { rewrite ^ /index.php$uri; } location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)/ { deny all; } location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console) { deny all; } location ~ ^/(?:index|remote|public|cron|core/ajax/update|status|ocs/v[12]|updater/.+|ocs-provider/.+)\.php(?:$|/) { fastcgi_split_path_info ^(.+\.php)(/.*)$; include fastcgi_params; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param PATH_INFO $fastcgi_path_info; #fastcgi_param HTTPS on; #Avoid sending the security headers twice fastcgi_param modHeadersAvailable true; fastcgi_param front_controller_active true; fastcgi_pass unix:/run/php/php7.0-fpm.sock; fastcgi_intercept_errors on; fastcgi_request_buffering off; } location ~ ^/(?:updater|ocs-provider)(?:$|/) { try_files $uri/ =404; index index.php; } location ~ \.(?:css|js|woff|svg|gif)$ { try_files $uri /index.php$uri$is_args$args; add_header Cache-Control "public, max-age=15778463"; add_header X-Content-Type-Options nosniff; add_header X-XSS-Protection "1; mode=block"; add_header X-Robots-Tag none; add_header X-Download-Options noopen; add_header X-Permitted-Cross-Domain-Policies none; } location ~ \.(?:png|html|ttf|ico|jpg|jpeg)$ { try_files $uri /index.php$uri$is_args$args; access_log off; } }
Документация по настройке NGINX для NextCloud смотрите тут>>>.
UPD: сетапил по этому гайду через полгода, наткнулся на fastcgi_pass unix:/run/php/php7.0-fpm.sock
– проверьте вашу текущую версию РНР, т.к. путь к сокету будет другим, например /run/php/php7.3-fpm.sock
Проверяем, перезапускаем:
[simterm]
root@nextcloud-testing:~# nginx -t && service nginx reload nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
[/simterm]
Создаём для теста файл с phpinfo()
:
[simterm]
root@nextcloud-testing:~# mkdir /var/www/html/nextcloud-testing.setevoy.org.ua/ root@nextcloud-testing:~# echo "<?php phpinfo(); ?>" > /var/www/html/nextcloud-testing.setevoy.org.ua/phptest.php
[/simterm]
Проверяем его:
Меняем владельца каталога:
[simterm]
root@nextcloud-testing:~# chown -R www-data:www-data /var/www/html/
[/simterm]
И каталога /data/nextcloud
:
[simterm]
root@nextcloud-testing:~# chown -R www-data:www-data /data/nextcloud
[/simterm]
MariaDB
Устанавливаем MariaDB сервер:
[simterm]
root@nextcloud-testing:~# apt install -y mariadb-server
[/simterm]
Т.к. это тестовая установка – то можно пропустить шаг, но на реальном сервере, если делается с нуля – выполняем mysql_secure_installation
:
[simterm]
root@nextcloud-testing:~# mysql_secure_installation
[/simterm]
Пока – просто подключаемся, создаём базу для NextCloud – тут он будет хранить свои настройки, пользователей и т.д:
[simterm]
root@nextcloud-testing:~# mysql ... MariaDB [(none)]>
[/simterm]
Создаём базу:
[simterm]
MariaDB [(none)]> create database nextcloud; Query OK, 1 row affected (0.00 sec)
[/simterm]
Пользователя и его права на эту базу:
[simterm]
MariaDB [(none)]> grant all privileges on nextcloud.* to 'nextcloud'@'localhost' identified by 'password'; Query OK, 0 rows affected (0.00 sec)
[/simterm]
Выходим, проверяем:
[simterm]
root@nextcloud-testing:~# mysql -u nextcloud -ppassword -e 'show databases' +--------------------+ | Database | +--------------------+ | information_schema | | nextcloud | +--------------------+
[/simterm]
Установка NextCloud
Загружаем инсталятор:
[simterm]
root@nextcloud-testing:~# cd /var/www/html/nextcloud-testing.setevoy.org.ua/ root@nextcloud-testing:/var/www/html/nextcloud-testing.setevoy.org.ua# wget https://download.nextcloud.com/server/installer/setup-nextcloud.php --2019-03-17 12:36:14-- https://download.nextcloud.com/server/installer/setup-nextcloud.php ... 2019-03-17 12:36:14 (4.90 MB/s) - ‘setup-nextcloud.php’ saved [148203/148203]
[/simterm]
Открываем файл setup-nextcloud.php
в браузере:
Начинаем установку – тут задаём точку, что бы установить в текущий каталог:
Проверяем файлы:
[simterm]
root@nextcloud-testing:/var/www/html/nextcloud-testing.setevoy.org.ua# ls -l total 444 drwxr-xr-x 32 www-data www-data 4096 Mar 17 12:41 3rdparty drwxr-xr-x 38 www-data www-data 4096 Mar 17 12:41 apps -rw-r--r-- 1 www-data www-data 12063 Mar 17 12:41 AUTHORS ... drwxr-xr-x 2 www-data www-data 4096 Mar 17 12:41 updater -rw-r--r-- 1 www-data www-data 362 Mar 17 12:41 version.php
[/simterm]
Создаём первого пользователя, указываем каталог для хранения данных (/data/nextcloud
) и настройки подключения к базе данных:
Готово:
Клиент NextCloud на Arch Linux
Устанавливаем клиент:
[simterm]
$ sudo pacman -S nextcloud-client
[/simterm]
Или альтернативная из AUR (разницы не заметил):
[simterm]
$ yay -S nextcloud-client-git
[/simterm]
Запускаем – nextcloud
:
Подключаемся – Log in:
Настраиваем параметры синхронизации:
Жмём Connect:
И открываем каталог Nextcloud
в домашней директории:
Он же в WebUI:
Мобильный клиент NextCloud
На Android устанавливаем из Google Play:
И далее те же шаги – авторизуемся, попадаем в каталог с данными:
Календарь и прочие возможности мне не нужны будут – только синхронизация данных.
Данные на сервере будут в каталоге /data/nextcloud/%USERNAME%/files
:
[simterm]
root@nextcloud-testing:~# find /data/ -name Nextcloud.png /data/nextcloud/admin/files/Nextcloud.png
[/simterm]
Готово.