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

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


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


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


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

- хранить и синхронизировать свои контакты;

- хранить и синхронизировать свои документы, фотографии и иные файлы;

- публиковать файлы, документы, фотографии;

- хранить и делиться своими визитными карточками;

- вести список дел (органайзер);

- вести календарь;

- управлять своими финансами;

- управлять своей почтой;

- и многое другое — просто подключите нужный плагин.

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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


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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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


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


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


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

2. Рано или поздно встанет задач перенести свой Cozy Cloud на другой сервер. Нет ничего легче, чем перенести образ с одного сервера на другой.

3. Пора уже моим читателям потрогать докер руками 🙂 Некоторые простые операции мы не будем автоматизировать, а выполним руками, чтобы попробовать работу с докером.


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

- Виртуализация KVM или XEN. Вам не подойдёт OpenVZ.

- Оперативной памяти не менее 512МБ, но это совсем впритык. Лучше 1ГБ и более.

- Если вы будете использовать Cozy Cloud как хранилище файлов (фото, документы и пр.), а также консолидировать свои ящики электронной почты, то вам понадобится много дискового пространства. Тут уж сами смотрите.


Ещё нам понадобиться доменное имя. Не важно, какого уровня. Возможно у вас уже есть какой-нибудь домен. Тогда вы можете сделать поддомен вида, например, 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

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

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

Выбираем первый вариант и жмём 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. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

Всё хорошо.

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

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

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

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

Для начала откроем файл /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

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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

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

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

# Regenerate SSL certificates

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

Как видите, здесь предусмотрены два варианта: доступ по 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

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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

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 Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост
Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

И меняем язык

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост
Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

Страничка автоматически перезагрузится уже на русском. В самом низу страницы есть кнопка включения двухфакторной авторизации. Крайне рекомендую это сделать. Вам понадобиться 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

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

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

crontab: installing new crontab

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


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


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


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

docker exec -it cozy-cloud cozy-monitor status

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

Cozy Cloud. Свой уютный уголок Интернета Cozy cloud, Облачное хранилище, Облачное хранение, Полезное, Настройка, Docker, Инструкция, Персональные данные, Длиннопост

Если 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

Подключение клиентов тривиально и в описании не нуждается. Ссылка на клиентское ПО дана в начале статьи.

11
Автор поста оценил этот комментарий

- Это очень сложно, прощайте.

Иллюстрация к комментарию
17
Автор поста оценил этот комментарий
А как все хорошо начиналось..
А потом такой "ЧОООООО?!"
я же просто хотел альтернативное облако...
раскрыть ветку
5
DELETED
Автор поста оценил этот комментарий

балдею с каментов: докер накатить уже слишком сложно для нас. такими темпами аптгет скоро ваще черной магией считаться. что же с нами стало?

раскрыть ветку
2
Автор поста оценил этот комментарий
Пост хороший и полезный, поставил плюс. Теперь несколько уточнений: 1) Кози пока поддерживает только 1 пользователя, то есть подключить жену, детей, соседа Мишаню пока нельзя. Пользователей обещают в следующей версии. 2)Почта не является полноценным почтовым сервером, а лишь клиент , который забирает почту с других почтовых серверов и потом хранит у себя. Сервер отправки все равно понадобится.
Ну и насчёт установки. Мил человек на кой ляд тебе на копеечном vps докер, какие контейнеры, когда "-хозяин, я до не чувствую. -это потому, vps, что у тебя их нет". У Кози обычная установка в два раза короче, чем твоя с докером. Зачем это все городить?
раскрыть ветку
3
Автор поста оценил этот комментарий
Как только увидел что нам понадобится убунта, пролистал до конца и понял, что это не мое
раскрыть ветку