Настало время потихоньку погружаться в RedHat/CentOs 7. Я поставлю на него owncloud 8.
Ранее я уже описывал установку owncloud7 на CentOS6. Эти заметки во многом повторяются.
Я постараюсь уделить больше внимания новому.
Подотовка
Подготовлю свежеустановленный CentOS7.
Hostname
Первым делом поменяю имя машины. Cейчас у меня uname -n
говорит:
localhost.localdomain
Я попробовал прописать hostname в /etc/sysconfig/network, но это не принесло жалаемого результата. systemd — такой systemd.
Самое время обратиться к документации.
В документации сказано, что для установки hostname нужно выполнить:
# hostnamectl set-hostname www.jnotes.ru
И действительно, hostname установлен и после ребута все хорошо.
Можно приступать к установке owncloud.
Установка owncloud
Подключение репозитария
# vi /etc/yum.repos.d/owncloud.repo
[isv_ownCloud_community]
name=Latest stable community release of ownCloud (CentOS_CentOS-7)
type=rpm-md
baseurl=http://download.opensuse.org/repositories/isv:/ownCloud:/community/CentOS_CentOS-7/
gpgcheck=1
gpgkey=http://download.opensuse.org/repositories/isv:/ownCloud:/community/CentOS_CentOS-7/repodata/repomd.xml.key
enabled=1
# yum install owncloud
nginx
На этот раз в качестве веб сервера буду использовать nginx.
Поэтому перетаскиваю owncloud на nginx. Для этого устанавливаю php-fpm и сам nginx:
# yum install epel-release
# yum install php-fpm nginx
# systemctl enable nginx.service
# systemctl enable php-fpm.service
# systemctl stop httpd.service
# systemctl disable httpd.service
Подготавливаю конфиг для nginx,в соответствии с документацией owncloud — /etc/nginx/conf.d/owncloud.conf:
upstream php-handler {
server 127.0.0.1:9000;
#server unix:/var/run/php5-fpm.sock;
}
server {
listen 80;
server_name owncloud.jnotes.ru;
# enforce https
return 301 https://$server_name$request_uri;
}
server {
listen 443 ssl;
server_name owncloud.example.com;
ssl_certificate /etc/ssl/nginx/owncloud.jnotes.ru.crt;
ssl_certificate_key /etc/ssl/nginx/owncloud.jnotes.ru.key;
# Path to the root of your installation
root /var/www/html/owncloud/;
# set max upload size
client_max_body_size 10G;
fastcgi_buffers 64 4K;
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 ~ ^/(?:\.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;
}
}
SSL сертификат
Создаю самоподписанный сертификат:
# mkdir /etc/ssl/nginx
# openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout /etc/ssl/nginx/owncloud.jnotes.ru.key -out /etc/ssl/nginx/owncloud.jnotes.ru.crt
Country Name (2 letter code) [AU]:RU
State or Province Name (full name) [Some-State]:Ulyanovsk
Locality Name (eg, city) []:Ulyanovsk
Organization Name (eg, company) [Internet Widgits Pty Ltd]:jnotes.ru
Organizational Unit Name (eg, section) []:jnotes.ru
Common Name (e.g. server FQDN or YOUR name) []:jnotes.ru
Email Address []:
Установка MySQL
OwnCloud может работать SQLite, MySQL, PostgreSQL и Oracle. По умолчанию будет исполщоваться SQLite.
Однако:
SQLite will be used as database.
For larger installations we recommend to choose a different database backend.
Особенно вызывает сомнение использование SQLite при синхронизации файлов с использование клиента для ПК.
Я буду пользовать mariadb.
# yum install mariadb-server php-mysql
# systemctl enable mariadb
# service mariadb start
Создаю базу данных и пользователя для owncloud:
# service mariadb start
# mysql
MariaDB [(none)]> create database owncloud;
MariaDB [(none)]> create user 'owncloud'@'localhost' identified by 'password0';
MariaDB [(none)]> grant all privileges on owncloud.* to 'owncloud'@'localhost';
MariaDB [(none)]> flush privileges;
Не забыть установить пароль на root базы данных:
mysqladmin -u root password 'password0'
SELinux
В SELinux дать разрешения на запись в следующие директории:
- /var/www/html/owncloud/data
- /var/www/html/owncloud/config
- /var/www/html/owncloud/apps
Для этого делаю следующее:
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/data' && restorecon '/var/www/html/owncloud/data'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/config' && restorecon '/var/www/html/owncloud/config'
# semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/html/owncloud/apps' && restorecon '/var/www/html/owncloud/apps'
Приятно, что semanage в дистрибутиве есть. Ранее приходилось каждый раз ставить.
firewalld
Настало время открыть firewall и продолжить установку через web интерфейс.
Для понимания как работает и что умеет firewalld я прочитал документацию у RedHat.
Кроме того, оставлю еще одну ссылку по firewalld
В итоге на скорую руку не удалось вкурить как ограничить ssh с одного хоста.
Простой, легкий в освоении, логичный firewalld после прочтения man’а и нескольких статей требует более глубокого изучения. В итоге я просто разрешил своему хосту подключаться по всем портам к серверу.
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="x.x.x.x" accept'
# firewall-cmd --add-rich-rule 'rule family="ipv4" source address="x.x.x.x" accept' --permanent
Запуск
После этого можно запустить php-fpm и nginx:
# chown -R apache:apache /var/www/html/owncloud
# service php-fpm start
# service nginx start
Завершение установки
Завершающим этапом прописываю хост в DNS и иду на http://owncloud.jnotes.ru, где происываю:
- логин/пароль администратора
- каталог для хранения данных
- тип базы данных — MySQL/MariaDB
- авторизационные данные для подключения к базе данных
На этом установка завершена, возвращаюсь к firewalld.
Нужно разрешить доступ к серверу с любого адреса по портам 80 и 443.
firewall-cmd --zone=public --add-service=http --permanent
firewall-cmd --zone=public --add-service=https --permanent
firewall-cmd --reload
Проверяю:
# firewall-cmd --list-all --permanent
public (default)
interfaces:
sources:
services: dhcpv6-client ssh
ports:
masquerade: no
forward-ports:
icmp-blocks:
rich rules:
rule family="ipv4" source address="x.x.x.x" accept