ownCloud представляет собой Open Source решение для организации своего собственного dropbox-подобного хранилища файлов. Кроме, собственно, синхронизации файлов доступны так же дополнительные возможности, как то: синхронизация контактов, календарей (наличествует поддержка CalDAV) и задач, фотогалерея, проигрыватель аудио (с поддержкой протокола Ampache). Сервис работает в многопользовательском режиме, есть функционал общих папок.
Клиенты синхронизации доступны для Windows / Mac / Linux / Android, версия для iOS, по заверениям разработчиков, в финальной стадии. Наличествует достаточно интересная, но пока экспериментальная функция External Storage, позволяющая монтировать Dropbox и GDrive в папку с ownCloud.
Важной для меня функцией в Android-клиенте является Instant Upload, автоматически загружающий видео и фотографии в облако сразу после съёмки, аналогично клиенту Dropbox.
Проект достаточно сыроват, интерфейсы и стабильность работы клиентов оставляют желать лучшего, однако тот факт, что облако полностью управляемо и зашифровано перекрыл эти недостатки.
В качестве хостинга можно выбрать VDS или домашний сервер на антресоли.
Рассмотрим вариант с «домашним сервером».
В качестве железки выбран простенький неттоп, операционная система — Ubuntu Server 12.04, прямой ip и доменное имя. Храниться данные будут в зашифрованном LVM-разделе, доступ клиентов к серверу организован поверх SSL.
- Устанавливаем «голый» ubuntu server 12.04, в процессе установки не забываем про LVM-encrypted с устойчивой к подбору парольной фразой.
- Устанавливаем необходимые пакеты:
apt-get install apache2 php5 php5-common php5-gd php5-sqlite curl libcurl3 libcurl3-dev php5-curl - Скачиваем ownCloud:
wget download.owncloud.org/releases/owncloud-4.0.5.tar.bz2
(ссылку на последнюю версию можно взять непосредственно на сайте проекта) и распаковываем его:
tar -xjf owncloud-4.0.5.tar.bz2 - Копируем папку с ownCloud в корень web-сервера:
cp -r owncloud /var/www/ - Создаём необходимые папки
mkdir /var/www/owncloud/data
и меняем их владельца на www-data
chown -R www-data:www-data /var/www/owncloud/apps
chown -R www-data:www-data /var/www/owncloud/config
chown -R www-data:www-data /var/www/owncloud/data - Редактируем /etc/apache2/sites-enabled/000-default
Здесь AllowOverride=All в разделе «Directory /var/www» - Включаем модули rewrite, headers и ssl в apache:
a2enmod rewrite && a2enmod headers && a2enmod ssl - Устанавливаем openssl:
apt-get install openssl (вероятно, уже установлен)
генерируем самоподписанные сертификаты и размещаем их по соответствующим папкам:
openssl genrsa -des3 -out server.key 1024
mv server.key server.key.old
openssl rsa -in server.key.old -out server.key
openssl req -new -key server.key -out cert.csr
openssl x509 -req -days 365 -in cert.csr -signkey server.key -out cert.crt
mv cert.crt /etc/ssl/certs/
mv server.key /etc/ssl/private/ - Редактируем /etc/apache2/sites-available/default-ssl
Указываем в SSLCertificateFile сгенерированный ранее сертификат /etc/ssl/certs/cert.crt, а в SSLCertificateKeyFile свой ключ /etc/ssl/private/server.key
Не забываем также указать имя домена и сайта. - Указываем апачу основной сайт:
a2ensite default-ssl - Рестартим апач:
service apache2 reload
На этом этап установки завершён, далее нужно будет настроить, собственно owncloud. - Заходим по адресу yourip.address/owncloud, принимаем самоподписанный сертификат, проходим все необходимые шаги (точнее, всего один шаг) по настройке ownCloud. Попадаем в достаточно приятный веб-интерфейс.
- Далее устанавливаем на компьютерах/смартфонах клиенты. Настройка клиента сводится к указанию адреса owncloud — yourip.address/owncloud, вводу имени и пароля и конечной папки на компьютере. Не забываем в адресе указать https, а не http.
На практике работает всё очень похоже с dropbox — заливаешь файл, он «расползается» по всем клиентам. Снимаешь на камеру Android-смартфона — изображение или видео через некоторое время попадает на компьютер. Особо хочу отметить, что Android-клиент поддерживает общесистемную функцию Easy Share Action, потому практически из любого приложения файл можно поместить в ownCloud.
ownCloud имеет встроенную поддержку WebDAV, потому на большинстве десктопных ОС можно обойтись вообще без клиентского приложения (в случае, если например неважна синхронизация, а нужен только доступ к файлам). Непосредственно на сервере данные хранятся в виде обычных файлов и, если включить фантазию и засучить рукава, можно совместить ownCloud с FTP/AFP/Samba-сервером, организовать автоматическое скачивание торрентов посредством rtorrent, а в корпоративных средах открываются поистине безграничные возможности организации доступа к файлам. В общем, всё ограничивается вашей фантазией.
Функционал легко расширяется с помощью дополнительных плагинов (Applications в терминологии ownCloud). Например, в случае физической невозможности зашифровать диск сервера можно воспользоваться плагином Encryption, тогда всё содержимое облако будет зашифровано встроенными средствами.
Объём хранилища ограничен только вашим жёстким диском. Облако в 2Tb — не вопрос. Поддержка версионности файлов наличествует. Один десктопный клиент, кстати, может подключаться к нескольким ownCloud облакам одновременно.
Скорость работы зависит в основном от ширины канала клиента и сервера. В моём случае почти все клиенты и сервер располагаются в пределах одного провайдера, потому видео с телефона заливается в облако очень быстро, несравнимо быстрее, чем в dropbox.
У данного решения с LVM-encrypted диском есть один недостаток — в случае перезагрузки мы потеряем удалённый доступ к серверу, поскольку при загрузке система будет просить парольную фразу для расшифровки диска на физической консоли. Так же из недостатков замечено, что при активной работе клиентов сервис апача на сервере неслабо отъедает процессорные ресурсы.
В итоге у нас получилось свой Dropbox с защищённым доступом и дамами, с клиентами под распространённые платформы. ownCloud, фактически, даёт возможность воспользоваться многими приятностями облачных технологий не требуя ответную жертву в виде приватности.
От себя всячески желаю проекту дальнейшего развития и процветания.
via @habrahabr