Опыт установки ownCloud 6 на Debian 7 wheezy

image

Здравствуйте, хабравчане! Сегодня я хотел бы рассказать о персональном облачном хранилище ownCloud и его установке.

Для нас уже стало обыденным использование таких сервисов как Dropbox, Google Drive, SkyDrive или даже Облако Mail.Ru, мы пользуемся их услугами каждый день не обращая внимание на явные недостатки тех или иных серверов. На одном, сервисе мало места, на другом нет локализации, на третьем ненадежное хранилище, на четвертом кривой интерфейс и так далее, но у всех этих сервисов есть общий существенный недостаток — ваши данные всегда хранятся на неконтролируемых вами серверах. В случае когда необходимо использовать сервисы для размещения данных не имеющих для вас большой ценности — этих сервисов должно полностью хватить. В случае если, необходима защита контента, полная конфиденциальность, безопасность, неограниченное количество свободного места, возможность организовать многопользовательский доступ для работы в группах, контроль версий, синхронизация, возможность просматривать документы, таблицы, изображения, видеоматериалы, аудиозаписи, заметки из любой точки мира без необходимости их загрузки — ownCloud это то что вам нужно.

Давайте подробнее рассмотрим ownCloud и попробуем его установить

OwnCloud переводиться буквально как «собственное облако». Это CMS с открытым кодом, которое можно загрузить на свой компьютер и позднее установить его на хостинг или собственный сервер. По функциональности ownCloud не отстает от ведущих компаний в мире облачных хранилищ, а некоторых превосходит.

image

За простым лаконичным интерфейсом скрывается большой функционал расширяемый еще более с помощью предустановленных модулей и собственного App store представленного на официальном сайте.

Возможности ownCloud «из коробки»:



  • Многопоточная загрузка данных «перетягиванием» при помощи технологии Drag-and-drop
  • Редактирование прав на доступ к файлам для конкретных пользователей, групп или интернета
  • Подключение и просмотр новостных RSS лент
  • Просмотр изображений, видео, офисных документов
  • Синхронизируемый календарь, менеджер задач, менеджер контактов, менеджер веб закладок
  • Отслеживание активности пользователей
  • Защищенное соединение, шифрование данных, LDAP\WebDAV аутентификация
  • Поддержка внешних хранилищ: Google Drive, Dropbox, FTP, SMB, WebDAV, Amazon S3, IRODS, OpenStack Object Storage, а так же локальных
  • Клиентские приложения с полной синхронизацией для всех актуальных платформ


Это всего лишь краткий список возможностей ownCloud, но уже сейчас видны его преимущества. При желании можно добавить почтовый клиент, торрент клиент, чат с видео, полноценный офис, проверку фалов на VirusTotal и многое другое.

Перейдем от теории к практике.

Установка ownCloud на сервер под управлением Debian 7 wheezy


1.Установка базового ПО


Прежде чем начинать давайте убедимся что наша система в актуальном состоянии.
Открываем терминал и вводим:
sudo apt-get update && sudo apt-get upgrade

Эти две простые команды обновят все программы на нашем сервере, процесс может занять длительное время в зависимости от скорости интернета и нашего сервера.

Теперь, можно приступить к установке необходимого для работы ownCloud программного обеспечения:
sudo apt-get install apache2 php5 php5-common php5-gd php5-intl php5-mcrypt php5-cli php5-ldap php5-sqlite curl libcurl3 libcurl4-openssl-dev php5-curl php-apc php5-mysql ffmpeg 

Теперь у нас есть все необходимое для быстрого развертывания ownCloud на нашем сервере и можно переходить к пункту 4 или продолжить полную установку вместе со мной.

2.Установка MySQL


Устанавливаем MySQL:
apt-get install mysql-client mysql-server

Создаем пароль для базы данных MySQL и идем дальше.

Важно: пароль не должен совпадать с паролем суперпользователя.

Теперь немножко позаботимся о нашей безопасности, вводим в консоль:
mysql_secure_installation 

На все вопросы кроме «Change the root password» (Если не хотите менять пароль MySQL) отвечаем положительно Y.

Входим в консоль управления MySQL и вводим пароль (его не видно):
 mysql -u root -p 

Создаем базу данных:
 create database Имя_БД; 

Создаем пользователя, желательно с именем как и у базы данных:
 create user 'Имя_пользователя'@'localhost' IDENTIFIED BY 'Новый_пароль'; 

Важно: пароль не должен совпадать с паролем суперпользователя.

Передаем созданному пользователю полные права на созданную базу данных:
 GRANT ALL ON Имя_БД.* to 'Имя_пользователя'@'localhost' ; 

Выходим:
 quit 


3.Установка ntp для синхронизации времени на сервере


Устанавливаем ntp клиент:
 apt-get install ntp ntpdate 

Теперь меняем сервер синхронизации времени на ближайший:
 sudo gedit /etc/ntp.conf 

В открывшемся фале находим:
server 0.debian.pool.ntp.org iburst dynamic
server 1.debian.pool.ntp.org iburst dynamic
server 2.debian.pool.ntp.org iburst dynamic
server 3.debian.pool.ntp.org iburst dynamic

Меняем на адреса ближайших к нам npt серверов, например на:
server 0.ru.pool.ntp.org iburst dynamic
server 1.ru.pool.ntp.org iburst dynamic
server 2.ru.pool.ntp.org iburst dynamic
server 3.ru.pool.ntp.org iburst dynamic

Сохраняем и выходим из редактора.

Чтобы проверить правильность времени достаточно ввести в терминале:
 ntpdate 0.ru.pool.ntp.org 

Если время на нашем сервере не соответствует времени полученному с ntp сервера вводим:
 ntpdate -bs 0.ru.pool.ntp.org 


4.Настройка


Редактируем файл /etc/apache2/sites-enabled/000-default:
 sudo gedit /etc/apache2/sites-enabled/000-default 

Находим строчку в разделе "<Directory /var/www/>":
AllowOverride None

Меняем на:
AllowOverride All

Сохраняем файл и выходим.

Перезапускаем apache:
 service apache2 restart 

Редактируем php.ini:
 sudo gedit /etc/php5/apache2/php.ini 

Находим строчки:
mysql.default_socket =
mysql.cache_size =
memory_limit = 
post_max_size =  
upload_max_filesize =

Меняем на:
mysql.default_socket=/var/run/mysqld/mysqld.sock
mysql.cache_size = 4000
upload_max_filesize = 1024M       //максимальный размер файла который мы можем загрузить на наш сайт
post_max_size = 1024M                //Должен быть больше или равен upload_max_filesize 
memory_limit = 1024M                  //Должен быть больше или равен post_max_size

Сохраняем файл и выходим.

Перезапускам apache еще раз:
 service apache2 restart 


5.Установка ownCloud


Загружаем последнюю версию ownCloud, на момент написания ownCloud 6:
 cd /var/www/ 

 wget http://download.owncloud.org/community/owncloud-6.0.0a.tar.bz2 


Также, можно просто скачать последнюю версию с официального сайта ownCloud в папку /var/www/

Распаковываем:
 tar -xvf owncloud-6.0.0a.tar.bz2 


Выставляем права:
 sudo chown -R www-data:www-data /var/www/owncloud/ 


Теперь наш сайт готов, остался только маленький штрих, открываем в браузере localhost/owncloud


А) Для тех кто сразу перешел на пункт 4: Придумываем login и пароль для администратора — входим
B) Для тех кто установил MySQL: Придумываем login и пароль для администратора, выбираем «advanced» затем «MySQL» и вводим имя ранее созданного пользователя базы данных, его пароль, имя самой базы данных, в поле Database host пишем localhost.

Готово! Теперь вы счастливый обладатель персонального облака owncloud с синхронизацией на всех устройствах в вашей домашней сети, для этого достаточно набрать в браузере ваш_внутренний_IP/ownCloud или если вы подключены к интернету напрямую можно получить доступ к owncloud набрав внешний_IP/ownCloud.

Настройка доступа к ownCloud из интернета через рутер



Рассмотрим пример на основе роутера asus rt-n16:

Из браузера заходим на адрес 192.168.1.1, вводим логин и пароль и входим в веб интерфейс роутера:

веб интерфейс

1. Переходим во вкладку «интернет» 2. Переходим во вкладку «переадресация портов» (Virtual Server / Port Forwarding) 3. Включаем переадресацию.
Меню переадресации портов

4. Выбираем уже заботливо подготовленные для нас профили: FTP и HTTP.
Выбор подготовленных профилей

5. Выбираем внутренний IP адрес нашего сервера («ip a» в терминале, адрес вида 192.168.1.X или 192.168.0.X) и нажимаем "+" что бы добавить в список
Выбор внутреннего IP сервера

6. По аналогии заполняем и добавляем нужные нам порты, затем нажимаем кнопку «Применить»
Список портов для ownCloud


Заметки



1. Некорректная установка приложения в разделе Apps


В случае если после включения приложения веб сайт начал некорректно работать я нашел 3 решения:
1.Полная переустановка.
2.Очистить базу данных созданную для owncloud в phpmyadmin и удалить файл:
rm -f \var\www\owncloud\config\config.php  

3.Наверное самый приятный вариант, переместить папку с приложением после которого начались проблемы из папки \var\www\owncloud\apps в любую другую, проверить что сайт работает, вернуть папку на место и не трогать до фикса.


2. Авто login пользователя как только он заходит на сайт
1. Создаем в админ панели пользователя, к примеру Gman с паролем noclip.
2. Открываем файл base.php:
 Sudo gedit /var/www/owncloud/lib/base.php 

3. В самом конце находим строчи:
	protected static function tryBasicAuthLogin() {
		if (!isset($_SERVER["PHP_AUTH_USER"])
			|| !isset($_SERVER["PHP_AUTH_PW"])
		) {
			return false;
		}
		OC_App::loadApps(array('authentication'));
		if (OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) {
			//OC_Log::write('core',"Logged in with HTTP Authentication", OC_Log::DEBUG);


Заменяем на

	protected static function tryBasicAuthLogin() {
		//if (!isset($_SERVER["PHP_AUTH_USER"])
		//	|| !isset($_SERVER["PHP_AUTH_PW"])
		//) {
		//	return false;
		//}
                if (OC_User::login(Gman, noclip)) {
		OC_App::loadApps(array('authentication'));
		//if (OC_User::login($_SERVER["PHP_AUTH_USER"], $_SERVER["PHP_AUTH_PW"])) {
			//OC_Log::write('core',"Logged in with HTTP Authentication", OC_Log::DEBUG);


3. Запрет на удаление файлов
1. Открываем fileactions.js
 Sudo gedit /var/www/owncloud/apps/files/js/fileactions.js 

2. Ищем следующие строки:
	remove the existing delete action
		parent.parent().children().last().find('.action.delete').remove();
		if (actions['Delete']) {
			var img = FileActions.icons['Delete'];
			if (img.call) {
				img = img(file);
			}
			if (typeof trashBinApp !== 'undefined' && trashBinApp) {
				var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete delete-icon" />';
			} else {
				var html = '<a href="#" class="action delete delete-icon" />';
			}
			var element = $(html);
			element.data('action', actions['Delete']);
			element.on('click', {a: null, elem: parent, actionFunc: actions['Delete']}, actionHandler);
			parent.parent().children().last().append(element);
		} 

3. Комментируем их:
	// remove the existing delete action
	//	parent.parent().children().last().find('.action.delete').remove();
	//	if (actions['Delete']) {
	//		var img = FileActions.icons['Delete'];
	//		if (img.call) {
	//			img = img(file);
	//		}
	//		if (typeof trashBinApp !== 'undefined' && trashBinApp) {
	//			var html = '<a href="#" original-title="' + t('files', 'Delete permanently') + '" class="action delete delete-icon" />';
	//		} else {
	//			var html = '<a href="#" class="action delete delete-icon" />';
	//		}
	//		var element = $(html);
	//		element.data('action', actions['Delete']);
	//		element.on('click', {a: null, elem: parent, actionFunc: actions['Delete']}, actionHandler);
	//		parent.parent().children().last().append(element);
	//	} 


4. Открываем:
 Sudo gedit /var/www/owncloud/apps/files/js/files.js 


5. Находим следующие строчки:

 $('.delete-selected').click(function(event) {
		var files=getSelectedFilesTrash('name');
		event.preventDefault();
		FileList.do_delete(files);
		return false;
	}); 


6. Комментируем их:
 //$('.delete-selected').click(function(event) {
	//	var files=getSelectedFilesTrash('name');
	//	event.preventDefault();
	//	FileList.do_delete(files);
	//	return false;
//	}); 


P.S. Хочу поблагодарить пользователя paullarionov за его великолепную статью о файловых хранилищах, а так же KuniLinux за статью про установку ownCloud 4 на Ubuntu 12.04, именно его статья вдохновила меня на написание более расширенной и актуализированной статьи.
Share post
AdBlock has stolen the banner, but banners are not teeth — they will be back

More
Ads

Comments 28

    0
    О кстати, а вы 6-ю версию к S3 не пробовали подключать?
    У меня оно никак не хочет, говорит что «Exception: The request signature we calculated does not match the signature you provided. Check your key and signing method.». При этом, те же самые данные для доступа к S3 корректно отрабатывают через s3cmd.
      0
      Нет, для моих задач мне хватило встроенного функционала и анонимной загрузки без возможности удаления.
      0
      Как раз вчера начал любопытствовать ownCloud'ом, но везде довольны старые статьи были. Ваша статья очень кстати, спасибо.

      В старых статьях читал, что могут быть проблемы с синхронизацией файлов если на устройстве и сервере разное время, эта проблема еще осталась?
        0
        Похоже что нет, я перевел часы на android клиенте и все работает.
      • UFO just landed and posted this here
          0
          Как, собственно, и создание дополнительного юзера MySQL — пароль root задаётся при установке, а после скармливается установочному скрипту, тот автоматом создаёт себе пользователя и про рута забывает.
          Да и зачем что-то качать… Официальный мануал гласит — добавьте репозитарий и ставьте классически.
            0
            MySQL там работает очень странно, лучше на всякий случай создать специальную базу под owncloud. По поводу репозиториев, из репозитория ставить не стоит, всегда приятней видеть что происходит и если что, ты всегда знаешь где именно произошла ошибка.
            0
            Я его зря написал, думал сделать пару скринов с созданием БД в phpmyadmin и добавить процесс очистки бд, после неудачной попытки установки приложения в owncloud, но в итоге подумал что не стоит забивать статью лишней информацией.
            0
            Я из репозитория ставил. Не удобнее когда пакеты самостоятельно обновляются? Если сервер особо ценный — можно на виртуальной машине развернуть.
              0
              Как у вас с быстродействием? На Raspberry PI добавление любого, даже самого мелкого, файла занимает несколько секунд. Поэтому от синхронизации в стиле дропбокса пришлось отказаться.
                0
                Он меееедленный. У меня на Core-i5 домашнего сервера задумывается изрядно.
                • UFO just landed and posted this here
                    0
                    Попробую, спасибо.
                  • UFO just landed and posted this here
                      0
                      поясните? Я могу перевести каталоги в tmpfs, но не знаю которые.
                      • UFO just landed and posted this here
                          –1
                          Спасибо за информацию. Буду изучать. Ловите плюс))
                            0
                            Быстрее забегало, вроде))
                      0
                      Работает очень шустро.
                      _______________________________________________________________________________________________________________________________
                      Core i7-2630QM, Тактовая частота (MHz): 2000, Кэш 2-го уровня (Kb): 1024, Кэш 3-го уровня (Kb): 6144, Объем (Mb): 4096, Тип: DDR3-1333, жесткий диск: sata 5400 оборотов, канал 100 Мбит/с
                        0
                        Наверно я не умею его готовить. У меня дефолтная установка из репозитория.
                      0
                      Не так давно ставил из оф. репозиториев на виртуалки.
                      Хотелось распределить нагрузку, поэтому облако было поднято на 2-х витуалках (ubuntu 12.04) и во фронэнде стоял nginx с проксированием.
                      Сейчас бьюсь над проблемой синхронизации баз MYSQL (ибо там хранятся: действия, настройки шар, приложения и т.д.) и если пользователь сегодня попал напервый сервер и расшарил там папку а завтра nginx бросил его на второй — шары не будет и т.д.

                      Ищу способ сделать репликацию баз MYSQL master — master или двигаться в сторону поднятия кластера.

                      Кстати, может кто даст идею на чем кластер сделать?

                      P.S. мобильные клиенты платные
                        0
                        P.S. мобильные клиенты платные
                        Клиент по Android можно найти в интернете. А можно создать им одну БД на одном из серверов, я так понял файлы идентичны на обеих серверах?
                        0
                        Вот sqlinfo.ru/articles/info/8.html
                        а можно просто репликацией с помощью бинарных логов.
                          0
                          А seafile пробовали?
                          seafile.com/en/download/
                            0
                            Хорошая идея, надо попробовать, может даже статью напишу))
                            +1
                            Все понимаю, но почему *.debian.pool.ntp.org для Вас «дальше», чем *.pool.ntp.org?

                            Вы тогда уже *.ru.pool.ntp.org пропишите, чтобы географически ближе оказалось.

                            Причем, как со многими вопросами веры, Вам нужно переживать не за географию, а за stratum сервера, который Вам выдастся — ntp расстояние обработает, а вот упавший сервер, так же, как и сервер с большим stratum, может и повлиять не в лучшую сторону.
                              0
                              Спасибо, пожалуй стоит поменять.
                            • UFO just landed and posted this here

                              Only users with full accounts can post comments. Log in, please.