Это старая версия документа!
Содержание
Статья не закончена!
Дата написания: июнь 2018 г.
Автор: Graf
Сервер облачного хранилища на базе Nextcloud |
---|
Установка
Локальный IP-адрес сервера куда всё устанавливаем и где настраиваем - 192.168.10.217
Внешний IP-адрес - 77.77.77.77 (Вымышленный. Придуманный, только лишь, в качестве примера.)
Доменное имя - my-cloud.ru (Вымышленное. Придуманное, только лишь, в качестве примера.)
Nextcloud версии 13.0.2
Согласно системным требованиям рекомендуется:
- 512 MB ОЗУ
- Red Hat Enterprise Linux 7 или Ubuntu 16.04 LTS
- MySQL/MariaDB
- Apache 2.4 с mod_php
- PHP 7+
По поводу п.1 - на виртуалке с 8 GB ОЗУ и CPU c 2 ядрами, одновременно 8 активных пользователей, с различных устройств, утверждали, что никаких тормозов не заметили, адекватно оценивая свою скорость выхода в Интернет. Правда, приличия ради, надо сказать, что тормоза всё же были выявлены при копировании(перемещении, удалении и т.д.) большого количества файлов мелких размеров, если облако подключено как сетевой ресурс (об этом ниже по статье). Но, думаю, это проблема не сервера, а реализации WebDAV в конкретной ОС.
По поводу п.2 - У нас система будет круче! :) А именно - Slackware Linux 14.2 64-bit без DE и всем, что с ними связанно. После обновления всех доступных пакетов, посредством slackpkg, с ядром 4.4.132.
п.3 и п.4 - в системе уже установлены, просто настроим их.
По поводу п.5 - В Slackware Linux 14.2 установлен PHP версии 5.6, с которой текущая версия Nextcloud, будет работать. Но при запуске выдаст предупреждение о том, что текущая версия Nextcloud является последней, которая поддерживает PHP 5.6 и рекомендует обновить версию PHP до версии 7.0+, для возможности перехода на Nextcloud 14.
Поэтому, первым делом, обновим версию PHP до 7+.
PHP 7
Последнюю версию PHP можно посмотреть на http://php.net/downloads.php и скачать её с ближайшего зеркала.
Для автоматизации сборки пакета, я написал скрипт который скачает всё необходимое и запустить сборку пакета в каталоге со скриптом.
Назовём скрипт ./build.php7
#!/bin/bash # Версия alpine AV="2.21" # Версия php PHPV="7.2.6" # Скачиваем php.SlackBuild и причитающееся wget -r -nd -np -R index*,php-5* \ -e robots=off https://mirror.slackbuilds.org/slackware/slackware64-14.2/source/n/php/ # Скачиваем последнюю версию php wget -O php-$PHPV.tar.xz http://pl1.php.net/get/php-$PHPV.tar.xz/from/this/mirror # Для сборки php нужен пакет alpine # Скачиваем alpine.Slackbuild и причитающееся wget -r -nd -np -R index*,alpine-2* \ -e robots=off https://mirror.slackbuilds.org/slackware/slackware64-14.2/source/n/alpine/ -P ./alpine # Скачиваем последнюю версию alpine wget http://alpine.x10host.com/alpine/release/src/alpine-$AV.tar.xz -P ./alpine # В php.Slackbuild меняем версию alpine c 2.20 на последнюю и правим путь к исходникам. sed -i \ -e "s/ALPINE=2.20/ALPINE=$AV/" \ -e 's:CWD/../alpine:CWD/alpine:' ./php.SlackBuild # В alpine.Slackbuild меняем версию c 2.20 на последнюю sed -i "s/VERSION:-2.20/VERSION:-$AV/" ./alpine/alpine.SlackBuild # Распаковываем diff по man-страницам gzip -d ./alpine/alpine.manpage.diff.gz # В новых версия путь к man-страницам поменялся, исправляем. sed -i 's:doc/alpine.1:doc/man1/alpine.1:' ./alpine/alpine.manpage.diff # Запаковываем обратно gzip ./alpine/alpine.manpage.diff # Вытаскиваем из архива файлы php.ini-development и php-fpm.conf.in в текущий. tar -xpvf ./php-$PHPV.tar.xz php-$PHPV/php.ini-development php-$PHPV/sapi/fpm/php-fpm.conf.in # Переходим в каталог php-версия. cd ./php-$PHPV ############# работаем с php.ini-development ############ # Предварительно скопировав файл ./php.ini-developmentс расширением orig, # убираем знак комментария с параметра session.save_path с указанием пути, sed -i'.orig' \ 's:;session.save_path = \"/tmp\":session.save_path = \"/var/lib/php\":' \ ./php.ini-development # Добавляем необходимые extension в файл ./php.ini-development начиная с 908 строки. sed -i '908a\extension=pspell \ extension=bcmath \ extension=bz2 \ extension=calendar \ extension=ctype \ extension=curl \ extension=dba \ extension=dom \ extension=enchant \ extension=exif \ extension=ftp \ extension=gd \ extension=gettext \ extension=gmp \ extension=iconv \ extension=intl \ extension=ldap \ extension=mbstring \ extension=mysqli \ extension=odbc \ extension=openssl \ zend_extension=opcache \ extension=pdo \ extension=pdo_mysql \ extension=pdo_sqlite \ extension=pdo_odbc \ extension=shmop \ extension=snmp \ extension=soap \ extension=sqlite3 \ extension=tokenizer \ extension=wddx \ extension=xmlreader \ extension=xsl \ extension=zip \ extension=zlib' ./php.ini-development # Разницу между двумя файлами ./php.ini-development и ./php.ini-development.orig # записываем в ./php.ini-development.diff diff -u ./php.ini-development{.orig,} > ./php.ini-development.diff # сжимаем ./php.ini-development.diff в ./php.ini-development.diff.gz gzip ./php.ini-development.diff # # ############ закончили с php.ini-development ################ ########## работаем с php-fpm.conf.in ################### # # # Правим файл php-fpm.conf.in sed -i'.orig' \ -e s'/;pid =/pid =/' \ -e s'/;error_log =/error_log =/' \ -e s'/include=@/;include=@/' \ -e '$a;include=etc/php-fpm.d/*.conf' ./sapi/fpm/php-fpm.conf.in # Разницу между двумя файлами php-fpm.conf.in и php-fpm.conf.in.orig # записываем в php-fpm.conf.diff diff -u ./sapi/fpm/php-fpm.conf.in{.orig,} > ./sapi/fpm/php-fpm.conf.diff # сжимаем php-fpm.conf.diff gzip ./sapi/fpm/php-fpm.conf.diff # # ############ закончили с php-fpm.conf.in ################ # Переходим в каталог с php.SlackBuild cd .. ############ Подменяем diff'ы ##################### # # # Переименовываем старый ./php.ini-development.diff.gz в ./php56.ini-development.diff.gz mv ./php.ini-development.diff.gz ./php56.ini-development.diff.gz # Переименовываем старый ./php-fpm.conf.diff.gz в ./php56-fpm.conf.diff.gz mv ./php-fpm.conf.diff.gz ./php56-fpm.conf.diff.gz # Копируем недавно созданный php.ini-development.diff.gz в каталог с php.SlackBuild cp ./php-$PHPV/php.ini-development.diff.gz ./ # Копируем недавно созданный php-fpm.conf.diff.gz в каталог с php.SlackBuild cp ./php-$PHPV/sapi/fpm/php-fpm.conf.diff.gz ./ # Удаляем более не нужный каталог ./php-версия rm -rf ./php-$PHPV # # ############ закончили подмену diff'ов ############## # Меняем версии php в файле ./mod_php.conf.example предварительно переименовав с расширением orig sed -i'.orig' s'/php5/php7/g' ./mod_php.conf.example # Меняем версии php в файле ./fetch-php.sh sed -i'.orig' "s/php-5.6.23/php-$PHPV/" ./fetch-php.sh # Присваиваем бит запуска alpine.SlackBuild и php.SlackBuild chmod +x ./alpine/alpine.SlackBuild. chmod +x ./php.SlackBuild. # запускаем сборку пакета ./php.SlackBuild
Добавим скрипту бит запуска и запустим его с выводом сообщений в файл ./build.php7.log для дальнейшего просмотра и выявления ошибок. В принципе, существенных ошибок я не нашёл, поэтому можно запустить и без использования tee. После завершения скрипта, установим получившийся пакет. Поменяем на актуальный phph.ini и mod_php.conf. И проверим версию.
# chmod +x ./build.php7 # ./build.php7 | tee -a ./build.php7.log ... Slackware package /tmp/php-7.2.6-x86_64-1.txz created. # upgradepkg /tmp/php-7.2.6-x86_64-1.txz ... Package php-5.6.23-x86_64-1 upgraded with new package /tmp/php-7.2.6-x86_64-1.txz. # mv /etc/php.ini /etc/php56.ini # mv /etc/php.ini.new /etc/php.ini # mv /etc/httpd/mod_php.conf /etc/httpd/mod_php56.conf # mv /etc/httpd/mod_php.conf.example /etc/httpd/mod_php.conf # php -v PHP 7.2.6 (cli) (built: Jun 8 2018 16:16:08) ( ZTS ) Copyright (c) 1997-2018 The PHP Group Zend Engine v3.2.0, Copyright (c) 1998-2018 Zend Technologies with Zend OPcache v7.2.6, Copyright (c) 1999-2018, by Zend Technologies
Всё, PHP 7 установлен. Теперь установим сам Nextcloud и, для устранения ошибок кэширования, redis.
Nextcloud и Redis
Устанавливаем sbopkg, синхронизируемся с его репозиторием попутно соглашаясь с созданием отсутствующих каталогов.
# wget https://github.com/sbopkg/sbopkg/releases/download/0.38.1/sbopkg-0.38.1-noarch-1_wsr.tgz # upgradepkg --install-new ./sbopkg-0.38.1-noarch-1_wsr.tgz # sbopkg -r
Устанавливаем Nextcloud и Redis.
# sbopkg -Bi "redis nextcloud-server" # pecl install redis (на последующие вопросы - "no") # echo "extension=redis.so" > /etc/php.d/redis.ini # chmod +x /etc/rc.d/rc.redis # /etc/rc.d/rc.redis start # ps aux | grep redis root 6843 0.0 0.1 43116 8448 ? Ssl 19:24 0:00 /usr/bin/redis-server 127.0.0.1:6379
Apache и MySQL
Внесём кое-какие правки в /etc/httpd/httpd.conf, а именно:
- удалим знак комментария с модулей cgi, cgid, rewrite
- удалим знак комментария со строки подключения mod_php.conf
- В DirectoryIndex добавим index.php
и запустим апач.
# sed -i'.orig' \ -e '/mod_php/s/#/ /' \ -e '/mod_cgi.so/s/#/ /' \ -e '/mod_cgid.so/s/#/ /' \ -e '/mod_rewrite/s/#/ /' \ -e '/DirectoryIndex index.html/ s/$/ index.php/' \ /etc/httpd/httpd.conf # chmod +x /etc/rc.d/rc.httpd # /etc/rc.d/rc.httpd start
Инициализируем каталог данных MySQL и создадим системные таблицы. Запустим MySQL и дадим пользователю root пароль.
# mkdir /var/lib/mysql/mysql # mysql_install_db # chown -R mysql.mysql /var/lib/mysql # chmod +x /etc/rc.d/rc.mysqld # /etc/rc.d/rc.mysqld start # mysql -u root MariaDB [(none)]> set password for 'root'@'localhost' = password('mypassword'); Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> FLUSH PRIVILEGES; Query OK, 0 rows affected (0.00 sec) MariaDB [(none)]> \q Bye
Настройка
Первый запуск
Продолжим настройку в веб-интерфейсе. Запустим наше облако локально, по адресу http://192.168.10.217/nextcloud/ и введём необходимые данные.
Первые два поля это:
пользователь с правами админа - например, admin :) ;
пароль пользователя с правами админа.
Если вдруг забыли пароль или его нужно сменить какому-либо пользователю:
# chmod +x /var/www/htdocs/nextcloud/occ # sudo -u apache /var/www/htdocs/nextcloud/occ user:resetpassword admin Enter a new password: Confirm the new password: Successfully reset password for admin
Далее. Раскрываем «Хранилище и база данных» и заполняем:
Каталог с данными - Здесь создастся каталог data, место, где будут храниться ВСЕ данные ВСЕХ пользователей, а так же логи Nextcloud. Лучше для этого выделить отдельный винчестер и в этом поле указать путь к его точке монтирования. Не забыв сделать её владельцем apache:apache.
Выбираем базу данных - MySQL/MariaDB и в поля ниже вводим соответствующие значения:
пользователь с правами администратора MySQL, у нас это - root;
пароль пользователя с правами администратора MySQL;
название создаваемой базы данных, у нас это - nextcloud;
путь к компьютеру, где установлена MySQL.
Нажимаем на «Завершить установку» и, если всё прошло гладко, увидим веб-интерфейс Nextclod.
Перейдём в основные настройки и посмотрим на ошибки.
Исправление ошибок
В /etc/php.ini добавим рекомендуемые параметры opcache, а для приемлемой работы с файлами большого объёма, кое-какие параметры изменим:
opcache.enable=1 opcache.enable_cli=1 opcache.interned_strings_buffer=8 opcache.max_accelerated_files=10000 opcache.memory_consumption=128 opcache.save_comments=1 opcache.revalidate_freq=1 post_max_size = 16G upload_max_filesize = 0 memory_limit = 2G sys_temp_dir = "/var/tmp" date.timezone = Europe/Moscow
Или при помощи sed, добавляя знак комментария к уже существующим параметрам (чувствую, что можно оптимизировать, но, пока, не знаю как :).
sed -i \ -e '/opcache.enable=/s/^/;/' \ -e '/opcache.enable=/a opcache.enable=1' \ -e '/opcache.enable_cli=/s/^/;/' \ -e '/opcache.enable_cli=/a opcache.enable_cli=1' \ -e '/opcache.interned_strings_buffer=/s/^/;/' \ -e '/opcache.interned_strings_buffer=/a opcache.interned_strings_buffer=8' \ -e '/opcache.max_accelerated_files=/s/^/;/' \ -e '/opcache.max_accelerated_files=/a opcache.max_accelerated_files=10000' \ -e '/opcache.memory_consumption=/s/^/;/' \ -e '/opcache.memory_consumption=/a opcache.memory_consumption=128' \ -e '/opcache.save_comments=/s/^/;/' \ -e '/opcache.save_comments=/a opcache.save_comments=1' \ -e '/opcache.revalidate_freq=/s/^/;/' \ -e '/opcache.revalidate_freq=/a opcache.revalidate_freq=1' \ -e '/post_max_size =/s/^/;/' \ -e '/post_max_size =/a post_max_size = 16G' \ -e '/upload_max_filesize =/s/^/;/' \ -e '/upload_max_filesize =/a upload_max_filesize = 0' \ -e '/memory_limit =/s/^/;/' \ -e '/memory_limit =/a memory_limit = 2G' \ -e '/sys_temp_dir =/s/^/;/' \ -e '/sys_temp_dir =/a sys_temp_dir = \"/var/tmp\"' \ -e '/date.timezone =/a date.timezone = Europe\/Moscow' \ /etc/php.ini