Развернем ownCloud на Fedora GNU/Linux с помощью nginx, php-fpm.
А заодно опровергнем фразу, которая опубликована на официальном ресурсе ownCloud:
«Fedora: Make sure SELinux is disabled or else the installation process might fail.»
«Fedora: Убедитесь, что SELinux отключен, иначе установка может завершится неудачно.»
Надеюсь, что установить Fedora в минимальном комплекте — сможет каждый.
В Fedora есть пакет, который так и называется owncloud.
Но мы будем ставить свежую версию с официального сайта. Просто я так хочу 😉
UPDATE! Данная инструкция подходит и для CentOS/Scientitic Linux 6.x/7.x
Для них я буду писать отдельно то, что отличается.
Итак, нам надо установить следующие основные компоненты:
- веб-сервер nginx
- сервер баз данных mariadb (mysql)
- интерпретируемый язык PHP и его библиотеки
Установка
Для Fedora и CentOS/SL 7.x команда будет выглядеть так:
1 2 3 4 5 6 7 8 9 10 11 12 | yum install php php-fpm php-gd php-curl \ php-dom php-exif php-gmp php-iconv php-fileinfo \ php-iconv php-session php-mysqlnd php-simplexml \ php-spl php-zip php-ZendFramework-Pdf \ php-ZendFramework-Search-Lucene php-getid3 \ php-PHPMailer php-phpass php-Pimple php-irodsphp \ php-filter php-pear-Crypt-Blowfish \ php-dropbox-php-Dropbox php-pear-Net-Curl \ php-pear-XML-Parser php-symfony-routing \ php-doctrine-dbal php-sabredav-Sabre_CalDAV \ php-sabredav-Sabre_CardDAV php-phpseclib-net-sftp \ nginx mariadb-server policycoreutils-python |
Для CentOS/SL 6.x команда будет немного иной:
1 2 3 4 5 6 7 8 9 10 11 12 | yum install php php-fpm php-gd php-curl \ php-dom php-exif php-gmp php-iconv php-fileinfo \ php-iconv php-session php-mysql php-simplexml \ php-spl php-zip php-ZendFramework-Pdf \ php-ZendFramework-Search-Lucene php-getid3 \ php-PHPMailer php-phpass php-Pimple php-cloudfiles \ php-filter php-pear-Crypt-Blowfish php-ldap \ php-dropbox-php-Dropbox php-pear-Net-Curl \ php-pear-XML-Parser php-symfony-routing \ php-doctrine-dbal php-sabredav-Sabre_CalDAV \ php-sabredav-Sabre_CardDAV \ nginx mysql-server policycoreutils-python |
Настройка
Сперва условимся, что основной каталог для ownCloud у нас будет /srv/owncloud.
Если ты хочешь использовать другой каталог — просто меняй у себя в конфигах этот путь.
MariaDB (MySQL)
Запускаем установленный сервер баз данных.
Для Fedora и EL 7:
1 | systemctl start mariadb |
Для CentOS/SL 6.x:
1 | service mariadb start |
Для базовой настройки запускаем команду и отвечаем на вопросы:
1 | mysql_secure_installation |
Я, обычно, отвечаю так:
1 2 3 4 5 6 7 8 | Enter current password for root (enter for none): <enter> Set root password? [Y/n] y New password: ввожу пароль от рута Re-enter new password: ввожу пароль от рута Remove anonymous users? [Y/n] y Disallow root login remotely? [Y/n] y Remove test database and access to it? [Y/n] y Reload privilege tables now? [Y/n] y |
Далее нам надо создать базу данных для ownCloud.
Запускаем оболочку mysql:
1 | mysql -uroot -pТВОЙ_ПАРОЛЬ_ВВЕДЕННЫЙ_РАНЕЕ |
Откроется приглашение оболочки. В нем вводим последовательно следующие команды:
1 2 3 4 | create database owncloud; create user 'owncloud'@'%' identified by 'owncloud'; grant all privileges on owncloud.* to 'owncloud'@'%'; flush privileges; |
create database owncloud; | создаст базу данных с именем owncloud |
create user ‘owncloud’@’%’ identified by ‘owncloud’; | создаст пользователя с именем owncloud и паролем owncloud, который сможет заходить отовсюду, % можно заменить на localhost, тогда пользователь сможет заходить только с данной конкретной машины |
grant all privileges on owncloud.* to ‘owncloud’@’%’ | команда дает доступ на все объекты базы данных owncloud (.*) для пользователя ‘owncloud’@’%’ |
flush privileges | сбрасывает и обновляет привелегии |
Выходим из оболочки mysql введя \q и нажав Enter.
На этом мы закончили с созданием базы данных.
php-fpm
Пакеты у нас установлены. Нам лишь надо немного настроить php и php-fpm для работы с nginx и ownCloud.
Открываем файл /etc/php-fpm.d/www.conf. Находим строки:
1 2 | user = apache group = apache |
Исправляем их так:
1 2 | user = nginx group = nginx |
Этим мы исправим пользователя и группу от которых будут работать процессы php-fpm.
Теперь исправим параметры PHP, открываем файл /etc/php.ini, находим в нем параметры:
upload_max_filesize
post_max_size
и исправляем их на 10G, а также параметр
upload_tmp_dir,
который раскомментируем и исправляем на «/srv/owncloud/data/tmp» (этот путь нам позже придется вручную создать)
как-то так:
1 2 3 | upload_max_filesize = 10G post_max_size = 10G upload_tmp_dir = /srv/owncloud/data/tmp |
Надо также изменить разрешения на каталог php-сессий:
1 | chown -R root:nginx /var/lib/php/session |
Закончили с PHP.
nginx
Веб-сервер у нас установлен. Надо лишь слегка его настроить.
Создаем файл /etc/nginx/conf.d/owncloud.conf с таким содержимым:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 | upstream php-handler { server 127.0.0.1:9000; #server unix:/var/run/php5-fpm.sock; } server { listen 80; server_name ВСТАВЬ.ТУТ.ПОЛНОЕ.ИМЯ.ДОМЕНА; return 301 https://$server_name$request_uri; # enforce https } server { listen 443 ssl; server_name ВСТАВЬ.ТУТ.ПОЛНОЕ.ИМЯ.ДОМЕНА; ssl_certificate /etc/ssl/owncloud/cloud.crt; ssl_certificate_key /etc/ssl/owncloud/server.key; # Path to the root of your installation root /srv/owncloud/; client_max_body_size 10G; # set max upload size fastcgi_buffers 64 4K; fastcgi_read_timeout 360s; fastcgi_send_timeout 360s; fastcgi_connect_timeout 60; error_log /var/log/nginx/owncloud-error.log debug; rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect; rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect; rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect; index index.php; error_page 403 /core/templates/403.php; error_page 404 /core/templates/404.php; location = /robots.txt { allow all; log_not_found off; access_log off; } # location ~ ^/(data|config|\.ht|db_structure\.xml|README) { location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) { deny all; } location / { # The following 2 rules are only needed with webfinger rewrite ^/.well-known/host-meta /public.php?service=host-meta last; rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last; rewrite ^/.well-known/carddav /remote.php/carddav/ redirect; rewrite ^/.well-known/caldav /remote.php/caldav/ redirect; rewrite ^(/core/doc/[^\/]+/)$ $1/index.html; try_files $uri $uri/ index.php; } location ~ \.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; fastcgi_pass php-handler; } # Optional: set long EXPIRES header on static assets location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ { expires 30d; # Optional: Don't log access to assets access_log off; } } |
ВНИМАНИЕ! В строках 8 и 14 надо заменить имя сервиса на свое.
Также, обращаем внимание на строки 16 и 17, в них описаны ключ и сертификат для SSL соединения. Создадим их!
Выполняем команды последовательно:
1 2 3 4 5 6 | cd /etc/ssl mkdir owncloud && cd owncloud openssl genrsa -out server.key 2048 openssl req -new -key server.key -out cloud.csr <отвечаем на вопросы> openssl x509 -req -days 365 -in cloud.csr -signkey server.key -out cloud.crt |
Объясняю, что делают команды:
1) переходим в каталог, где хранятся данные SSL;
2) создаем каталог owncloud;
3) генерируем ключ;
4) генерируем запрос на самоподпись;
6) создаем подписанный сертификат используя ключ и запрос.
Закончили с nginx.
ownCloud
Открываем страничку с которой нам надо скачать UNIX tar.bz2 архив.
Скачиваем и размещаем в каталоге /root
Распакуем в ранее задуманный каталог и создадим каталог для временных загрузок:
1 2 3 | cd /srv tar xfv ~/owncloud-*.tar.bz2 mkdir -p owncloud/data/tmp |
Теперь нам надо выдать разрешения на каталог /srv/owncloud таким образом, чтобы nginx и php-fpm могли работать с данными.
1 | chown -R nginx:nginx /srv/owncloud |
Готово.
SELinux
Разрешим в SELinux то, что нам нужно для работы ownCloud.
Разрешаем объектам веб-сервера соединяться с базой данных (будет работать некоторое время, где-то секунд 20-минуту):
1 | setsebool -P httpd_can_network_connect=1 httpd_can_network_connect_db=1 |
А теперь нам надо прописать в SELinux чОткий контекст для веб-сервера на каталоге с ownCloud:
1 | semanage fcontext -a -t httpd_sys_rw_content_t '/srv/owncloud(/.*)?' |
А затем восстановить этот контекст на каталоге:
1 | restorecon -R -v /srv/owncloud |
Вот и все. Просто, правда? 😉
Ключ на старт
Запускаем все, что мы настроили.
Fedora, CentOS/SL 7.x:
1 | systemctl start php-fpm nginx |
CentOS/SL 6.x:
1 2 | service php-fpm start service nginx start |
И проверяем вход по имени, указанному в строках 8 и 14 файла /etc/nginx/conf.d/owncloud.conf
Должны мы увидеть вот такую картинку:
Где надо ввести свое имя пользователя, желаемый пароль.
Нажимаем на ссылку «Система хранения данных & база данных».
Я оставляю директорию с данными, как есть.
Выбираем MySQL/MariaDB в пункте «Настройка базы данных» и вносим по пунктам данные нашей базы данных из самого первого пункта. Если ничего не менялось, то это будет так:
Пользователь базы данных | owncloud |
Пароль базы данных | owncloud |
Название базы данных | owncloud |
Хост базы данных | localhost |
Нажимаем кнопку «Завершить установку».
Все. Дальше, я надеюсь, ты разберешься сам 😉
FireWall
Не забываем про это чудесное изобретение. В Fedora по-умолчанию идет новый firewalld.
В нем потребуется открыть порты http и https. Вот как это делается:
1 | firewall-cmd --add-service=http --add-server=https |
Для CentOS/SL 6.x потребуется отдельно выделить протоколы http/https в настроке firewall:
1 | system-config-firewall |
Финал
Проверили. Все работает.
Закрепляем успех, включаем все сервисы в автозагрузку при старте системы.
Для Fedora, CentOS/SL 7.x это будет выглядеть так:
1 | systemctl enable mariadb nginx php-fpm |
а для CentOS/SL 6.x так:
1 2 3 | chkconfig mariadb on chkconfig nginx on chkconfig php-fpm on |
А еще очень часто надо дописать имя из пунктов 8 и 14 конфигурационного файла nginx’а в /etc/hosts.
Собственно, если при первом пуске ownCloud ругается на ненастроенный WebDAV — то это тот самый случай.
Для CentOS/SL 6.x надо обязательно дописать имя в /etc/hosts.
Если есть верхний прокси-nginx
Вот в такой ситуации очень много всяких нюансов. Я долго все их собирал и тестировал.
А тебе они достаются просто так 😉
В конфигурационном файле nginx-прокси надо обязательно дописать такие вот строки:
1 2 3 4 5 | client_max_body_size 10G; proxy_connect_timeout 600; proxy_send_timeout 600; proxy_read_timeout 600; send_timeout 600; |
Иначе верхний nginx не будет пропускать большие файлы или будет выдавать «Gateway Time-out» при их загрузке.
Ну вот и все. Ошибки, оговорки и пр. пишите в комментариях.
Спасибо, добрый друг! Совсем забыл, что кроме sys_content бывает sys_rw_content, бывает же такое!
PS тоже всегда хочу сказать пару ласковых всем, кто советует отключить SeLinux ))