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 читайте здесь. Необходимо учесть следующие требования:
- Виртуализация 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
о, что вы видите выше, это одна команда. Для удобства она разбита на строчки с помощью символа «\». Вы можете копировать и вставлять её в консоль в таком виде. Как обычно, все скрипты и конфиги в удобном форматированном виде в первоисточнике статьи.
На вот такой запрос
Выбираем первый вариант и жмём 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
В ответ получим список образов
Теперь вы можете работать в консоли контейнера также, как до этого работали в консоли «родительской» хостовой машины. Чтобы вернуть назад в консоль хостовой машины введите команду:
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
Подключение клиентов тривиально и в описании не нуждается. Ссылка на клиентское ПО дана в начале статьи.