0

Установка сервера owncloud

Установка и начальная настройка собственного хранилища owncloud домашнем Linux в виртуальной среде.

На моем домашнем компе установлен Linux и развернут KVM, про установку KVM на сервере я оставлял заметку. У меня тоже самое, только на домашнем компе и управляется гуишным virt-manager.

В этой виртуальной среде я и развернул owncloud.

Общая схема:
cloud.jnotes.ru

OwnCloud

Сам owncloud разворачивается довольно просто из пакетов, как об этом и говорит официальная документация

Я устанавливал на CentOS 6. Подключаю EPEL и OwnCloud репозитории:
# wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-8.noarch.rpm
# rpm -Uvh epel-release-6-8.noarch.rpm
# cd /etc/yum.repos.d/
# wget http://download.opensuse.org/repositories/isv:ownCloud:community/CentOS_CentOS-6/isv:ownCloud:community.repo
# yum update
# yum install owncloud

По умолчнию OwnCloud хранит данные в SQLlite, но умеет и в MySQL. Ставлю.
# yum install mysql-server
# service mysqld start
# mysqladmin -u root password 'password'

Apache и MySQL запускать при старте
# chkconfig mysqld on
# chkconfig httpd on

В CentOS 6 по умолчанию firewall включен и открыт только 22 порт. В /etc/sysconfig/iptables нужно открыть еще 80 порт.

Конфиг apache для owncloud — /etc/httpd/conf.d/owncloud.conf:

<Directory /var/www/html/owncloud>
  Options Indexes FollowSymLinks MultiViews
  AllowOverride All
  Order deny,allow
  Allow from 192.168.122.1
  Allow from 192.168.1.10
  Deny from all
</Directory>
<Virtualhost *:80 default>
  ServerAdmin 
  DocumentRoot /var/www/html/owncloud
  ServerName cloud.jnotes.ru
  ErrorLog /var/log/httpd/cloud-error_log
  CustomLog /var/log/httpd/cloud-access_log common
</Virtualhost>

Запускаю apache, захожу на http://192.168.122.10 и заканчиваю установку — все просто несколько полей, несколько кликов.

Nginx

Для того, что бы можно было попасть на мой owncloud с внешки нужно:

  • Пробросить 80 и 443 порт на роутере на мой комп
  • Поставить Nginx и настроить на нем проксирование
  • Сгенерировать для Nginx сертификат

С пробросом портов проблем нет. С установкой nginx в общем, тоже все понятно:
# apt-get update
# apt-get nginx install

Рихтую конфиг для nginx — /etc/nginx/nginx.conf:

user www-data;
worker_processes 4;
pid /run/nginx.pid;

events {
        worker_connections 768;
        # multi_accept on;
}

http {

        client_max_body_size 1024m;

        sendfile on;
        tcp_nopush on;
        tcp_nodelay on;
        keepalive_timeout 65;
        types_hash_max_size 2048;

        include /etc/nginx/mime.types;
        default_type application/octet-stream;

        access_log /var/log/nginx/access.log;
        error_log /var/log/nginx/error.log;

        gzip on;
        gzip_disable "msie6";

        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*.conf;
}

Проксирование на owncloud — /etc/nginx/sites-available/owncloud.conf:

server {
    listen 80;

    server_name cloud.jnotes.ru;

    # https redirect
    rewrite ^ https://$server_name$request_uri? permanent;

}

server {
    listen 443;

    ssl on;
    ssl_certificate /etc/nginx/ssl/server.crt;
    ssl_certificate_key /etc/nginx/ssl/server.key;

    server_name cloud.jnotes.ru;

    location /owncloud {
        rewrite ^.* / permanent;
    }
    location / {
        proxy_pass       http://192.168.122.10:80;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header Host      $host;
        proxy_set_header X-Real-IP $remote_addr;
    }
}

Надо отметить, что у меня статический IP и в зоне jnotes.ru указано где искать cloud.jnotes.ru. Однако, думаю не сложно провернуть подобное и с no-ip.org, например.

Осталось сгенерировать ключи.
# mkdir /etc/nginx/ssl && cd /etc/nginx/ssl
Генерирую приватный ключ
# openssl genrsa -des3 -out server.key 2048
Создаю подписывающий сертификат
# openssl req -new -key server.key -out server.csr
В процессе отвечаю на вопросы. На вопрос «Common Name (eg, your name or your server’s hostname)» отвечаю jnotes.ru
Удаляю passphrase с ключа
# cd server.key server.key.orig
# openssl rsa -in server.orig -out server.key

И наконец создаю подисанный сертификат
# openssl x509 -req -days 365 -in server.csr -signkey server.key -out server.crt

Лучше выдать этим файлам права только на чтение 400.

Стартую Nginx — все должно работать.
# service nginx start

Есть нюанс. Если зайти в настройки OwnCloud, то он ругается на то, что работает по http. Ну не знает он про nginx.

Кстати, для увеличения максимального размера загружаемого файла нужно править /etc/php.ini на предмет post_max_size и upload_max_filesize. Кроме того, надо обратить внимание на директиву client_max_body_size — тоже надо увеличивать.

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.