Шановні друзі!
26 та 31 грудня магазин працюватиме до 16 години. 1 та 2 січня магазин працювати не буде.
Вітаємо всіх з Різдвом та Новим Роком!
Мобільна версія Форум Arduino Документація Гарантійні умови 0 0
UA RU
Графік роботи магазину:
Пн-Пт: 8.00 - 19.00
Сб: 10.00 - 17.00
Нд: вихідний
Каталог
Напиши статтю і отримай знижку!

Особистий сервер CalDAV на одноплатному комп’ютері

2020-12-04

Всі статті →

Ця стаття для тих, хто хоче синхронізувати свої календарі, списки справ і контакти між кількома пристроями, але не хоче довіряти цю роботу хмарним сервісам з закритими специфікаціями, політика конфіденційності яких та/або законодавство країн, де вони розміщені, не збігаються з вашим уявленням про належне поводження з вашими персональними даними. Ця потреба може бути пов’язана як з корпоративними правилами у вашій компанії, так і з вашою особистою параноєю. Можливо вам, як і автору цього тексту, просто потрібна система планування часу на основі вільного програмного забезпечення, яка б працювала в екосистемі з досить різноманітними апаратними й програмними платформами. Поза тим, запропоноване рішення дозволить вам обмежити небажаний доступ до ваших адресних книг, демонструючи повагу до людей, які довірили вам свої персональні дані. Нарешті, CalDAV (https://en.wikipedia.org/wiki/CalDAV), про який ітиметься, належить до стандартних протоколів з відкритою специфікацією, тож ви можете розраховувати на довготривалу підтримку й передбачуваний розвиток проєкту.

Інгредієнти

Нижче описано власний досвід створення сервера CalDAV із того, що попало під руку: NanoPi Neo першої версії з 256 Мб оперативної пам’яті на борту, який саме звільнився був після іншого проєкту. Плата порівняно не нова, але все ще робоча й придатна для широкого кола задач. До того ж вона досить енергоефективна й має крихітні розміри (4x4 см), що робить її привабливою для реалізації невибагливих домашніх серверів у задачах, де «монстри» типу Raspberry Pi 4 видаються надлишковими.

Якщо ви захочете все це повторити, то вам знадобиться:

Одноплатний комп’ютер, можна взяти майже будь-який (http://arduino.ua/cat15-ini-komputeri). Серйозно. Звісно, якщо йдеться про невеликий сервер для особистого користування. Найближчим аналогом того, що було використано, є старша модель NanoPi NEO (http://arduino.ua/prod1849-nanopi-neo-lts-512mb). У вашому розпорядженні буде аж цілих 512 Мб оперативної пам’яті при тих самих розмірах та інших параметрах плати. Також можете звернути увагу на ще одну компактну недорогу плату Orange Pi Zero (http://arduino.ua/prod1894-orange-pi-zero-h2-256mb), де крім Ethernet вам буде доступний WiFi адаптер.

MicroSD карта (http://arduino.ua/cat327-karti-pamyati-sd). В принципі, теж майже будь-яка. Щонайменше на 2 Гб. Звісно, що швидше, то краще, але все описане нижче цілком прийнятно працювало на карті четвертого класу швидкості на 4 Гб.

Підготовка карти пам’яті

Буде використано Debian-подібний дистрибутив Armbian (https://www.armbian.com/) (на момент написання цього тексту версія Buster), який підтримує потрібну плату. Завантажте образ для вашого одноплатного комп’ютера й запишіть на MicroSD карту, наприклад за допомогою balenaEtcher (https://www.balena.io/etcher/).

Як альтернатива, вас також може зацікавити мінімалістський дистрибутив DietPi (https://dietpi.com/).

Перший запуск

Встановіть записану MicroSD карту, підключіть кабель Ethernet і подайте живлення на плату. В залежності від класу швидкості карти пам’яті, за декілька секунд чи десятків секунд плата стане доступною в локальній мережі, про що можна дізнатися з журналу вашого маршрутизатора, звідки слід також з’ясувати поточну IP адресу пристрою. При першому запуску Armbian налаштований використовувати DHCP, що слід врахувати, якщо ваша мережа налаштована інакше. Тепер, коли вам відома IP адреса, можна зареєструватися в системі за допомогою ssh, що стартує за замовчанням. Якщо ви використовуєте UNIX-подібну систему на основному комп’ютері, скоріш за все ssh-клієнт уже встановлений і достатньо виконати команду:

$ ssh root@0.0.0.0

Де замість 0.0.0.0 слід вписати IP адресу вашої плати.

Якщо ви використовуєте Windows, можна встановити клієнт Putty (https://www.putty.org/) або будь-який інший, який вам до вподоби, ввести IP адресу плати та встановити з’єднання.

При першому вході пароль користувача root «1234», але його одразу запропонують змінити на більш надійний.

Якщо все зроблено правильно, то з’явиться запрошення командного рядка. За бажанням при першому запуску можна буде також додати звичайних користувачів і встановити українську локалізацію.

Статична MAC адреса.

Якщо ви збираєтеся налаштувати маршрутизатор так, щоб він щоразу призначав одноплатному комп'ютеру ту саму IP адресу на основі MAC-адреси (що в майбутньому дасть змогу налаштувати всі пристрої на з’єднання з цією адресою), то ви неодмінно наступите на описані нижче граблі.

За замовчанням плата щоразу запускається з різною MAC адресою, яка генерується випадково. Змінити цю поведінку можна за допомогою конфігураційного файлу interfaces, де слід додати опцію hwaddress ether 00:11:22:33:44:55, замінивши останній параметр на бажану MAC адресу. Для редагування конфігураційного файлу в Armbian вже доступні текстові редактори, як-от vim (https://www.vim.org/) і nano (https://www.nano-editor.org/). Наприклад, можна виконати команду:

root@nanopineo:~# nano /etc/network/interfaces

Після внесення змін конфігураційний файл виглядатиме приблизно таким чином:

source /etc/network/interfaces.d/*

# Network is managed by Network manager

auto lo

iface lo inet loopback

allow-hotplug eth0

iface eth0 inet dhcp

hwaddress ether 00:11:22:33:44:55

Налаштуйте маршрутизатор відповідно до введеної MAC-адреси й переконайтеся, що після перезавантаження плата одержує потрібну вам IP адресу.

Встановлення сервера Radicale.

Встановлюємо необхідні пакети:

root@nanopineo:~# apt install radicale apache2-utils python3-bcrypt python3-passlib

Створюємо новий htpasswd файл з новим користувачем:

root@nanopineo:~# htpasswd -c -B /etc/radicale/users user

Можете замінити user на бажане ім’я користувача. Буде запропоновано ввести пароль користувача.

Для налаштування шифрування під час авторизації відредагуйте файл налаштувань:

root@nanopineo:~# nano /etc/radicale/config

У секції [auth] мають бути такі рядки:

[auth]

type = htpasswd

htpasswd_filename = /etc/radicale/users

htpasswd_encryption = bcrypt

Якщо ви назвали файл користувачів інакше, слід вказати це в налаштуваннях.

Для того, щоб сервер Radicale був доступним із інших вузлів, у тому ж конфігураційному файлі в секції [server] слід додати рядок:

[server]

hosts = 0.0.0.0:5232, [::]:5232

Де 5232 - номер порту. Можете змінити за необхідності.

За замовчанням дані зберігатимуться в /var/lib/radicale/collections. У разі необхідності це налаштування можна змінити в секції [storage]:

[storage]

filesystem_folder = /шлях/до/storage

Опціонально: налаштування SSL.

Якщо ви бажаєте використовувати захищене з’єднання ssl, слід встановити пакет ssl-cert:

root@nanopineo:~# apt install ssl-cert

Після установки буде автоматично згенеровано ключ /etc/ssl/private/ssl-cert-snakeoil.key, який Radicale і спробує використовувати за замовчанням. Позаяк сервер запускається від імені користувача radicale, який не має доступу до цього файлу, слід додати його в групу ssl-cert:

root@nanopineo:~# usermod -a -G ssl-cert radicale

Нарешті, в конфігураційному файлі слід активувати ssl:

[server]

ssl = True

Якщо ви вручну створювали інші сертифікати командою openssl, то в цій же секції можна вказати шляхи до них.

Нарешті, коли всі налаштування внесені, можна запустити сервер:

root@nanopineo:~# service radicale start

або

root@nanopineo:~# systemctl start radicale

Якщо все зроблено вірно, відтепер ви можете отримати доступ до сервера з бравзера будь-якої машини вашої локальної мережі, ввівши в адресному рядку:

http://0.0.0.0:5232

або (якщо було активовано SSL):

https://0.0.0.0:5232

Замініть 0.0.0.0 на IP адресу NanoPi а порт на той, що ви ввели в налаштуваннях.

Якщо ви активували SSL, то вебпереглядач ймовірно попередить вас про те, що згенерований вами сертифікат неперевірений і вам доведеться додати для нього виняток. І так на всіх вузлах, які будуть отримувати доступ до сервера. Введіть ім’я користувача й пароль і за допомогою вебінтерфейсу створіть новий календар. Скопіюйте URL календаря для подальшого налаштування клієнтів.

Якщо все працює вірно, саме час додати запуск Radicale в автозавантаження:

root@nanopineo:~# update-rc.d radicale enable

або

root@nanopineo:~# systemctl enable radicale

Перезавантажте плату й переконайтеся, що сервер доступний:

root@nanopineo:~# reboot

Налаштування настільного клієнта.

Як настільний клієнт CalDAV будемо використовувати Mozilla Thunderbird (https://www.thunderbird.net/ru/). Вся необхідна функціональність входить в останню версію. Якщо у вас більш стара версія, слід встановити розширення Lightning (https://addons.thunderbird.net/uk/thunderbird/addon/lightning/). Додаємо календар і вводимо отриманий раніше URL, ім’я користувача й пароль для синхронізації з сервером. Якщо ви увімкнули шифрування, треба додати сертифікат до списку довірених. Якщо все зроблено правильно, можна створювати події і завдання.

 

Налаштування мобільного клієнта

Якщо ви використовуєте Android, є кілька доступних рішень для синхронізації з сервером CalDAV. Позаяк ми йдемо шляхом вільного програмного забезпечення, використаємо таку зв’язку: DAVx? (https://www.davx5.com/) для синхронізації, відкритий органайзер OpenTasks (https://opentasks.app/) та відкритий календар Simple Calendar (https://www.simplemobiletools.com/calendar/). Як вільна альтернатива управління контактами може виступати Simple Contacts (https://www.simplemobiletools.com/contacts/). Всі вони доступні для встановлення в репозиторії F-Droid (https://f-droid.org/). Після встановлення DAVx? слід знову ввести URL, логін і пароль. І звісно прийняти ваш «підозрілий» сертифікат, якщо ви використовуєте SSL. Можна налаштувати періодичну синхронізацію.

Тепер можна побачити створену нами справу, відкривши OpenTasks. У Simple Calendar також слід увімкнути синхронізацію CalDAV. Те саме стосується й синхронізації адресної книги.

Висновки

Таким чином, ми повернули собі повний контроль над календарем, списком справ і адресною книгою, лишивши можливість синхронізації між кількома пристроями. Обраний одноплатний комп’ютер є досить компактним, енергоефективним і навіть дещо надлишковим для цієї задачі навіть якщо ви створите облікові записи для своїх близьких. Мене цілком влаштовує, що сервер доступний лише в локальній мережі, позаяк для цієї інформації синхронізація 1–2 рази на день видається цілком достатньою. Прямо зараз демон Radicale споживає менше 15 Мб оперативної пам’яті, тому ще лишається достатньо ресурсів для запуску сервера друку або навіть невеликого хмарного файлосховища. Також вивчається можливість переходу на DietPi або FreeBSD.

Використані джерела

Ваша оцінка статті:

Відмінно
Добре
Задовільно
Погано
Дуже погано

Загальна оцінка:

Оцінка "Особистий сервер CalDAV на одноплатному комп’ютері"
5 з 5
зроблена на основі 1 оцінки 1 клієнтських відгуку.

Дякуємо Вам за звернення! Ваш відгук з'явиться після модерації адміністратором.
Vova
13.06.2023 18:44:25
Хорошая статья! Да, верно. Надо все иметь свое, а то мало ли.
оплата картами Visa і MasterCard