В связи со складывающейся ситуацией в российском сегменте сети Интернет,
было принято решение сохранить (отзеркалировать) некоторые ресурсы
сети, составляющие большую ценность, в силу накопленного человеческого
труда, вложенного в их создание.
В данном случае, для этого будет поднято т.н. собственное облако - домашнее облако - персональное облако, на собственном домашнем компьютере/сервере.
Вначале, я хочу кратко остановиться на требованиях к компьютерным конфигурациям, используемым для персонального домашнего облака.
Во первых, это должен быть не домашний настольный компьютер. Хотя я сплошь и рядом это нарушаю.
Во вторых, это должен быть тихий, малопотребляющий и компактный компьютер, чтобы он мог работать 24 часа в сутки, с минимальным вмешательством.
В третьих, это должен быть компьютер под управлением Linux.
В четвертых, он должен позволять удалённое управление, должен работать без клавиатуры и мыши, без монитора. Восстанавливаться и загружаться после потери питания.
В пятых, он должен иметь постоянное подключение к сети Интернет.
В шестых, должен поддерживать ftp,web-сервера, подключение webdav, ssh ftps, https, rsync, bittorrent и пр.
Я подобрал небольшие предварительные конфигурации для домашнего облака, которая возможно будет отвечать этим требованиям на сегодняшний момент (Май 2014 года).
1. Intel NUC (с процессором Celeron), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
2. Pegatrom Mercury L6 (с процессором Celeron, пассивное охлаждение), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
3. Сетевой жесткий диск WD Cloud, с модифицированной прошивкой.
Конфигурации начальные, обеспечивают цену домашнему облаку менее 11 тыс. руб.
И при текущей стоимости интернет-подключения ~450 руб./мес. 5500 руб. в год.
Если сравнить стоимость со стоимостью облачного хранения, например в Google за 120$ за терабайт, то возникают некоторые вопросы. Однако, домашнее, непосредственно доступное облако с некоторых позиций выглядит предпочтительнее.
Nginx - известный кэширующий веб-сервер.
Веб-сервер занимается тем, что отдает файлы с сервера, по протоколу http/https клиенту.
Подразумевается, что установка производиться на чистую систему, где нет других web-серверов. При их наличии, надо обязательно сделать резервирование, т.к. может происходит затирание некоторых настроек и пр.
В Ubuntu 14.04 он идёт в пакетах,
$ sudo apt-get install nginx
либо
$ sudo apt-get install nginx-extras
Последний пакет, нужен если будет (а он будет, удобно) использоваться протокол webdav на сервере, для каких-то иных целей. В ownCloud встроен собственный webdav, так что системный не задействуется, как я понимаю.
Но у меня заработало более менее с nginx-extras
Основной конфигурационный файл web-сервера nginx: /etc/nginx/nginx.conf
Конфигурация сайта по умолчанию, сразу после установки: /etc/nginx/sites-enabled/default,
/etc/nginx/sites-enabled - это ссылки на конфигурации сайтов которые будет работать после запуска сервиса nginx
/etc/nginx/sites-available - это конфигурации сайтов, как работающих так и в процессе настройки и конфигурирования (неработающих).
Сайт по-умолчанию, после установки работает на 80 порту и содержит приветствие nginx.
Просмотреть его можно по ссылке: http://localhost/
Пользователь добавленный в систему: www-data
Простейшая документация по web-серверу и его конфигурационному файлу: http://nginx.com/resources/admin-guide/web-server/
Теперь надо определиться с месторасположением (location) файлов web-сервера в локальной файловой системе компьютера.
Пусть это будет /srv/www
Создадим /srv/www и установим пользователя www-data у этого каталога.
# mkdir /srv/www
# chown -R www-data:www-data /srv/www
Сюда (в /srv/www) можно скопировать index.html файл из начального примера.
http://localhost/index.html
autogen - генератор текстовых файлов по шаблону.
ntp - сервис "сетевая служба времени", понадобиться, видимо при синхронизации файлов между клиентами owncloud.
clamav - антивирусная проверка файлов.
К серверу добавится служба времени, служба антивируса, и обновления времени и баз сигнатур (отпечатков вирусов) антивируса.
PHP5 - дедушка Интернета. Использовался с очень древних пор. Но всё ещё продолжает использоваться. Кому-то нравиться.
Поиск пакетов в репозитории:
apt-cache search php5
apt-cache search php
Общий список устанавливаемых пакетов:
$ sudo apt-get install php5 php5-cgi php5-cli php5-common php-pear php5-fpm php5-mysqlnd php5-pgsql php5-sqlite php5-ldap php-xml-parserphp5-curl php5-dev php5-gd php5-imagick php5-intl php5-mcrypt
Базовая система
php5 - метапакет серверной части.
php5-cgi отдельный пакет, обеспечивающий связь Common Gateway Interface c php.
php5-cli
php5-common
php-pear
Отдельные модули php5
php5-fpm - PHP-FPM демон для запуска FastCGI сервера, для обработка php-программ.
php5-mysqlnd - родной пакет для поддержки связи php и субд mysql
php5-pgsql - пакет для поддержки связи php и субд postgresql
php5-sqlite - пакет для поддержки связи php и субд sqlite
php5-ldap - пакет для поддеркжи связи php и LDAP-серверов
php-apc - пакет для оптимизатора
php5-apc - если найдётся в пакетах
php-xml-parserphp5-curl
php5-dev
php5-gd
php5-imagick - поддерка связи php и imagick - утилиты и библиотеки обработки графических файлов
php5-intl - интернационализация
php5-mcrypt - поддержка какого-то кодирования
Конфигурационные файлы:
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini
В этих файлах надо настроить ограничения (снять) на размер загружаемого файла (обычное 2 Мб).
Установим максимальный размер загружаемого файла (пусть это будет архив, видео, резервный файл и т.п)
upload_max_filesize = 16G
Также приведём в соответствие максимальный размер POST-запроса, передаваемого серверу
post_max_size = 16G
Объём памяти выделяемый под загружаемый файл, пусть будет больше загружаемого файла, чтобы с запасом.
Единственное что, сложно - это размер памяти сервера, он достаточно мал, будет использоваться подкачка.
memory_limit = 20G
Плюс над протестировать в реальных условиях, а то может получить не очень хорошо.
Ещё кое что надо сделать в этих файлах (/etc/php5/fpm/php.ini):
cgi.fix_pathinfo=0
После внесения изменений перезапустить php5-fpm:
# service php5-fpm restart
Долго не мог понять, почему не изменяется размер возможного загружаемое файла в ownCloud, вроде все опции настроил по инструкции, перезапускал и сервер и php-rpm. Решение оказалось банальным - перезапустить компьютер. Что-то, где-то, видимо было недообновлено.
Для домашнего использования, совсем необязательно использовать mysql сервер и настраивать его. Достаточно использовать sqlite3.
# apt-get install mysql-server mysql-client
Настройку mysql, но я выбираю postgresql приведу возможно позже, в рамках другой заметки.
Самоподписанные сертификаты позволяют без затрат денег, установить "заглушку" в протокол https, т.е. всё будет почти также работать как с настоящими сертификатами, но только при открытии сайта (в данном случае облака) обычные браузеры будут сообщать о риске и недоверенном узле. Тут надо будет добавить в список исключений этот сертификат облака и тогда на это можно будет не обращать внимания. Разве только красным цветом выделение надписи https будет "напрягать".
В результате мы должны получить 2 файла:
microserver.key - частный (приватный) ключ
microserver.crt - самоподписанный сертификат виртуального сервера
Инструкцию с описанием шагов по генерации самоподписанных сертификатов можно посмотреть на ресурсе [8].
Здесь просто последовательность команд, выполнение которых обеспечит достижение цели данного руководства.
openssl genrsa -des3 -out microserver.key 2048
openssl rsa -in microserver.key -out microserver.key.insecure
mv microserver.key microserver.key.secure
mv microserver.key.insecure microserver.key
openssl req -new -key microserver.key -out microserver.csr
openssl x509 -req -days 365 -in microserver.csr -signkey microserver.key -out microserver.crt
Скопировать их в хранилище сертификатов и ключей.
sudo cp microserver.crt /etc/ssl/certs
sudo cp microserver.key /etc/ssl/private
Пути к этим файлам, будут позже прописаны в конфигурации виртуального хоста nginx, чтобы сервер мог осуществлять https-соединения.
$ wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_14.04/Release.key
$ sudo apt-key add - < Release.key
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud.list"
$ sudo apt-get update
$ sudo apt-get install owncloud
Если все ранее указанные пакеты программ были установлены ранее, то эта команда установить чистую систему персонального облака. Т.е. все зависимости облака выявлены и понятно, какие компоненты добавлены в систему сервера. Это важно понимать, чтобы проверить на возможные возникшие дыры и т.п.
Может потребоваться деинсталляция пакета apache2, т.к. здесь используется nginx.
Облако будет установлено в стандартную папку сайтов: /var/www, под именем owncloud.
Конфигурационный файл облака: /var/www/owncloud/config/config.php
Важная опция trusted_domain, она отвечает за домены с которых будут подключения. Важна, при выводе облака в общую сеть Интернет.
Для начала, лучше подготовить каталог, папку, том(volume), точку монтирования, которая будет выступать в качестве хранилища данных для собственного облака.
Очень часто, хранилище располагается на томе lvm, что даёт некоторые гибкие возможности по увеличению места, но я исповедую иной подход, т.к. увеличение места может закончиться неудачно, а данные огромны и просто так их не зарезервируешь.
Если этого не сделать, то данные будут храниться в папке по умолчанию: /var/www/owncloud/data, что не всегда безопасно, т.к. грозит удалением, при обновлении сервиса.
"Безопасное подключение" - это использование протокола http поверх (внутри) ssl/tls, с ассиметричным шифрованием данных.
Теперь надо настроить виртуальный www-сервер (vhost nginx) на использование owncloud.
Для начала:
Доменное имя, по которому облако будет доступно: my.domain.name
В частных случаях, это может быть динамическое доменное имя (от сервисов подобных twodns, dyndns).
Если облако доступно только в домашней сети - что не имеет особого смысла, то это может быть avahi-домен, либо IP-адрес внутренней сети.
Т.е. если набрать в браузере https://my.domain.name/, то мы должны попасть на страницу регистрации (login).
Обычно, обычные пользователи используют какой-либо маршрутизатор, которые и принимает белый ip-адрес от провайдера, а остальным домашним клиентам выдаёт "серые" из диапазона неподключенных сетей.
В этом случае, надо делать проброс портов на роутере, регистрацию динамического доменного имени (например twodns), чтобы таки получить возможность в строке браузера набрать https://my.domain.name/.
Также стоит заметить, что многие провайдеры фильтруют порты до 1024 от внешних обращений, тогда надо порт на котором будет слушать сервер, сдвинуть вверх, например 12443 и при указании адреса в строке указывать и порт: https://my.domain.name:12443/
На время тестирования к серверу можно обращаться по localhost,ip-адресу и пр.
# Виртуальный сервер "Персональное облако"
# сервер: микросервер
# дата: 29.05.2014
server {
listen 443 ssl;
listen 80 default_server;
server_name default 'my.domain.name' '192.168.1.11';
# Корень сайта - корень облака
root /var/www/owncloud;
# if ($http_host != "my.domain.name") {
# rewrite ^ http://my.domain.name$request_uri permanent;
# }
index index.php index.html;
# Иконка сайта, отображаемая в адресной строке
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Запрет доступа к скрытым файлам .htaccess, .htpasswd.
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# Самоподписанный сертификат и частный незапароленный ключ сервера
ssl_certificate /etc/ssl/certs/microserver.crt;
ssl_certificate_key /etc/ssl/private/microserver.key;
client_max_body_size 16G; # set max upload size
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
rewrite ^/apps/calendar/caldav.php /remote.php/caldav/ last;
rewrite ^/apps/contacts/carddav.php /remote.php/carddav/ last;
rewrite ^/apps/([^/]*)/(.*\.(css|php))$ /index.php?app=$1&getfile=$2 last;
rewrite ^/remote/(.*) /remote.php last;
# Страницы ошибок
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;
# Запрет доступа к системным файлам облака ownCloud
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}
location / {
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$is_args$args;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS $https;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_intercept_errors on;
fastcgi_index index.php;
fastcgi_buffers 64 4K;
}
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
access_log off;
}
}
Этим файлом можно (либо надо) заменить файл default расположенный в /etc/nginx/site-available/.
Также этот файл (и другие) включается в общую конфигурацию сервера nginx посредством директивы include в файле: /etc/nginx/nginx.conf .
У облака ownCloud есть конфигурационный файл, которые тоже требует внимания пользователя на момент установки.
Располагается в ownCloud/config/config.php
На начальном этапе установки, нас в нём будет интересовать опция trusted_domain - которая укажет какие домены облака доверенные. Будет это полное имя т.н. FQDN, либо просто внутренний ip-адрес, либо и то и другое.
Выглядит он так:
$ cat /var/www/owncloud/config/config.php
<?php
$CONFIG = array (
'instanceid' => 'oc2344a23abc',
'passwordsalt' => 'ab1137423168fd7c2a6223a6b520b',
'trusted_domain' =>
array (
0 => 'localhost:443', 1 => 'mir.local:443', 2 => 'my.domain.name:443'
),
'datadirectory' => '/mnt/oblako',
'dbtype' => 'sqlite3',
'version' => '6.0.3.1',
'installed' => true,
'allowZipDownload' => false,
);
Тут видно и точку монтирования заданную при установке облака - /mnt/oblako. Это отдельный том, общим объёмом около 50Гб.
По идее виртуальных сайтов, можно сделать несколько установок owncloud, каждую в свой отдельный каталог, для различных целей. Например, одно облако для просмотра коллекций, а другое только для загрузки или обмена с пользователями.
Либо один сайт с облаком для предварительного тестирования всяких возможностей, чтобы затем перенести в работающее облако.
Из недостатков системы (точнее интеграции её в систему) - это то, что хранение данных, ведётся из под пользователя www-data и сложно пополнять базу документов и пр., с помощью простого файлового менеджера. После загрузки файлов с помощью файлового менеджера, из консоли, надо обязательно изменить права владельца, со своих на www-data, либо использовать webdav подключение, либо монтировать файловую систему webdav. В этих случаях, действия с файлами, практически не отличаются от обычных, за исключением временных задержек. Со временем, тут главное терпение и ожидание завершения предыдущих операций.
Pydio - Put your data in orbit - ещё одна облачная система, которая может быть использована для целей домашнего облака.
Устанавливается тоже с некоторыми сложностями, но в части раздела PHP5 (уже установленного) почти совпадает с ownCloud.
Надо скачать установочный архив [6] и развернуть (разархивировать) его в каталог который будет использоваться под этот проект (сам проект, не данные). Настроить первоначальные права.
Пусть это будет /var/www/pydio
У меня это происходит так, под суперпользователем (root):
# unzip /home/gimmor/Загрузки/pydio-core-5.2.3.zip
# mv pydio-core-5.2.3 /var/www/pydio
# chown -R www-data /var/www/pydio
Далее, настройка конфигурации сервере nginx для использования pydio
За основу возьмём файл с ресурса [7] и подправим для своих условий.
server {
Сервер pydio временно будет сервером по-умолчанию
listen 80 default_server;
Сервер будет принимать безопасные соединения на 443 порту.
listen 443 ssl;
# Доменное имя, под которым сервер будет доступен
server_name localhost 'pydio.local' '192.168.5.37';
# Самоподписанный сертификат для виртуального сервера pydio и частный ключ
ssl_certificate /etc/ssl/certs/pydio-server.crt;
ssl_certificate_key /etc/ssl/private/pydio-server.key;
# Корень сервера, его месторасположение
root /var/www/pydio;
# Кодировка сервера по-умолчанию
charset utf-8;
# Главный индексный файл корня сервера
index index.php;
# Если мы пытаемся зайти по 80 порту, то будем перенаправлены
# Это заглушка временна, пока сервера окончательно не будут настроены
# Вполне возможно, что на 80 порту будет висеть какая-либо страница
if ($server_port = 80) {
rewrite ^ https://$host$request_uri permanent;
}
client_max_body_size 1G;
# Журнал доступа
access_log /var/log/nginx/pydio.access.log;
# Журнал ошибок
error_log /var/log/nginx/pydio.error.log;
# Месторасположение
location / {
}
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location = /conf/ { deny all; }
location = /data/ { deny all; }
# robots.txt определяет права для роботов индексаторов
location = /robots.txt { access_log off; log_not_found off; }
# brj
location = /favicon.ico { access_log off; log_not_found off; }
location ~ /\. { access_log off; log_not_found off; deny all; }
location ~ ~$ { access_log off; log_not_found off; deny all; }
# Некоторые настройки fastcgi для обработки php-файлов
location ~ \.php {
try_files $uri =404;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
}
}
При первом запуске, Pydio выведет страницу теста, на которой отобразит возможные проблемы, будь то недоустановленный пакет php, неверная его версия и пр., проблемы безопасности данных (доступность частных файлов всему миру), проблемы с сертификатами и пр.
Существует противоречивое требование к php5-fpm от pydio и от ownCloud.
Pydio требует выключенной опции output_buffering = Off , ownCloud - включенной.
Исправление бага php5 ubuntu с отключенным модулем mcrypt:
ln -s /etc/php5/mods-available/mcrypt.ini /etc/php5/fpm/conf.d/20-mcrypt.ini
Исправление проблем безопасности файлов. Разграничение доступа
Здесь надо помнить, что при копировании файлов на веб-сервер, потом требуется задать владельца, т.к. часто владельцем оказывается root, что запрещает доступ к файлам.
Nginx обеспечивает запрещение доступа к отдельным каталогам (месторасположениям, location) веб-сервера, посредством директивы deny all в настройках конкретного виртуального сервера.
Например:
location /onlymyfiles {
deny all;
}
Peertracker - простейший трекер торрентов, который может быть установлен на собственный домашний компьютер и выступать в виде персонального трекера, посредством которого распространяются авторские (собственные) материалы. Т.е. статьи, изображения, скрипты, какие-то иные данные.
Устанавливается, как и любое веб-приложение, с некоторыми ручными операциями.
Для простейшего случая, домашнего трекера для небольшого количества файлов подойдет база данных sqllite3. Так что всех делов - это скопировать дистрибутив в папку сервера, создать конфигурацию nginx для этого сервера.
Это приложение, вообще ничего не показываеть пользователю веб-сервера, а тольк лишь принимает и отправляет информацию по определённому url адресу.
Т.е. можно этому трекеру выделить какой-то порт, и потом при создании торрент-файла, указывать url-адрес до этого трекера на домашнем компьютере, в качестве трекера и торрент клиент подключиться по url-адресу трекера, заполнит нужную информацию.
С технологической точки зрения, Трекер это сервисная программа обслуживающая специфические HTTP/HTTPS GET-запросы, которые
определены спецификацией протокола Bittorrent.
Для распространения собственных материалов, можно использовать посредника OpenBittorrent и его открытый (без регистрации и пр.) url.
1. Официальный сайт ownCloud. http://owncloud.org/
2. Официальный сайт nginx. http://nginx.org/ru/
3. Сайт по языку PHP5. http://www.php5.ru/
4. Официальный сайт Pydio. https://pydio.com/
5. Сайт сообщества Pydio. http://pyd.io/
6. Загрузка Pydio. http://pyd.io/download/
7. http://pyd.io/nginx/
8. Сертификаты: http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/certificates
9. Свободный трекер Openbittorrent: http://openbittorrent.com/
10. Установка ownCloud. http://doc.owncloud.org/server/6.0/admin_manual/installation/installation_source.html
11. Подготовленные репозитории для дистрибутивов Linux. http://software.opensuse.org/download/package?project=isv:ownCloud:community&package=owncloud
Ресурсы простым списком, использованные при поднятии сервера.
http://habrahabr.ru/post/208566/
http://habrahabr.ru/post/160237/
http://habrahabr.ru/post/154047/
http://habrahabr.ru/company/selectel/blog/213945/
http://www.php5.ru/study/webbasics
http://martin-denizet.com/nginx-configuration-for-pydio-with-ssl/
http://blackbe.lt/setting-up-utf-8-encoding-in-php-and-mysql/
Свой WebDAV сервер на nginx. http://xandroskin.ru/it/svoj-webdav-server-na-nginx/495
Обработка регулярок в nginx. http://xandroskin.ru/it/obrabotka-regulyarok-v-nginx/597
http://vds-admin.ru/nginx/nastroika-svyazki-nginx-apache-fastcgi
В данном случае, для этого будет поднято т.н. собственное облако - домашнее облако - персональное облако, на собственном домашнем компьютере/сервере.
Вначале, я хочу кратко остановиться на требованиях к компьютерным конфигурациям, используемым для персонального домашнего облака.
Во первых, это должен быть не домашний настольный компьютер. Хотя я сплошь и рядом это нарушаю.
Во вторых, это должен быть тихий, малопотребляющий и компактный компьютер, чтобы он мог работать 24 часа в сутки, с минимальным вмешательством.
В третьих, это должен быть компьютер под управлением Linux.
В четвертых, он должен позволять удалённое управление, должен работать без клавиатуры и мыши, без монитора. Восстанавливаться и загружаться после потери питания.
В пятых, он должен иметь постоянное подключение к сети Интернет.
В шестых, должен поддерживать ftp,web-сервера, подключение webdav, ssh ftps, https, rsync, bittorrent и пр.
Я подобрал небольшие предварительные конфигурации для домашнего облака, которая возможно будет отвечать этим требованиям на сегодняшний момент (Май 2014 года).
1. Intel NUC (с процессором Celeron), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
2. Pegatrom Mercury L6 (с процессором Celeron, пассивное охлаждение), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
3. Сетевой жесткий диск WD Cloud, с модифицированной прошивкой.
Конфигурации начальные, обеспечивают цену домашнему облаку менее 11 тыс. руб.
И при текущей стоимости интернет-подключения ~450 руб./мес. 5500 руб. в год.
Если сравнить стоимость со стоимостью облачного хранения, например в Google за 120$ за терабайт, то возникают некоторые вопросы. Однако, домашнее, непосредственно доступное облако с некоторых позиций выглядит предпочтительнее.
Установка и настройка web-сервера nginx
Nginx - известный кэширующий веб-сервер.
Веб-сервер занимается тем, что отдает файлы с сервера, по протоколу http/https клиенту.
Подразумевается, что установка производиться на чистую систему, где нет других web-серверов. При их наличии, надо обязательно сделать резервирование, т.к. может происходит затирание некоторых настроек и пр.
В Ubuntu 14.04 он идёт в пакетах,
$ sudo apt-get install nginx
либо
$ sudo apt-get install nginx-extras
Последний пакет, нужен если будет (а он будет, удобно) использоваться протокол webdav на сервере, для каких-то иных целей. В ownCloud встроен собственный webdav, так что системный не задействуется, как я понимаю.
Но у меня заработало более менее с nginx-extras
Основной конфигурационный файл web-сервера nginx: /etc/nginx/nginx.conf
Конфигурация сайта по умолчанию, сразу после установки: /etc/nginx/sites-enabled/default,
/etc/nginx/sites-enabled - это ссылки на конфигурации сайтов которые будет работать после запуска сервиса nginx
/etc/nginx/sites-available - это конфигурации сайтов, как работающих так и в процессе настройки и конфигурирования (неработающих).
Сайт по-умолчанию, после установки работает на 80 порту и содержит приветствие nginx.
Просмотреть его можно по ссылке: http://localhost/
Пользователь добавленный в систему: www-data
Простейшая документация по web-серверу и его конфигурационному файлу: http://nginx.com/resources/admin-guide/web-server/
Теперь надо определиться с месторасположением (location) файлов web-сервера в локальной файловой системе компьютера.
Пусть это будет /srv/www
Создадим /srv/www и установим пользователя www-data у этого каталога.
# mkdir /srv/www
# chown -R www-data:www-data /srv/www
Сюда (в /srv/www) можно скопировать index.html файл из начального примера.
http://localhost/index.html
※※※
Предварительно устанавливаемые пакеты
autogen - генератор текстовых файлов по шаблону.
ntp - сервис "сетевая служба времени", понадобиться, видимо при синхронизации файлов между клиентами owncloud.
clamav - антивирусная проверка файлов.
К серверу добавится служба времени, служба антивируса, и обновления времени и баз сигнатур (отпечатков вирусов) антивируса.
※※※
Установка PHP5
PHP5 - дедушка Интернета. Использовался с очень древних пор. Но всё ещё продолжает использоваться. Кому-то нравиться.
Поиск пакетов в репозитории:
apt-cache search php5
apt-cache search php
Общий список устанавливаемых пакетов:
$ sudo apt-get install php5 php5-cgi php5-cli php5-common php-pear php5-fpm php5-mysqlnd php5-pgsql php5-sqlite php5-ldap php-xml-parserphp5-curl php5-dev php5-gd php5-imagick php5-intl php5-mcrypt
Базовая система
php5 - метапакет серверной части.
php5-cgi отдельный пакет, обеспечивающий связь Common Gateway Interface c php.
php5-cli
php5-common
php-pear
Отдельные модули php5
php5-fpm - PHP-FPM демон для запуска FastCGI сервера, для обработка php-программ.
php5-mysqlnd - родной пакет для поддержки связи php и субд mysql
php5-pgsql - пакет для поддержки связи php и субд postgresql
php5-sqlite - пакет для поддержки связи php и субд sqlite
php5-ldap - пакет для поддеркжи связи php и LDAP-серверов
php-apc - пакет для оптимизатора
php5-apc - если найдётся в пакетах
php-xml-parserphp5-curl
php5-dev
php5-gd
php5-imagick - поддерка связи php и imagick - утилиты и библиотеки обработки графических файлов
php5-intl - интернационализация
php5-mcrypt - поддержка какого-то кодирования
Конфигурационные файлы:
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini
В этих файлах надо настроить ограничения (снять) на размер загружаемого файла (обычное 2 Мб).
Установим максимальный размер загружаемого файла (пусть это будет архив, видео, резервный файл и т.п)
upload_max_filesize = 16G
Также приведём в соответствие максимальный размер POST-запроса, передаваемого серверу
post_max_size = 16G
Объём памяти выделяемый под загружаемый файл, пусть будет больше загружаемого файла, чтобы с запасом.
Единственное что, сложно - это размер памяти сервера, он достаточно мал, будет использоваться подкачка.
memory_limit = 20G
Плюс над протестировать в реальных условиях, а то может получить не очень хорошо.
Ещё кое что надо сделать в этих файлах (/etc/php5/fpm/php.ini):
cgi.fix_pathinfo=0
После внесения изменений перезапустить php5-fpm:
# service php5-fpm restart
Долго не мог понять, почему не изменяется размер возможного загружаемое файла в ownCloud, вроде все опции настроил по инструкции, перезапускал и сервер и php-rpm. Решение оказалось банальным - перезапустить компьютер. Что-то, где-то, видимо было недообновлено.
※※※
Опционально. Установка СУБД mySQL
Для домашнего использования, совсем необязательно использовать mysql сервер и настраивать его. Достаточно использовать sqlite3.
# apt-get install mysql-server mysql-client
Настройку mysql, но я выбираю postgresql приведу возможно позже, в рамках другой заметки.
※※※
Подготовка и установка цифровых сертификатов подлинности сервера
Самоподписанные сертификаты позволяют без затрат денег, установить "заглушку" в протокол https, т.е. всё будет почти также работать как с настоящими сертификатами, но только при открытии сайта (в данном случае облака) обычные браузеры будут сообщать о риске и недоверенном узле. Тут надо будет добавить в список исключений этот сертификат облака и тогда на это можно будет не обращать внимания. Разве только красным цветом выделение надписи https будет "напрягать".
В результате мы должны получить 2 файла:
microserver.key - частный (приватный) ключ
microserver.crt - самоподписанный сертификат виртуального сервера
Инструкцию с описанием шагов по генерации самоподписанных сертификатов можно посмотреть на ресурсе [8].
Здесь просто последовательность команд, выполнение которых обеспечит достижение цели данного руководства.
openssl genrsa -des3 -out microserver.key 2048
openssl rsa -in microserver.key -out microserver.key.insecure
mv microserver.key microserver.key.secure
mv microserver.key.insecure microserver.key
openssl req -new -key microserver.key -out microserver.csr
openssl x509 -req -days 365 -in microserver.csr -signkey microserver.key -out microserver.crt
Скопировать их в хранилище сертификатов и ключей.
sudo cp microserver.crt /etc/ssl/certs
sudo cp microserver.key /etc/ssl/private
Пути к этим файлам, будут позже прописаны в конфигурации виртуального хоста nginx, чтобы сервер мог осуществлять https-соединения.
※※※
Подготовка к установке ownCloud
Для установки ownCloud в Ubuntu 14.04, проще всего подключить репозиторий, c сайта проекта[11]:$ wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_14.04/Release.key
$ sudo apt-key add - < Release.key
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud.list"
$ sudo apt-get update
$ sudo apt-get install owncloud
Если все ранее указанные пакеты программ были установлены ранее, то эта команда установить чистую систему персонального облака. Т.е. все зависимости облака выявлены и понятно, какие компоненты добавлены в систему сервера. Это важно понимать, чтобы проверить на возможные возникшие дыры и т.п.
Может потребоваться деинсталляция пакета apache2, т.к. здесь используется nginx.
Облако будет установлено в стандартную папку сайтов: /var/www, под именем owncloud.
Конфигурационный файл облака: /var/www/owncloud/config/config.php
Важная опция trusted_domain, она отвечает за домены с которых будут подключения. Важна, при выводе облака в общую сеть Интернет.
Для начала, лучше подготовить каталог, папку, том(volume), точку монтирования, которая будет выступать в качестве хранилища данных для собственного облака.
Очень часто, хранилище располагается на томе lvm, что даёт некоторые гибкие возможности по увеличению места, но я исповедую иной подход, т.к. увеличение места может закончиться неудачно, а данные огромны и просто так их не зарезервируешь.
Если этого не сделать, то данные будут храниться в папке по умолчанию: /var/www/owncloud/data, что не всегда безопасно, т.к. грозит удалением, при обновлении сервиса.
※※※
Настройка безопасного подключения к облаку ownCloud
"Безопасное подключение" - это использование протокола http поверх (внутри) ssl/tls, с ассиметричным шифрованием данных.
Теперь надо настроить виртуальный www-сервер (vhost nginx) на использование owncloud.
Для начала:
Доменное имя, по которому облако будет доступно: my.domain.name
В частных случаях, это может быть динамическое доменное имя (от сервисов подобных twodns, dyndns).
Если облако доступно только в домашней сети - что не имеет особого смысла, то это может быть avahi-домен, либо IP-адрес внутренней сети.
Т.е. если набрать в браузере https://my.domain.name/, то мы должны попасть на страницу регистрации (login).
Обычно, обычные пользователи используют какой-либо маршрутизатор, которые и принимает белый ip-адрес от провайдера, а остальным домашним клиентам выдаёт "серые" из диапазона неподключенных сетей.
В этом случае, надо делать проброс портов на роутере, регистрацию динамического доменного имени (например twodns), чтобы таки получить возможность в строке браузера набрать https://my.domain.name/.
Также стоит заметить, что многие провайдеры фильтруют порты до 1024 от внешних обращений, тогда надо порт на котором будет слушать сервер, сдвинуть вверх, например 12443 и при указании адреса в строке указывать и порт: https://my.domain.name:12443/
На время тестирования к серверу можно обращаться по localhost,ip-адресу и пр.
# Виртуальный сервер "Персональное облако"
# сервер: микросервер
# дата: 29.05.2014
server {
listen 443 ssl;
listen 80 default_server;
server_name default 'my.domain.name' '192.168.1.11';
# Корень сайта - корень облака
root /var/www/owncloud;
# if ($http_host != "my.domain.name") {
# rewrite ^ http://my.domain.name$request_uri permanent;
# }
index index.php index.html;
# Иконка сайта, отображаемая в адресной строке
location = /favicon.ico {
log_not_found off;
access_log off;
}
location = /robots.txt {
allow all;
log_not_found off;
access_log off;
}
# Запрет доступа к скрытым файлам .htaccess, .htpasswd.
location ~ /\. {
deny all;
access_log off;
log_not_found off;
}
# Самоподписанный сертификат и частный незапароленный ключ сервера
ssl_certificate /etc/ssl/certs/microserver.crt;
ssl_certificate_key /etc/ssl/private/microserver.key;
client_max_body_size 16G; # set max upload size
rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
rewrite ^/apps/calendar/caldav.php /remote.php/caldav/ last;
rewrite ^/apps/contacts/carddav.php /remote.php/carddav/ last;
rewrite ^/apps/([^/]*)/(.*\.(css|php))$ /index.php?app=$1&getfile=$2 last;
rewrite ^/remote/(.*) /remote.php last;
# Страницы ошибок
error_page 403 = /core/templates/403.php;
error_page 404 = /core/templates/404.php;
# Запрет доступа к системным файлам облака ownCloud
location ~ ^/(data|config|\.ht|db_structure\.xml|README) {
deny all;
}
location / {
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$is_args$args;
}
location ~ ^(.+?\.php)(/.*)?$ {
try_files $1 =404;
include fastcgi_params;
fastcgi_param SCRIPT_FILENAME $document_root$1;
fastcgi_param PATH_INFO $2;
fastcgi_param HTTPS $https;
# fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
fastcgi_intercept_errors on;
fastcgi_index index.php;
fastcgi_buffers 64 4K;
}
location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
expires 30d;
access_log off;
}
}
Этим файлом можно (либо надо) заменить файл default расположенный в /etc/nginx/site-available/.
Также этот файл (и другие) включается в общую конфигурацию сервера nginx посредством директивы include в файле: /etc/nginx/nginx.conf .
У облака ownCloud есть конфигурационный файл, которые тоже требует внимания пользователя на момент установки.
Располагается в ownCloud/config/config.php
На начальном этапе установки, нас в нём будет интересовать опция trusted_domain - которая укажет какие домены облака доверенные. Будет это полное имя т.н. FQDN, либо просто внутренний ip-адрес, либо и то и другое.
Выглядит он так:
$ cat /var/www/owncloud/config/config.php
<?php
$CONFIG = array (
'instanceid' => 'oc2344a23abc',
'passwordsalt' => 'ab1137423168fd7c2a6223a6b520b',
'trusted_domain' =>
array (
0 => 'localhost:443', 1 => 'mir.local:443', 2 => 'my.domain.name:443'
),
'datadirectory' => '/mnt/oblako',
'dbtype' => 'sqlite3',
'version' => '6.0.3.1',
'installed' => true,
'allowZipDownload' => false,
);
Тут видно и точку монтирования заданную при установке облака - /mnt/oblako. Это отдельный том, общим объёмом около 50Гб.
По идее виртуальных сайтов, можно сделать несколько установок owncloud, каждую в свой отдельный каталог, для различных целей. Например, одно облако для просмотра коллекций, а другое только для загрузки или обмена с пользователями.
Либо один сайт с облаком для предварительного тестирования всяких возможностей, чтобы затем перенести в работающее облако.
Из недостатков системы (точнее интеграции её в систему) - это то, что хранение данных, ведётся из под пользователя www-data и сложно пополнять базу документов и пр., с помощью простого файлового менеджера. После загрузки файлов с помощью файлового менеджера, из консоли, надо обязательно изменить права владельца, со своих на www-data, либо использовать webdav подключение, либо монтировать файловую систему webdav. В этих случаях, действия с файлами, практически не отличаются от обычных, за исключением временных задержек. Со временем, тут главное терпение и ожидание завершения предыдущих операций.
※※※
Pydio и Nginx
Pydio - Put your data in orbit - ещё одна облачная система, которая может быть использована для целей домашнего облака.
Устанавливается тоже с некоторыми сложностями, но в части раздела PHP5 (уже установленного) почти совпадает с ownCloud.
Надо скачать установочный архив [6] и развернуть (разархивировать) его в каталог который будет использоваться под этот проект (сам проект, не данные). Настроить первоначальные права.
Пусть это будет /var/www/pydio
У меня это происходит так, под суперпользователем (root):
# unzip /home/gimmor/Загрузки/pydio-core-5.2.3.zip
# mv pydio-core-5.2.3 /var/www/pydio
# chown -R www-data /var/www/pydio
Далее, настройка конфигурации сервере nginx для использования pydio
За основу возьмём файл с ресурса [7] и подправим для своих условий.
server {
Сервер pydio временно будет сервером по-умолчанию
listen 80 default_server;
Сервер будет принимать безопасные соединения на 443 порту.
listen 443 ssl;
# Доменное имя, под которым сервер будет доступен
server_name localhost 'pydio.local' '192.168.5.37';
# Самоподписанный сертификат для виртуального сервера pydio и частный ключ
ssl_certificate /etc/ssl/certs/pydio-server.crt;
ssl_certificate_key /etc/ssl/private/pydio-server.key;
# Корень сервера, его месторасположение
root /var/www/pydio;
# Кодировка сервера по-умолчанию
charset utf-8;
# Главный индексный файл корня сервера
index index.php;
# Если мы пытаемся зайти по 80 порту, то будем перенаправлены
# Это заглушка временна, пока сервера окончательно не будут настроены
# Вполне возможно, что на 80 порту будет висеть какая-либо страница
if ($server_port = 80) {
rewrite ^ https://$host$request_uri permanent;
}
client_max_body_size 1G;
# Журнал доступа
access_log /var/log/nginx/pydio.access.log;
# Журнал ошибок
error_log /var/log/nginx/pydio.error.log;
# Месторасположение
location / {
}
location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
expires max;
add_header Pragma public;
add_header Cache-Control "public, must-revalidate, proxy-revalidate";
}
location = /conf/ { deny all; }
location = /data/ { deny all; }
# robots.txt определяет права для роботов индексаторов
location = /robots.txt { access_log off; log_not_found off; }
# brj
location = /favicon.ico { access_log off; log_not_found off; }
location ~ /\. { access_log off; log_not_found off; deny all; }
location ~ ~$ { access_log off; log_not_found off; deny all; }
# Некоторые настройки fastcgi для обработки php-файлов
location ~ \.php {
try_files $uri =404;
fastcgi_param QUERY_STRING $query_string;
fastcgi_param REQUEST_METHOD $request_method;
fastcgi_param CONTENT_TYPE $content_type;
fastcgi_param CONTENT_LENGTH $content_length;
fastcgi_param SCRIPT_NAME $fastcgi_script_name;
fastcgi_param SCRIPT_FILENAME $request_filename;
fastcgi_param REQUEST_URI $request_uri;
fastcgi_param DOCUMENT_URI $document_uri;
fastcgi_param DOCUMENT_ROOT $document_root;
fastcgi_param SERVER_PROTOCOL $server_protocol;
fastcgi_param GATEWAY_INTERFACE CGI/1.1;
fastcgi_param SERVER_SOFTWARE nginx;
fastcgi_param REMOTE_ADDR $remote_addr;
fastcgi_param REMOTE_PORT $remote_port;
fastcgi_param SERVER_ADDR $server_addr;
fastcgi_param SERVER_PORT $server_port;
fastcgi_param SERVER_NAME $server_name;
#fastcgi_pass unix:/var/run/php5-fpm.sock;
fastcgi_pass 127.0.0.1:9000;
}
}
При первом запуске, Pydio выведет страницу теста, на которой отобразит возможные проблемы, будь то недоустановленный пакет php, неверная его версия и пр., проблемы безопасности данных (доступность частных файлов всему миру), проблемы с сертификатами и пр.
Существует противоречивое требование к php5-fpm от pydio и от ownCloud.
Pydio требует выключенной опции output_buffering = Off , ownCloud - включенной.
Исправление бага php5 ubuntu с отключенным модулем mcrypt:
ln -s /etc/php5/mods-available/mcrypt.ini /etc/php5/fpm/conf.d/20-mcrypt.ini
Исправление проблем безопасности файлов. Разграничение доступа
Здесь надо помнить, что при копировании файлов на веб-сервер, потом требуется задать владельца, т.к. часто владельцем оказывается root, что запрещает доступ к файлам.
Nginx обеспечивает запрещение доступа к отдельным каталогам (месторасположениям, location) веб-сервера, посредством директивы deny all в настройках конкретного виртуального сервера.
Например:
location /onlymyfiles {
deny all;
}
Peertracker - bittorrent tracker
Peertracker - простейший трекер торрентов, который может быть установлен на собственный домашний компьютер и выступать в виде персонального трекера, посредством которого распространяются авторские (собственные) материалы. Т.е. статьи, изображения, скрипты, какие-то иные данные.
Устанавливается, как и любое веб-приложение, с некоторыми ручными операциями.
Для простейшего случая, домашнего трекера для небольшого количества файлов подойдет база данных sqllite3. Так что всех делов - это скопировать дистрибутив в папку сервера, создать конфигурацию nginx для этого сервера.
Это приложение, вообще ничего не показываеть пользователю веб-сервера, а тольк лишь принимает и отправляет информацию по определённому url адресу.
Т.е. можно этому трекеру выделить какой-то порт, и потом при создании торрент-файла, указывать url-адрес до этого трекера на домашнем компьютере, в качестве трекера и торрент клиент подключиться по url-адресу трекера, заполнит нужную информацию.
С технологической точки зрения, Трекер это сервисная программа обслуживающая специфические HTTP/HTTPS GET-запросы, которые
определены спецификацией протокола Bittorrent.
Для распространения собственных материалов, можно использовать посредника OpenBittorrent и его открытый (без регистрации и пр.) url.
http://tracker.openbittorrent.com:80/announce
При создании своего публично доступного торрент-файла, надо в списке трекеров указать http://tracker.openbittorrent.com:80/announce . Всё остальное сделает торрент-клиент. Пользователь полученного торрент-файла также может начать загрузку по получении торрент-файла.
Иногда, этот трекер часто оказывается единственно доступным, в списке торрент-трекеров, указанных в файле.
Для улучшения передачи файлов, надо стремиться исключить трекер, как посредника. Вполне рабочим способом является magnet-ссылка, которая даёт возможность не использовать трекер. Но у неё возникает другой посредник - распределённая хэш-таблица DHT.
Магнет-ссылка хороша тем, что её содержимое может передаваться в текстовой форме и отпадает необходимость создания торрент-файла (хотя торрент-клиенты делают это неявно).
Однако есть невыявленные пока сложности скачивания материалов с собственного трекера, возможно из-за особенностей (сложности) конфигурации нескольких компонентов.
※※※
Ресурсы
1. Официальный сайт ownCloud. http://owncloud.org/
2. Официальный сайт nginx. http://nginx.org/ru/
3. Сайт по языку PHP5. http://www.php5.ru/
4. Официальный сайт Pydio. https://pydio.com/
5. Сайт сообщества Pydio. http://pyd.io/
6. Загрузка Pydio. http://pyd.io/download/
7. http://pyd.io/nginx/
8. Сертификаты: http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/certificates
9. Свободный трекер Openbittorrent: http://openbittorrent.com/
10. Установка ownCloud. http://doc.owncloud.org/server/6.0/admin_manual/installation/installation_source.html
11. Подготовленные репозитории для дистрибутивов Linux. http://software.opensuse.org/download/package?project=isv:ownCloud:community&package=owncloud
Ресурсы простым списком, использованные при поднятии сервера.
http://habrahabr.ru/post/208566/
http://habrahabr.ru/post/160237/
http://habrahabr.ru/post/154047/
http://habrahabr.ru/company/selectel/blog/213945/
http://www.php5.ru/study/webbasics
http://martin-denizet.com/nginx-configuration-for-pydio-with-ssl/
http://blackbe.lt/setting-up-utf-8-encoding-in-php-and-mysql/
Свой WebDAV сервер на nginx. http://xandroskin.ru/it/svoj-webdav-server-na-nginx/495
Обработка регулярок в nginx. http://xandroskin.ru/it/obrabotka-regulyarok-v-nginx/597
http://vds-admin.ru/nginx/nastroika-svyazki-nginx-apache-fastcgi
※※※
※
Комментариев нет:
Отправить комментарий