При наличие на толкова много компании които предлагат безплатно тази услуга, трябва да се зачуди човек, защо ни е собствена облачна структура. Отговора е много прост. Всички имат някакви ограничения. Кои в дисковото пространство, кои в трафик към тях. От разнообразието на такива услуги лично ми допада NextCloud. Точно него ще се помъчим да инсталираме и настроим. За пояснение: - потребителя който ще се свързва с базата nextcloud е nextcloud с парола P@ssc0de - администратора на облака ще се казва admin с парола adminpass
За начало да обновим репозиторите:
# apt update # apt full-upgrade
Тъй като тази тема я подхващам доста по-късно спрямо предните инсталации, нормално е да не си спомням какво имам инсталирано. Специално за NextCloud са необходими следните модули: apache2, mariadb-server, libapache2-mod-php, php-curl, php-gd, php-imagick, php-intl, php-json, php-mbstring, php-mysql, php-xml, php-zip. По-пътя на логиката модулите apache2 и mariadb-server ще са налични, защото това са първите модули които се инсталират след чистата инсталация на Debian. Има налични и PHP модули, защото е инсталиран и PHPMyAdmin, но въпроса е "кои са"? Да проверим:
# dpkg -l | grep php ii libapache2-mod-php7.3 ii php-curl 2:7.3+69+0~20190303094804.15+stretch~1.gbp0f7465 all CURL module for PHP [default] ii php-gd 2:7.3+69+0~20190303094804.15+stretch~1.gbp0f7465 all GD module for PHP [default] ii php-intl 2:7.3+69+0~20190303094804.15+stretch~1.gbp0f7465 all Internationalisation module for PHP [default] ii php-mbstring 2:7.3+69+0~20190303094804.15+stretch~1.gbp0f7465 all MBSTRING module for PHP [default] ii php-mysql 2:7.3+69+0~20190303094804.15+stretch~1.gbp0f7465 all MySQL module for PHP [default] ii php-xml 2:7.3+69+0~20190303094804.15+stretch~1.gbp0f7465 all DOM, SimpleXML, WDDX, XML, and XSL module ii php-zip 2:7.3+69+0~20190303094804.15+stretch~1.gbp0f7465 all Zip ii php7.3-curl 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 CURL module for PHP ii php7.3-gd 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 GD module for PHP ii php7.3-intl 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 Internationalisation module for PHP ii php7.3-json 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 JSON module for PHP ii php7.3-mbstring 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 MBSTRING module for PHP ii php7.3-mysql 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 MySQL module for PHP ii php7.3-opcache 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 Zend ii php7.3-xml 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 DOM, SimpleXML, WDDX, XML, and XSL module ii php7.3-zip 7.3.6-1+0~20190531112735.39+stretch~1.gbp6131b7 amd64 Zip module for PHP
Списъка е доста по-дълъг, но е показано само това което ни интересува. Вижда се, че липсва php-imagick. Да го инсталираме:
# apt-get install php-imagick
Време е да създадем база за NextCloud:
# mariadb -u root -p MariaDB [(none)]> CREATE DATABASE nextcloud; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> CREATE USER 'nextcloud'@'localhost' IDENTIFIED BY 'P@ssc0de'; Query OK, 0 rows affected (0.01 sec) MariaDB [(none)]> GRANT ALL PRIVILEGES ON nextcloud . * TO 'nextcloud'@'localhost'; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> quit Bye
Да проверим какво сме създали:
# mariadb -u nextcloud -p Enter password:
За парола въвеждаме P@ssc0de и всичко е наред.
MariaDB [(none)]> quit Bye
В браузъра отваряме сайта https://nextcloud.com/install/#instructions-server. В тази страница има линк Details and download options. Цъкаме върху него. Отварят се три варианта за смъкване: 1. Download the .tar.bz2 or .zip archive. 2. Check package integrity using MD5 (.tar.bz2 / .zip) or SHA256 (.tar.bz2 / .zip) 3. Verify the authenticity via PGP (.tar.bz2 /.zip). The Nextcloud GPG key is here. От точка 1., върху линка .tar.bz2 цъкаме с десния бутон на мишката и избираме Копиране адреса на връзката. Връщаме се към облака.
В терминала пишем:
# wget https://download.nextcloud.com/server/releases/nextcloud-16.0.2.tar.bz2 # ls -l total 60160 .................................................... .................................................... -rw-r--r-- 1 root root 61600732 Jul 4 10:23 nextcloud-16.0.2.tar.bz2
NextCloud е свален, сега да го разархивираме:
# tar -xvf nextcloud-16.0.2.tar.bz2 # ls -l total 60164 .................................................... .................................................... drwxr-xr-x 14 nobody nogroup 4096 Jul 4 10:22 nextcloud -rw-r--r-- 1 root root 61600732 Jul 4 10:23 nextcloud-16.0.2.tar.bz2 # rm nextcloud-16.0.2.tar.bz2
Създадена е директория nextcloud. Целта е, тази директория да я преместим в /home/www/
# mv ./nextcloud /home/www/ # ls -l /home/www/ total 16 drwxr-xr-x 7 root root 4096 Jul 5 00:45 GRSoft drwxr-xr-x 4 root root 4096 Jul 4 18:18 home.tachko.com drwxr-xr-x 4 root root 4096 Jul 4 18:17 home.tlan.net drwxr-xr-x 14 nobody nogroup 4096 Jul 4 10:22 nextcloud
Внимание: не слагайте файлове различни от архива в директорията /home/www/nextcloud. Вътре трябва да са само разархивираните.
Ако разгледаме съдържанието на /home/www/nextcloud/ ще видим, че всички файлове са членове на nobody или
# chown -R www-data:www-data /home/www/nextcloud/* # chown -R www-data:www-data /home/www/nextcloud/.*
Втората команда е заради факта, че в директорията nextcloud има два скрити файла .htaccess и .user.ini, така на практика и те са членове на www-data:www-data. Да направим така, че като напишем в браузъра http://home.tlan.net/cloud да се отваря страницата на нашия облак nextcloud.
# vi /etc/apache2/conf-available/nextcloud.conf Alias /cloud /home/www/nextcloud <Directory /home/www/nextcloud> AllowOverride None Options +Indexes +ExecCGI Order deny,allow Allow from all Require all granted </Directory>
Да активираме промените
# a2enconf nextcloud Enabling conf nextcloud. To activate the new configuration, you need to run: systemctl reload apache2
Да рестартираме Apache, за да влязат промените в сила
# service apache2 restart
Да проверим какво сме направили, като напишем в браузъра http://home.tlan.net/cloud/
И така работи. Сега да настроим самия NextCloud. За Username: admin За Password: adminpass За Директория за данни: /home/wwww/nextcloud/nextcloud-data За Database user: nextcloud За Database pass: P@ssc0de За Database name: nextcloud За Host: localhost И за накрая натискаме бутона Завършване на инсталацията. Автоматично горните условия ни карат да създадем директория
# mkdir /home/www/nextcloud/nextcloud-data # chown www-data:www-data /home/www/nextcloud/nextcloud-data/
Изчаква се достатъчно време и накрая се получава следния резултат:
Натискаме бутона Към Nextcloud
Горе вдясно на страницата има едно зъбно колело натискаме върху него:
Избираме Настройки
В дясната секция избираме Owerview, а в лявата секция ни показва грешките които трябва да изчистим. Първа грешка: • Your data directory and files are probably accessible from the Internet. The .htaccess file is not working. It is strongly recommended that you configure your web server so that the data directory is no longer accessible, or move the data directory outside the web server document root. "Файлът .htaccess не работи. Силно се препоръчва да конфигурирате вашия уеб сървър, така че директорията с данни да не е достъпна повече, или да преместите директорията с данни извън корените на документа на уеб сървъра." За целта:
# vi /etc/apache2/conf-available/nextcloud.conf Alias /cloud /home/www/nextcloud <Directory /home/www/nextcloud> AllowOverride All Options +Indexes +ExecCGI Order deny,allow Allow from all Require all granted </Directory>
Променихме AllowOverride None на AllowOverride All. И ако рефрешнем страницата от браузъра грешката ще изчезне.
# service apache2 restart
Рестартирахме Apache за да влязат промените в сила Следващата грешка е: • The PHP memory limit is below the recommended value of 512MB. Много важен параметър. В зависимот какво желаете, указвате големината на файловете с които боравите. NextCloud фирмата препоръчва да е 512MB големината на файла. Лично аз предпочитам по големи. Пример: трансферирам си някакъв клип който съм снимал на облака. Клипа ми е 1GB примерно, така няма да мога да го кача. За целта слагам големината да е 2GB. Рядко се качват такива големи файлове, пък и големите файлове искат много време за трансфер.
# vi /etc/php/7.3/apache2/php.ini upload_max_filesize = 2000M memory_limit = 2000M post_max_size = 2000M
# service apache2 restart
Наново рестартирахме Apache за да влязат промените в сила. И наново ако рефрешнем страницата в браузра ще видим, че и тази грешка изчезна. Следваща грешка: • MySQL is used as database but does not support 4-byte characters. To be able to handle 4-byte characters (like emojis) without issues in filenames or comments for example it is recommended to enable the 4-byte support in MySQL. For further details read the documentation page about this. MySQL достъпва до базата на NextCloud но не поддържа 4-byte символи.
# mysql -u root -p Enter password: Welcome to the MariaDB monitor. Commands end with ; or \g. Your MariaDB connection id is 347 Server version: 10.1.38-MariaDB-0+deb9u1 Debian 9.8 Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others. Type 'help;' or '\h' for help. Type '\c' to clear the current input statement. MariaDB [(none)]> show variables like 'innodb_file_format'; +-------------------------+-------------+ | Variable_name | Value | +-------------------------+-------------+ | innodb_file_format | Antelope | +-------------------------+-------------+ 1 row in set (0.00 sec)
Формата на InnoDB е Antelope а трябва да е Barracuda. За целта:
MariaDB [(none)]> SET GLOBAL innodb_file_format=Barracuda; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> show variables like 'innodb_file_format'; +-------------------------+--------------+ | Variable_name | Value | +-------------------------+--------------+ | innodb_file_format | Barracuda | +-------------------------+--------------+ 1 row in set (0.00 sec)
Сега вече е както трябва. MySQL трябва да поддържа InnoDB.
MariaDB [(none)]> show variables like 'innodb_file_per_table'; +-----------------------------+-------+ | Variable_name | Value | +-----------------------------+-------+ | innodb_file_per_table | ON | +-----------------------------+-------+ 1 row in set (0.00 sec) MariaDB [(none)]> quit Bye
Редактираме конфигурационния файл на MySQL
# vi /etc/mysql/my.cnf [client-server] # Import all .cnf files from configuration directory !includedir /etc/mysql/conf.d/ !includedir /etc/mysql/mariadb.conf.d/ # Най-отдолу на файла слагаме: [mysqld] innodb_large_prefix=true innodb_file_format=barracuda innodb_file_per_table=1
Рестартираме MySQL сървиса
# systemctl restart mariadb.service
Смяна на символите и съпоставяне в базата данни:
/# mysql -u root -p Enter password: MariaDB [(none)]> ALTER DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci; Query OK, 1 row affected (0.00 sec) MariaDB [(none)]> quit Bye
Следващата стъпка е да активираме mysql.utf8mb4 в config.php на nextcloud. За да се случи това, обаче трябва потребителя с който работим в Debian да е член на групата sudo.
# apt install sudo # apt install usermode # usermod -a -G sudo cccp
В случая потребителя е cccp. За да влезе всичко в сила рестартираме Debian
# reboot
Сега да активираме mysql.utf8mb4. Внимавайте, трябва да сте в Debian като потребител, член на групата sudo, а не като root. В моя случай ще влезна като cccp.
cccp@home:~$ cd /home/www/nextcloud/ cccp@home:/home/www/nextcloud$ sudo -u www-data php occ config:system:set mysql.utf8mb4 --type boolean --value="true" System config value mysql.utf8mb4 set to boolean true cccp@home:/home/www/nextcloud$ sudo -u www-data php occ maintenance:repair cccp@home:/home/www/nextcloud$ sudo service apache2 restart
И ако обновим браузъра ще видим, че и тази грешка е поправена. Следващата е: • The "Strict-Transport-Security" HTTP header is not set to at least "15552000" seconds. For enhanced security, it is recommended to enable HSTS as described in the security tips ↗.. Влезте наново като потребител root.
# vi /etc/apache2/conf-available/nextcloud.conf Alias /nextcloud /home/www/nextcloud <Directory /home/www/nextcloud> AllowOverride All Options +Indexes +ExecCGI Order deny,allow Allow from all Require all granted </Directory> <IfModule mod_headers.c> Header always set Strict-Transport-Security "max-age=15552000; includeSubDomains; preload" </IfModule>
Още е необходимо да е активиран и модула mod_headers в Apache.
# a2enmod headers Enabling module headers.
Рестартираме Apache и проверяваме в браузъра:
# service apache2 restart
Всичко е наред. Следваща грешка: • Your web server is not properly set up to resolve "/.well-known/caldav". Further information can be found in the documentation.
# vi /etc/apache2/mods-available/ssl.conf # Веднага под <IfModule mod_ssl.c> се поставя следното: Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav
Рестартираме Apache и грешката е оправена.
# service apache2 restart
Едно много важно уточнение: Когато дефинирах Allis-ите, вместо /nextcloud, бях оставил само /cloud. След това в: /etc/apache2/mods-available/ssl.conf добавях редовете: Redirect 301 /.well-known/carddav /nextcloud/remote.php/dav Redirect 301 /.well-known/caldav /nextcloud/remote.php/dav Проблема е, че вместо /nextcloud трябваше да е /cloud
Следващия проблем е: • No memory cache has been configured. To enhance performance, please configure a memcache, if available. Further information can be found in the documentation. След преглед на документацията:
# apt install php-apcu # vi /home/www/nextcloud/config/config.php <?php $CONFIG = array ( 'instanceid' => 'ocj94w1yllx5', 'passwordsalt' => 'U4C7p8ClkTOZ8cf2mi4GY5LHpYGXD0', 'secret' => '31JLJxBYapYbSTVEEVmiCaYd9Z8+yKEpNfDu1F7jXOCfEmJs', 'trusted_domains' => array ( 0 => 'home.tlan.net', ), 'datadirectory' => '/home/www/nextcloud/nextcloud-data', 'dbtype' => 'mysql', 'version' => '16.0.2.1', 'overwrite.cli.url' => 'https://home.tlan.net/cloud', 'dbname' => 'nextcloud', 'dbhost' => 'localhost', 'dbport' => '', 'dbtableprefix' => 'oc_', 'dbuser' => 'nextcloud', 'dbpassword' => 'P@ssc0de', 'installed' => true, 'mysql.utf8mb4' => true, 'maintenance' => false, 'memcache.local' => '\OC\Memcache\APCu', ); # service apache2 restart
Обновяваме страницата в браузъра и грешката е оправена. Следващата грешка е: • This instance is missing some recommended PHP modules. For improved performance and better compatibility it is highly recommended to install them. - intl - imagick. Проблема е в това, че няма инсталирани някои модули на PHP. Необходими модули са: php7.3-gd php7.3-json php7.3-mysql php7.3-curl php7.3-mbstring php7.3-intl php-imagick php7.3-xml php7.3-zip. В случая липсват php7.3-intl и php-imagick. Бих препоръчал да се провери кои модули в момента съществуват.
# dpkg -l php*
Всички останали са налице, липсват само гореспоменатите два модула, да ги инсталираме:
# apt install php7.3-intl php-imagick
Рестартираме Apache
# service apache2 restart
Обновяваме страницата в браузъра да проверим за грешки. Всичко е наред. За накрая ни предлага: Проверете сигурността на Nextcloud като заявите сканиране ↗. Цъкаме с мишката върху линка като заявите сканиране. Отваря се следната страница:
Натискаме върху бутона Scan. Изчакваме определено време и в крайна сметка се получава следното:
С една малка забележка:
Това е така защото когато създавахме /etc/apache2/conf-available/nextcloud.conf ползвахме алиаси Alias /nextcloud /home/www/nextcloud. Оправя се ако бяхме създали файл
/home/www/nextcloud$ sudo -u www-data php occ db:convert-filecache-bigint Following columns will be updated: * mounts.storage_id * mounts.root_id * mounts.mount_id This can take up to hours, depending on the number of files in your instance! Continue with the conversion (y/n)? [n] y
Следваща грешка: • The database is missing some indexes. Due to the fact that adding indexes on big tables could take some time they were not added automatically. By running "occ db:add-missing-indices" those missing indexes could be added manually while the instance keeps running. Once the indexes are added queries to those tables are usually much faster. • Missing index "calendarobject_calid_index" in table "oc_calendarobjects_props". • Missing index "schedulobj_principuri_index" in table "oc_schedulingobjects". Поправя се с:
/home/www/nextcloud$ sudo -u www-data php occ db:add-missing-indices Check indices of the share table. Check indices of the filecache table. Check indices of the twofactor_providers table. Check indices of the login_flow_v2 table. Check indices of the whats_new table. Check indices of the cards table. Check indices of the cards_properties table. Check indices of the calendarobjects_props table. Adding calendarobject_calid_index index to the calendarobjects_props table, this can take some time... calendarobjects_props table updated successfully. Check indices of the schedulingobjects table. Adding schedulobj_principuri_index index to the schedulingobjects table, this can take some time... schedulingobjects table updated successfully. /home/www/nextcloud$ sudo service apache2 restart
Сега бих дал много примери, но няма как да се обхване всичко. За целта както и преди ползваме Google!!!