Cozy Cloud. Свой уютный уголок Интернета

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

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

Одна группа разработчиков решила, что лучшим компромиссом будет запилить своё собственное персональное облако с блекджеком и шлюхами календарём и контактами. В результате появился Cozy Cloud — решение с открытым исходным кодом, доступное любому желающему.

Cozy можно перевести, как «уютный». Это действительно этакий уютный личный кабинет в котором вы можете:

  • хранить  и синхронизировать свои контакты;
  • хранить  и синхронизировать свои документы, фотографии и иные файлы;
  • публиковать файлы, документы, фотографии;
  • хранить и делиться своими визитными карточками;
  • вести календарь;
  • управлять своими финансами;
  • управлять своей почтой;
  • и многое другое — просто подключите нужный плагин.

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

Для Cozy Cloud есть клиенты под все распространенные платформы.

Проект активно живёт, обновляется и дополняется. К нему уже написано множество плагинов на все случаи жизни с возможностью установки в один клик.

Кроме того, разработчики готовят к релизу обновлённый Cozy Cloud, который будет и красивее, и функциональнее. Обещают, что обновится можно будет из текущей версии.

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

Разворачивать Cozy мы будем в Docker. Это решит сразу несколько задач:

  1. Проще установка, мы скачаем официальный готовый образ от разработчиков и будем его использовать, лишь немного допилив по Let’s Encrypt. Если ставить всё руками, то статья будет далека от понимания и повторения не подготовленным человеком.
  2. Рано или поздно встанет задач перенести свой Cozy Cloud на другой сервер. Нет ничего легче, чем перенести образ с одного сервера на другой.
  3. Пора уже моим читателям потрогать докер руками 🙂 Некоторые простые операции мы не булем автоматизировать, а выполним руками, чтобы попробовать работу с докером.

Нам понадобится VPS с Ubunru 14.04 x86_64. Как выбрать и арендовать VPS читайте здесь. Необходимо учесть следующие требования:

  1. Виртуализация KVM или XEN. Вам не подойдёт OpenVZ.
  2. Оперативной памяти не менее 512МБ, но это совсем впритык. Лучше 1ГБ и более.
  3. Если вы будете использовать Cozy Cloud как хранилище файлов (фото, документы и пр.), а также консолидировать свои ящики электронной почты, то вам понадобится много дискового пространства. Тут уж сами смотрите.

Все настройки в статье выполнены в VPS от hostsailor.com. Использована VPS на основе виртуализации XEN.

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

Как получить бесплатный домен, написано в статье про ownCloud.

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

Итак,займёмся  VPS. Вы получили его IP-адрес и логин-пароль.  Сразу настроим SSH вход по сертификату по этой инструкции (вместо yum используйте apt-get. Остальное всё также.)

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

apt-get -y install \
    linux-image-extra-$(uname -r) \
    linux-image-extra-virtual

То, что вы видите выше, это одна команда. Для удобства она разбита на строчки с помощью символа «\». Вы можете копировать и вставлять её в консоль в таком виде.

На вот такой запрос

Выбираем первый вариант и жмём Enter.

Установим пакеты для работы с репозиториями через HTTPS

apt-get -y install \
    apt-transport-https \
    ca-certificates \
    curl \
    software-properties-common

Добавим ключ репозитория Docker:

curl -fsSL https://download.docker.com/linux/ubuntu/gpg | apt-key add -

и сам репозиторий:

add-apt-repository \
   "deb [arch=amd64] https://download.docker.com/linux/ubuntu \
   $(lsb_release -cs) \
   stable"

Обновим список пакетов с учётом добавленного репозитория

apt-get -y update

И установим сам докер

apt-get -y install docker-ce

Чтобы проверить корректность работы докера, используем тестовый образ Hello World

docker run --rm hello-world

В ответ получим:

Всё хорошо.

Теперь клонируем официальный образ Cozy Cloud к себе на сервер

cd /tmp
git clone https://github.com/cozy-labs/cozy-docker
cd cozy-docker

Нам нужно будет немного подправить его, чтобы научить получать сертификаты от Let’s Encrypt.

Если вы будете использовать для редактирования файлов WinSCP, обязательно сделайте в нём такую настройку:

Для начала откроем файл /tmp/cozy-docker/Dockerfile (это сценарий сборки образа для Docker). В нём найдем строчку

# Install NodeJS 4.2.X LTS

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

# Install Certbot
RUN add-apt-repository ppa:certbot/certbot
RUN apt-get update --quiet
RUN apt-get --quiet --yes install python-certbot-nginx

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

Сохраним и закроем файл. Тем самым мы предпишем докеру при сборке образа установить Certbot из соответствующего репозитория.

Теперь откроем для редактирования файл /tmp/cozy-docker/cozy-init

Найдём в нем секцию, начинающуюся на

# Regenerate SSL certificates

Вся секция выглядит так:

Как видите, здесь предусмотрены два варианта: доступ по http и https, в зависимости от переменной DISABLE_SSL. Причём, в случае с https генерируется самоподписанный сертификат на который будут ругаться все современные браузеры. Нам это всё не нужно. Мы будем использовать только https, а сертификаты получим от Let’s Encrypt. Поэтому убиваем почти всё содержимое этой секции (то, что нужно удалить, выделено на скриншоте выше). Вместо этих строк, вставим следующие:

    rm -f /etc/nginx/sites-enabled/cozy
    ln -sf /etc/nginx/sites-available/cozy-ssl /etc/nginx/sites-enabled/
    if [ -z "$DOMAIN" ]; then
        DOMAIN=localhost
    fi
    openssl dhparam -out /etc/cozy/dh2048.pem -outform PEM -2 2048
    certbot certonly --standalone --noninteractive --agree-tos -n -d $LETSENCRYPT_HOST  --standalone-supported-challenges tls-sni-01 --email $LETSENCRYPT_EMAIL
    ln -s /etc/letsencrypt/live/$LETSENCRYPT_HOST/fullchain.pem /etc/cozy/server.crt
    ln -s /etc/letsencrypt/live/$LETSENCRYPT_HOST/privkey.pem /etc/cozy/server.key
    supervisorctl restart nginx
    cozy-monitor restart home
    cozy-monitor restart proxy

Сохраним и закроем файл. Как видите, здесь мы оставили только вариант с https и добавили команды по генерации сертификатов от Let’s Encrypt с помощью certbot. Для этого мы используем переменные LETSENCRYPT_HOST и LETSENCRYPT_EMAIL, значение которых передадим докеру при запуске контейнера.

Теперь соберём наш собственный образ:

docker build -t cozy/myimage /tmp/cozy-docker

Докер собирает образ, используя сценарий, который лежит в файле Dockerfile. В команде выше мы указали, что этот файл находится в папке /tmp/cozy-docker. Также мы указали, что наш новый образ должен называться cozy/myimage.

Процесс может занять весьма длительное время (на слабых VPS до двух часов), зависящее от производительности вашего сервера и каналов связи. Итоговый размер образа 1.3ГБ, и это всё будет скачиваться, распаковываться и собираться. 

По окончании проверим, что образ создан и присутствует в списке образов докера. Выполним команду:

docker images

В ответ получим список образов

Отлично, образ создан. Теперь на его основе создадим и запустим контейнер.  Делаем это следующей командой.

docker run -d --name cozy-cloud \
    --restart=always \
    -p 80:80 -p 443:443 \
    -e DOMAIN=cozy.mydomen.ml \
    -e LETSENCRYPT_HOST=cozy.mydomen.ml \
    -e [email protected] \
    cozy/myimage

Здесь:

—name cozy-cloud  — имя нашего будущего контейнера;

—restart=always — эта команда предписывает докеру запускать наш контейнер при перезагрузке хостовой системы;

-p 80:80 -p 443:443 — порты, которые будут проброшены из внешней сети в контейнер;

-e DOMAIN=cozy.mydomen.ml — имя нашего домена,  к которому будет привязан сертификат от Let’s Encrypt;

-e [email protected] — любой действующий e-mail, принадлежащий вам;

cozy/myimage — имя образа, на основе которого будет собран контейнер.

Создание контейнера также занимает некоторое время. Как только команда отработает, проверим, что наш контейнер создан и запущен командой:

docker ps -a

Команда покажет все наши контейнеры. Поскольку контейнер у нас всего один, то в выводе команды будет примерно следующее:

Ну вот, наш линукс в линуксе запущен. Контейнер создан и команда docker run нам больше не понадобиться (только если мы захотим создать новый контейнер, но об этом чуть позже). Для остановки, запуска и перезапуска контейнера можно использовать следующие команды:

docker stop cozy-cloud

docker start cozy-cloud

docker restart cozy-cloud

Теперь мы немного потренеруемся работать с контейнером. Мы можем точно также выполнять в нём консольные команды. Например, командой 

docker exec -it cozy-cloud /bin/bash

мы запустим консоль в контейнере и переключимся на неё. Приглашение командной строки будет содержать ID контейнера

Теперь вы можете работать в консоли контейнера также, как до этого работали в консоли «родительской» хостовой машины. Чтобы вернуть назад в консоль хостовой машины введите команду:

exit

А можно просто отправлять команды в контейнер и смотреть их выполнение, оставаясь в хостовой системе. Что мы сейчас и сделаем для первоначальной настройки Cozy. Выполним команду:

docker exec -it cozy-cloud /bin/bash /etc/init.d/cozy-init

Т.е мы запустили в контейнере командный интерпретатор bash, а ему, в свою очередь, передали в качестве параметра скрипт cozy-init. Вы можете наблюдать как генерируется ключ Диффи-Хелмана, запрашиваются сертификаты Let’s Encrypt.

После этого можете уже в браузере вводить свой DNS-адрес (в моём случае это cozy.mydomen.ml).

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

Загрузится главная страничка Cozy. Сразу идём в настройки

И меняем язык

Страничка автоматически перезагрузится уже на русском. В самом низу страницы есть кнопка включения двухфакторной авторизации. Крайне рекомендую это сделать. Вам понадобиться Google Authenticator или аналогичное приложение на смартфоне.

Собственно всё. Дальше переходите на главную страницу, щёлкайте иконки, изучайте. Дополнительные плагины в разделе «Магазин». В 90% случаев всё будет на русском. Если что-то не переведено, можно поучаствовать в локализации. В общем пробуйте, пользуйтесь.

Мы же ещё немного поковыряем наш контейнер.

Вы можете устанавливать в контейнер пакеты и программы. Установим текстовый редактор nano:

docker exec -it cozy-cloud apt-get -y install nano

Nano установится именно в контейнер, на хостовой системе его не будет. Вот это одно из главных преимуществ докера: в контейнере вы можете делать что угодно, хостовая система останется не тронутой. Как только вы решите, что этот контейнер вам не нужен, просто убиваете его командой «docker rm». Например, чтобы убить наш контейнер с Cozy (команда для примера, не делайте этого без необходимости):

docker rm cozy-cloud

Чтобы убить образ (команда для примера, не делайте этого без необходимости):

docker rmi cozy/myimage

Или можем настроить cron. Например, настроим обновление сертификатов (по аналогии, как мы это делали в статье про ownCloud). Выполним команду:

docker exec -it cozy-cloud crontab -e

Нас попросят выбрать редактор текста. Вы берем вариант 1 с редактором Nano. В открывшемся окне редактора допишем следующие строчки:

00 3 * * 1 certbot-auto renew >> /var/log/le-renew.log
10 3 * * 1 supervisorctl restart nginx

Получится так:

И нажмём CTRL+O для сохранения файла. На предложенное имя соглашаемся просто нажав Enter. Затем CTRL+X для выхода из Nano. Получим сообщение:

crontab: installing new crontab

Причем это задание крона будет существовать и исполняться только внутри контейнера.

В общем думаю понятно.

Теперь о возможных проблемах Cozy. 

У Cozy есть утилита для проверки состояния сервера и исправления проблем. Это cozy-monitor. Например для проверки состояния модулей Cozy выполним команду: 

docker exec -it cozy-cloud cozy-monitor status

В ответ получим примерно следующее:

Если Cozy перестал работать (например после обновления), починить можно следующей последовательностью команд:

docker exec -it cozy-cloud cozy-monitor uninstall data-system
docker exec -it cozy-cloud cozy-monitor install data-system
docker exec -it cozy-cloud cozy-monitor restart home
docker exec -it cozy-cloud cozy-monitor restart proxy

Если установка какого-либо модуля из магазина зависла (не часто, но бывает), то лечится командой:

docker exec -it cozy-cloud cozy-monitor reinstall-missing-app

Иногда с первого раза команда не лечит «битый» модуль. Тогда запустите её ещё раз.

Узнать все возможности утилиты cozy-monitor можно командой:

docker exec -it cozy-cloud cozy-monitor

 

 

 

 

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

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

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