Делаем собственное облако. OwnCloud+Let’s Encrypt

Наверняка вы пользуетесь какими-либо хранилищами данных в интернете. Если у вас есть почта в Gmail, значит автоматически у вас есть аккаунт в Drive.Google и именно там хранится ваша почта. Если почта от Yandex, то, точно также, вы используете Yandex.Диск. Есть еще множество вариантов облачных хранилищ. Есть платные и бесплатные, с разными характеристиками. Вы можете выбирать исходя из имеющейся задачи сохранения тех или иных данных. Но у всех этих хранилищ есть существенный недостаток — вы их абсолютно не контролируете. Кроме того, и это не секрет, те же Google и Yandex читаю вашу почту, просматривают ваши файлы для таргетирования рекламы. Менее именитые хранилища порой становились фигурантами утечек данных об аккаунтах пользователей, а значит хранимая в них информация подвергалась разной степени компрометации.

В общем очевидно, что неплохо было бы иметь собственное хранилище данных. Возможно не очень большое, но пригодное для хранения чувствительной информации. Конечно же подключение и обмен с таким хранилищем должны быть защищены. Само хранилище желательно расположить там, где до него не дотянутся Яровая и прочие Мизулины. Ну и хранимые файлы не блохо бы зашифровать. Вперед, к облакам!

В этой статье будет рассказано, как установить и настроить собственное хранилище на базе решения ownCloud. Нам подойдет любой VPS с количеством оперативной памяти от 512МБ.  Вычислительные способности не очень важны, если пользоваться хранилищем будет малое число клиентов. А вот места на жестком желательно побольше. Сколько именно — решать вам. Применение SSD, опять же, при малом числе клиентов, не обязательно. Трафик тоже прикидывайте сами. Если у вас хранилище в районе 100ГБ, то и 512ГБ исходящего трафика в месяц будет достаточно. Важнее, чтобы реальная скорость канала была большая. Не стоит гнаться за тарифами с безлимитным трафиком, но с плохими каналами.

Небольшое отступление: Есть ответвление от ownCloud под названием Nextcloud. Он новее и прогрессивнее, но пока не блещет стабильностью и поддержкой. Ветки не сильно разошлись и Nexcloud настривается точно также. Для ознакомления и пробы сил я всё-таки рекомендую ownCloud. Он лучше документирован, по нему море статей, все баги и особенности давно разобраны.

Под ownCloud нам потребуется установить и настроить LEMP сервер. Устанавливать его мы будем на CentOS 7 x64. Желательно использовать дистрибутив с минимальным набором пакетов. Такой есть у любого хостера, называться будет примерно так: centos-7-x86_64-minimal. Все необходимые пакеты мы поставим в процессе настройки. Минимальный дистрибутив позволит избежать конфликтов пакетов и занятых портов.

Ещё нам понадобиться доменное имя. Второго или третьего уровня. Возможно у вас уже есть какой-нибудь домен. Тогда вы можете сделать поддомен вида, например, mycloud.example.com

Или же вы давно хотели заиметь свой домен (например для почты), но всё не решались. Тогда самое время перейти на сайт регистратора (godaddy.com, reg.ruhostsailor.com и тысячи их) и зарегистрировать доменное имя. Естественно, это будет стоить денег. Причем ежегодно. Можно получить доменное имя бесплатно. Например, перейдём на dot.tk и поищем свободное имя в зонах .tk .ml .ga .cf .gq

Если у вас уже есть домен, то просто добавьте А запись, вида (вместо 123.123.123.123 вставить IP-адрес вашего VPS):

Если вы решили получить новый платный домент, то действуйте по инструкциям выбранного регистратора, а потом добавьте А запись, как показано выше.

Если ваш маленький еврей бунтует, то продолжим получать бесплатный домен у dot.tk

Как видите, я выбрал для домена такое немного колхозное, но понятное  имя mydomen.ml (я знаю, что правильно mydomain, но все простые имена уже были заняты или платные). На его примере я и буду рассказывать дальше.

Так как у вас еще нет своего сайта/блога/etc, то вместо 123.123.123.123 вписываете IP-адрес вашего VPS.

Дальше вам предложат зарегистрироваться и домен за вами. Попадаем в clientarea

В принципе, мой домен уже смотрит на мой VPS и на этом можно было бы остановиться. Но это не правильно. ownCloud это сервис, один из многих, которые можно привязать к домену. Поэтому мы не будем тратить домен второго уровня на ownCloud, а сделаем как написано выше, домен третьего уровня.

Откроем консоль управления доменом.

Откроем управление DNS-записями

И добавим запись. Нужно заполнить новую запись в разделе Add Record (выделено красным). Вместо 123.123.123.123 вписываете IP-адрес своего VPS

Не забудьте нажать кнопку «Save Changes» под новой записью.

Так мы создадим домен третьего уровня, ведущий на наш VPS с ownCloud.

В дальнейшем, в том месте, где обведено зелёным, вы сможете написать другой IP. Например IP сервера с вашим сайтом.

Тогда домен mydomen.ml будет вести на сайт, а домен mycloud.mydomen.ml на VPS с ownCloud. Сейчас и тот и другой ведут на ваш VPS.

Мы будем использовать mycloud.mydomen.ml

Все дальнейшие настройки выполнены в VPS от hostsailor.com

Настройте SSH и подключитесь к серверу с помощью Pytty и WinSCP по этой инструкции.

Выполним стандартные телодвижения по подготовке CentOS к работе:

Установим web-сервер Nginx:

Добавим репозиторий webtatic (предоставляет для CentOS пакеты, относящиеся к PHP):

Теперь установим PHP7-FPM и еще несколько дополнительных пакетов  (в числе прочего будет установлен Redis), которые понадобятся в рамках этой статьи:

Проверим версию PHP, чтобы убедится, что всё хорошо встало

Должно быть примерно так:

Настроим PHP7-FPM

С помощью WinSCP откроем файл /etc/php-fpm.d/www.conf и найдем строчки:

; RPM: apache Choosed to be able to access some dir as httpd
user = apache
; RPM: Keep a group allowed to write in log dir.
group = apache

Исправим на:

; RPM: apache Choosed to be able to access some dir as httpd
user = nginx
; RPM: Keep a group allowed to write in log dir.
group = nginx

Найдем:

listen = 127.0.0.1:9000

Проверяем, чтобы был именно порт 9000.

Находим:

;env[HOSTNAME] = $HOSTNAME
;env[PATH] = /usr/local/bin:/usr/bin:/bin
;env[TMP] = /tmp
;env[TMPDIR] = /tmp
;env[TEMP] = /tmp

и превращаем в

env[HOSTNAME] = $HOSTNAME
env[PATH] = /usr/local/bin:/usr/bin:/bin
env[TMP] = /tmp
env[TMPDIR] = /tmp
env[TEMP] = /tmp

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

 

Теперь сделаем рабочий каталог для PHP:

Назначим его владельцем пользователя nginx

Запустим php-fpm, redis и nginx

Убедимся, что с ними всё хорошо

И добавим в атозагрузку

Теперь на нужна СУБД MariaDB. Установим:

Запустим:

Проверим:

И добавим в автозагрузку

Теперь выполним первоначальную настройку MariaDB:

На вопрос

Enter current password for root (enter for none):

просто жмём Enter. На вопрос:

Set root password? [Y/n]

отвечаем Y и жмём Enter, придумываем и два раза вводим стойкий пароль.

Навсе последующие вопросы отвечаем Y и жмём Enter.

Remove anonymous users? [Y/n] Y
Disallow root login remotely? [Y/n] Y
Remove test database and access to it? [Y/n] Y
Reload privilege tables now? [Y/n] Y

Создадим новую базу данных с названием  ‘owncloud_db’ с пользователем ‘ownclouduser’.

СУБД спросит пароль, вводим пароль придуманный выше.

Вводим команду (не забывайте «;» )

В следующей команде вместо ownclouduser_pass придумайте, запомните и впишите стойкий пароль (да, ещё один).

Дадим пользователю права на новую базу (вместо ownclouduser_pass впишите пароль из предыдущей команды)

И отменим все другие права:

Чтобы выйти из консоли СУБД введите

Теперь настроим бесплатный сертификат Let’s Encrypt для нашего Nginx и автоматизируем его обновление.

Клонируем репозиторий  проекта letsencrypt из GitHub

Теперь создадим сертификат

ВНИМАНИЕ: к этому моменту ваш домен (в моём случае mycloud.mydomen.ml) уже должен пинговаться. Чтобы это проверить, на компьютере с Windows нажимаем сочетание клавиш Win+R и вписываем

ping mycloud.mydomen.ml

в ответ мы должны получить четыре строчки вида «Ответ от 123.123.123.123: число байт=32 время=79мс TTL=51». Если в ответ мы получаем «При проверке связи не удалось обнаружить узел…», то нужно просто подождать. После регистрации домена и добавление строчки с доменом третьего уровня может пройти до 24 часов, прежде чем они начнут пинговаться.

Выполним последовательно команды:

В процессе нас попросят ввести e-mail для уведомлений (вводим реально существующий),

Enter email address (used for urgent renewal and security notices) (Enter ‘c’ tocancel)

принять лицензионное соглашение (ввести A) 

Please read the Terms of Service at
https://letsencrypt.org/documents/LE-SA-v1.1.1-August-1-2016.pdf. You must agree
in order to register with the ACME server at
https://acme-v01.api.letsencrypt.org/directory
——————————————————————————-
(A)gree/(C)ancel:

и ответить на вопрос (ввести Y или N, тут уж как сами хотите.).

Would you be willing to share your email address with the Electronic Frontier
Foundation, a founding partner of the Let’s Encrypt project and the non-profit
organization that develops Certbot? We’d like to send you email about EFF and
our work to encrypt the web, protect its users and defend digital rights.
——————————————————————————-
(Y)es/(N)o:

В конце получим сообщение вида:

» Congratulations! Your certificate and chain have been saved at…».

Теперь сделаем ключ для алгоритма Диффи-Хелмана.

Процесс долгий. Занимает несколько минут.

Теперь научим наш Nginx применять полученные сертификаты, а также добавим некоторые настройки для ownCloud. Открываем конфиг Nginx по пути /etc/nginx/nginx.conf и находим в нем секцию, которая выглядит примерно так:

Удаляем и вместо неё вставляем секции следующего содержания:

Смотрим внимательно в приведённый выше конфиг. Все mycloud.mydomen.ml заменяем на название своего домена.

Проверим, что всё хорошо

Должны получить в ответ:

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok
nginx: configuration file /etc/nginx/nginx.conf test is successful

Применим новые настройки

letsencrypt выдаёт сертификаты со сроком действия 90 дней. Их нужно заблаговременно продлевать. Процесс этот можно и нужно автоматизировать. Само обновление запускается командой

Если вы выполните эту команду прямо сейчас, то она проверит все ваши сертификаты и уведомит, что их продление не требуется.

——————————————————————————-
Processing /etc/letsencrypt/renewal/mycloud.mydomen.ml.conf
——————————————————————————-
Cert not yet due for renewal

The following certs are not due for renewal yet:
/etc/letsencrypt/live/mycloud.mydomen.ml/fullchain.pem (skipped)
No renewals were attempted.

Для автопродления воспользуемся встроенным в Linux планировщиком cron. Для этого командой

Откроем crontab для редактирования. Появится пустое чёрное поле.

Нажмите кнопку Insert на клавиатуре, снизу появится уведомление —ISERT —. Теперь впишите/вставьте следующие две строчки

Нажмите на клавиатуре кнопку Esc, режим —INSERT — пропадёт. Теперь введите (просто вводите,в нижней строчке оно появится само)

и нажмите Enter

 

Мы вернемся в консоль с сообщением

crontab: installing new crontab

Теперь каждый понедельник ночью в 3:00 будет обновляться сертификат, а в 3:10 перезапускаться Nginx. Вы можете контролировать выполнение задания в логе /var/log/le-renew.log.

Это всё была присказка, т.е. только подготовка к установке ownCloud. Промежуточным итогом мы имеем Web-сервер, который умеет в правильный https, имеет все необходимые библиотеки и СУБД. Т.е. мы установили и настроили (ну почти) обещанный LEMP сервер.

Остановим пока Nginx

Узнать последнюю версию ownCloud и получить ссылку на скачивание можно здесь.

 

Скачаем архив

Распаковываем его

С помощью WinSCP удалим из папки /usr/share/nginx/html/ все папки и файлы кроме папки .well-known

И скопируем туда файлы ownCloud

Теперь, с помощью WinSCP, в папке /root/ создадим файл oc-set со следующим содержимым:

И выставим ему права 0755.

Выполним

Скрипт отработает. Создаст все необходимые каталоги для ownCloud и выставит правильные права. В результате работы скрипта будут выведены строчки:

Creating possible missing Directories
chmod Files and Directories
chown Directories
chmod/chown .htaccess

Запустим Nginx

Теперь можно в браузере переходить по адресу cloud.mydomen.ml

Нас встречает окно создания учётной записи администратора

Придумываем логин-пароль администратора и нажимаем «Завершить установку». Пароль должен быть стойким.

Если вы сейчас зайдёте в наше вновьсозданное облако, то увидите, что ownCloud ругается на отсутствие кэширования, что может замедлять работу. Настроим кэширования с помощью Redis.

В WinSCP откроем файл /usr/share/nginx/html/config/config.php. Смотрим на последнюю строчку, она выглядит так:

);

Перед ней добавим строчки

запятые в конце строчек не забудьте.

Должно получиться так

    ‘filelocking.enabled’ => true,
    ‘memcache.local’ => ‘\OC\Memcache\Redis’,
    ‘redis’ => array(
       ‘host’ => ‘localhost’,
       ‘port’ => 6379,
       ‘timeout’ => 0.0,
    ),
);

С помощью WinSCP откроем файл /etc/sysctl.conf и добавим строчку:

Сохраним и закроем файл.

Перезапустим службы:

Теперь можно в браузере заходим в наше облако cloud.mydomen.ml. Он будет ругаться на СУБД и пр. — не обращайте внимания, это для данной задачи не критично.

Обязательно зайдите в основные настройки и установите настройку планировщика задач на Cron

 

Облако настроено, можно пользоваться. Теперь настроим немного безопасности.

 

Установим и запустим файрволл

И откроем порты для необходимых сервисов

Проверим, что сохранилась возможность заходить по ssh и в браузере нормально открывается наше облако.

Добавим файрволл в автозагрузку

На этом настрока ownCloud завершена. Консоль putty и менеджер WinSCP нам больше не нужны.

В качестве последнего штриха включим шифрование наших файлов в хранилище. Заходим в настройки (Ищите свой логин в правом верхнем углу окна браузера. Там, в выпадающем меню «Настройки»). В разделе Администрирование открываем пункт «Приложения». Жмём кнопку «Показать отключённые приложения». Находим приложение «Default encryption module» и нажмём рядом с ним кнопку «включить». 

Теперь Настройки->Администрирование->Шифрование. Ставим галочку «Включить шифрование на стороне сервера», читаем предупреждение и жмём в конце него «Включить шифрование». Ниже, в появившихся настройках модуля шиврования выбираем «Мастер-ключ» и применяем настройку. Нас попросят перелогинится, сделаем это. Опять идём Настройки->Администрирование->Шифрование и видим надпись «

Для работы с облаком вам нужен клиент на вашем устройстве. Не рекомендую использовать для повседневного подключения к ownCloud созданную выше (при первом входе) учетную запись администратора. Оставьте её для администрирования. Щелкните по логину администратора в правом верхнем углу и выбирете «Пользователи» в выпадающем списке. В открывшемся окне, слева, добавьте группу для обычных пользователей. Например, назовите её Users. После создания группы в правой части окна, вверху, заполните данные на нового пользователя: логин, пароль (стойкий), группу (выбираем Users). Нажмите «Создать». В таблице добавиться строчка с новым пользователем. Установите ему квоту. Максимум, что вы можете выделить, это общий размер диска вашего VPS минус 3ГБ. Т.е. если у вас диск 100ГБ, в квоту вы можете вписать не более чем 97 GB. Всё, пользуйтесь новой учётной записью.

Клиентские приложения практически под все распространенные операционные системы  можно найти здесь.

К сожалению, клиенты для мобильных устройств платные (копейки конечно, но тем не менее). Для Android бесплатный клиент здесь. Но нужно понимать, что он от стороннего разработчика. Для подключения вам понадобятся адрес сервера (в моём случае это https://mycloud.mydomen.ml) и логин-пароль. Настройка подключения элементарная, описывать не буду.

Данная статья конечно же не является исчерпывающей инструкцией по ownCloud. Но теперь вы уже знаете, что это такое и може продолжить изучение самостоятельно. Или оставить так. Текущей конфигурации достаточно для большинства персональных задач.

Если у вас есть вопросы, то все контакты для обратной связи вы найдёте здесь.

 

 

 

 

 

 

Вы можите оставить комментарий, или поставить трэкбек со своего сайта.

Написать комментарий

XHTML: Вы можете использовать эти теги: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">