Домашний «облачный» сервер на 10 Ватт? Вполне!

  • Tutorial
Привет пользователям Хабра.

Сегодня хочу рассказать про домашний веб-сервер, который одновременно прекрасно выполняет функции домашнего медиа-центра (mp3, ip-tv, video, uPnP и т.д.).

Все началось с того, что я уже некоторое время использовал для внутренних нужд сервер HP MicroServer N36L с RAID5 на 4 терабайта(3x2GB HDD WD Green + 8 Gb ECC RAM), с виртуальными машинами на оракловском vBox, который в принципе и неплох, но его постоянное жужжание беспокоило членов семьи в смысле зря съедаемых киловатт в год (если будут интересующиеся, расскажу о нем в одном из следующих постов).
К тому же хотелось чего-нибудь более современного, с возможностью использования в качестве полноценного медиа-центра с прямым подключением к телевизору.

После долгих поисков и сравнений мною был выбран актуальный на текущий момент девайс на RK3188-чипсете: K-R42, 4-х ядерный ЦПУ, с 2Гб озу и 4Гб флеш-памяти (хотя на коробке было гордо указано 8Гб) и 4-х ядерным графически ядром Mali400 на андроиде 4.2.2.

Конечно, все нижеописанное вполне подходит и для других подобных устройств, подключаемых через HDMI к телевизору, но для меня существенным плюсом в выборе было наличие полноценного корпуса для нормального теплообмена, оптического разъема SPDIF для звука и современного чипсета.

Стоимость K-R42 колеблется в районе 90-120$ (geekbuying.com, aliexpress.com вместе с пересылкой), что правда дороже 2-х ядерных стиков/боксов, но сопоставимо со многими другими на том же RK3188 чипсете.

Стоит отметить, что как медиа-центр он работает на ура: актуальный на сегодня XBMC 12.2 Frodo на нем установился и запустился без каких-бы то ни было проблем, управление с пульта довольно гладкое и с этим особых проблем не возникало. Благодаря внешней антенне беспроводная связь работает очень стабильно, нагревается в процессе работы не так чтобы сильно, но под нагрузкой заметно теплый.

1. Ставим линукс.


Какой – мне особой разницы не было, но для простоты выбрал Debian wheezy.

К сожалению, под Mali400 нет работающих драйверов, чтобы получить полноценное ускорение 3D-графики, поэтому вариантов пока нет – надо использовать chroot-окружение, вместо того чтобы перепрошивать девайс начисто на линукс (соответствующие руководства есть уже в сети).
Благо для этого под андроид есть замечательный app: Linux Deploy, дающий на выбор любой из существующих мэйнстрим-дистрибутивов.

Детально описывать не буду, установка довольно тривиальна: достаточно запустить приложение, выбрать желаемую конфигурацию и нажать старт.
Вставив в медиабокс microSD-карту на 8Гб, я выбрал установку на раздел SD-карты без графического окружения(есть конечно же и опция для желающих получить графический десктоп через VNC), в результате установился Дебиан, с автозагрузкой SSH и sudo-пользователем android с паролем changeme.

Заходим по SSH для дальнейшей настройки:

ssh android@<ip-of-the-box>




2. Пользователи и прочая...


Пароль пользователя android естественно стоит сменить с changeme на что-нибудь посеръезнее:

passwd

а также для рута отключим возможность логина по SSH в /etc/ssh/sshd_config:

sudo nano /etc/ssh/sshd_config
PermitRootLogin yes → PermitRootLogin no


если необходимо создать своего полноценного пользователя, то

sudo adduser username

и не забудем добавить его в группы, в которых присутсвует пользователь „android“:

sudo adduser username aid_system aid_radio aid_bluetooth aid_graphics aid_input aid_audio aid_camera aid_log aid_compass aid_mount aid_wifi aid_adb aid_install aid_media aid_dhcp aid_sdcard_rw aid_vpn aid_keystore aid_usb aid_drm aid_available aid_gps aid_media_rw aid_mtp aid_drmrpc aid_nfc aid_sdcard_r aid_shell aid_cache aid_diag aid_net_bt_admin aid_net_bt aid_inet aid_net_raw aid_net_admin aid_net_bw_stats aid_net_bw_acct

В противном случае ваш новый пользователь может не иметь доступа к некоторым устройствам/интернету и т.п.
Необходимые группы можно всегда посмотреть по

groups android

Сделаем теперь обновление свежеустановленной системы:
sudo apt-get update
sudo apt-get dist-upgrade


инсталлируем таскменеджер:

sudo apt-get install cron

Чтобы обеспечить доступ к нашему серверу извне, регистрируемся на каком-нибудь DynDNS-сайте (dyn.com, noip.com и т.п.), и инсталлируем клиента для обновления нашего динамического IP-адреса(я использовал ddclient):

sudo apt-get install ddclient

Вот пример конфигурации ddclient:
# Configuration file for ddclient generated by debconf
#
# /etc/ddclient.conf

protocol=dyndns2
use=web, web=checkip.dyndns.com/, web-skip='IP Address'
server=www.dyndns.com
login=myserveruser
password='mydyndnspassword'
myserver.dyndns.org


На роутере необходимо разрешить Port Forwarding из интернета для портов 22(SSH), 80(HTTP), 443(HTTPS) на IP нашего „микро“-сервера.




3. Ставим LAMP


Здесь все достаточно тривиально:
sudo apt-get update
sudo apt-get install apache2 mysql-server php5 php5-curl php5-gd php5-mysql php-apc


Для удобства дальнейшей настройки ставим графическую панель (вебмин)
cd /tmp
wget http://prdownloads.sourceforge.net/webadmin/webmin_1.660_all.deb
sudo dpkg -i webmin_1.660_all.deb
sudo apt-get -f install
sudo service webmin start

(В целях экономии ресурсов вебмин я все время запускаю вручную только когда нужно)

Теперь можно заходить на https://<ip-of-the-box>:10000 с пользователем android и настраивать все что душе угодно.

Если это еще не сделано, перезагружаем вебсервер, чтобы активировать все установленные нами модули:

sudo service apache2 restart




4. Автозагрузка


Для того, чтобы наши службы-демоны автоматически загружались в chroot-окружении при старте нашего бокса, в Linux Deploy предоставляется скрипт /etc/init.d/myscrypt

Мой выглядит так:
#!/bin/sh
case "$1" in
  start)
    /bin/mount -a
    /etc/init.d/mysql start
    /etc/init.d/apache2 start
    /etc/init.d/ddclient start
    /etc/init.d/cron start
;;
  stop)
    /etc/init.d/apache2 stop
    /etc/init.d/mysql stop
    /etc/init.d/ddclient stop
    /etc/init.d/cron stop
    /bin/umount /mnt/usb
;;
  *)
     echo "Usage: $0 {start|stop}"
;;
esac


При „выключении“ медиаплеера с пульта устройство вместо полного отключения переходит в дежурный режим(многие в сети считают эту особенность недостатком, но в нашем случае является неоспоримым достоинством!), при этом все запущенные службы продолжают работать. Загрузка процесора порядка 5%, и всего на одно ядро из 4-х!




5. Устанавливаем ownCloud


5-ой стабильной версией этого облачного сервиса можно уже вполне комфортно пользоваться. Очень подробно установка owncloud описана на официальной странице(http://doc.owncloud.org/server/5.0/admin_manual/), здесь приведу основные шаги относительно к нашей инсталляции:

  • Создаем базу данных, например через вебмин-панель, и пользователя для этой базы с полными правами на нее.
  • Инсталлируем owncloud. На текущий момент появился репозиторий, который сильно упрощает процесс:

sudo echo 'deb http://download.opensuse.org/repositories/isv:ownCloud:community/Debian_7.0/ /' >> /etc/apt/sources.list.d/owncloud.list 
sudo apt-get update
sudo apt-get install owncloud


Теперь заходим в браузере на

http://<ip-of-the-box>/owncloud/

и завершаем настройку owncloud: вводим данные базы MySQL.

В случае, если инсталлятор жалуется на невозможность использования .htaccess,
изменяем в файле /etc/apache2/sites-enabled/000-default AllowOverride на All:

sudo nano /etc/apache2/sites-enabled/000-default
 <Directory /var/www/>
 …
      AllowOverride None → AllowOverride All
… 
</Directory>


а также и в файле /etc/apache2/sites-enabled/default-ssl, если предполагается использовать owncloud с SSL:

sudo nano /etc/apache2/sites-enabled/default-ssl
<Directory /var/www/>
 …
      AllowOverride None → AllowOverride All
… 
</Directory>


и перезагружаем вебсервер:

sudo service apache2 restart

Дальнейшая настройка owncloud обычно не вызывает проблем и подробно описана в руководстве адмнинистратора.

5.1 Если мало места

Размер „облачного“ хранилища при описанной установке ограничен свободным местом на SD-карте. Удобным способом увеличить объем доступного места является вынесение папки owncloud/data на внешний USB-HDD.

Для этого форматируем любым способом внешний USB-диск (например его первый раздел) как ext4, и указываем его точку монтирования в /etc/fstab:
sudo mkdir /mnt/usb_hdd
sudo chmod a+rwx /mnt/usb_hdd

sudo nano /etc/fstab

…
/dev/block/sda1 /mnt/usb_hdd             ext4       noatime,acl,user_xattr        1 1
…


Монтируем диск

mount /mnt/usb_hdd

и переносим owncloud/data на него:
sudo mv /var/www/owncloud/data /mnt/usb_hdd/
sudo ln -s /mnt/usb_hdd/data /var/www/owncloud/data


Теперь объем нашего хранилища ограничен только свободным местом на внешнем USB-диске.




6. Бэкап по плану


Легко и быстро, с помощью duplicity, организовывается регулярный backup на внешний сервер, при желании также с шифрованием.
Если основной файл-сервер как у меня расположен в той же сети и поддерживает wake-on-lan, то этот процесс можно полностью автоматизировать(запуск файл-сервера включительно).

sudo apt-get install wakeonlan duplicity

Мы создадим папку для бэкапов (например /media/backup/owncloud) на файл-сервере 192.168.0.2 с MAC-адресом 33:d0:ab:dd:11:c1,
для которой локальный пользователь user1 имеет права на запись.

Настраиваем беспарольный доступ для пользователя root по SSH на файл-сервер:
sudo su
ssh-keygen -t rsa
(пароль не вводим, просто жмем ввод)
ssh-copy-id -i .ssh/id_rsa.pub user1@192.168.0.2
exit


теперь вносим задания для таскменеджера в crontab:

sudo crontab -e
49 23 * * * 	/usr/bin/wakeonlan  33:d0:ab:dd:11:c1 
0 0 * * sun     /usr/bin/duplicity full --no-encryption --volsize 100 --exclude /tmp --exclude /proc --exclude /sys / rsync://user1@192.168.0.2//media/backup/owncloud
0 0 * * 1-6     /usr/bin/duplicity --no-encryption --volsize 100 --exclude /tmp --exclude /proc --exclude /sys / rsync://user1@192.168.0.2//media/backup/owncloud
0 1 * * sun     /usr/bin/duplicity remove-all-but-n-full 2 --force rsync://user1@192.168.0.2//media/backup/owncloud


По этому плану будет производится бэкап всего нашего chroot-окружения, по воскресениям полный, в другие дни инкрементальный, с удалением старых записей. Если файл-сервер спит, он будет разбужен заранее по сети (конечно если он поддерживает эту функцию).




Ну вот, имеем одновременно работающий медиа-центер и веб-сервер с облачным хранилищем.
Конструктивные критика и предложения приветствуются.

Комментарии 33

    +1
    Ну, полезность «облачности» вызывает сомнения, а вот про Linux Deploy спасибо! Не слышал ничего, как ни странно.
      +1
      Перепробовал практически все подобные андроид-приложения, но именно Linux Deploy с большим отрывом впереди по удобству пользования.
    • НЛО прилетело и опубликовало эту надпись здесь
        0
        Да нет, HP действительно жужжать перестал — теперь все часто используемые файлы документов и фото лежат в owncloud, а файл-сервер НР включается только если нужно что-то из архива файлов или на время бэкапа(а потом автоматически выключается). Так что экономия ресурсов налицо ;)

        А насчет быстродействия, я в самом деле приятно удивлен. 4 ядра 1,2ГГц и 2 Гб ОЗУ делают из этого малыша серьезного конкуррента многим ARM-NASам.
        • НЛО прилетело и опубликовало эту надпись здесь
            0
            А кто сказал Гигабит? Тут 100 MBit, что гораздо менее весело.
            • НЛО прилетело и опубликовало эту надпись здесь
          0
          У меня дома Cubieboard (спеки).
          С апреля месяца там крутиться nginx, rtorrent+rutorrent, mysql, owncloud, samba + 4Тб SATA, 2x2Тб USB хитачики (раньше всё кроме owncloud, mysql крутилось на роутере и те два USB хитачика были). Там Linaro 12.11
          Сейчас на роутере осталось OpenVPN, srelay, tinyproxy, проброс IPTV от провайдера (OpenWRT). Жду доставки Cubietruck (спеки) для переезда с Cubieboard.
          В планах прикрутить DNLA (просто телика в комнате нет), может ещё чё нить прикрутить.
          +3
          Не совсем понял — в чем выражается облачность данного решения?
          В моем представлении облако — это когда виртуальная машина каким-либо образом «размазана» по нескольким физическим.
          Или я не прав?
            +1
            Облачность выражается в названии «OwnCloud» :)
              0
              Как-бы да. Только в названии OwnCloud и есть ;)
              Но!
              Это решение предоставляет много необходимых функций для рядового пользователя, присущих «настоящим» облачным сервисам, как то:
              — доступ к своим файлам по WebDAV (родная утилита owncloud sync для windows/linux/mac позволяет синхронизироват свои файлы, как это делает например dropbox. Для андроида и айфонов также есть соотв. приложение на маркете);
              — синхронизацию календаря и контактов через calDAV i cardDAV например с Thunderbird, а также со смартфонами;
              — фотогалерея;
              — проигрывание музыки и видео прямо из веб-браузера;
              — возможность делиться файлами с другими пользователями;
              — расширение функционала с помощью плагинов: список заданий, заметки, закладки, и т.д.

              В общем, теперь есть все, чтобы в принципе не зависеть от любопытных Google & Co.
                0
                Да я то знаю, что тако OwnCloud и сам его пользую в качестве CardDav для бекапа контактов в своем телефоне. :)
                Просто название статьи как бы намекает, что будет построено настоящее домашнее облако, а не установлен OwnCloud, о чем многие в комментариях и намекали. ;)

                Я бы на вашем месте еще добавил как минимум один диск и все это поднял бы на RAID-1. Для надежности.

                А так — сдох винт и все данные с ним вместе. Как-то некомильфо.
                  0
                  В пункте 6 как раз защита на такой случай и описана: лучше регулярного бэкапа только много регулярных бэкапов ;)
                    0
                    Бекап никак не замена RAID. Если у Вас умер винт, то это даунтайм на время установки, настройки, восстановления из бекапа. Если винт умер в рейде, то это даунтайм на время замены винта.

                    Разница существенная.
                      0
                      Ну кто же с этим спорит? Просто в моем случае даунтайм не критичен, а восстановить инсталляцию дебиана и накатить моих 16гб максимум с помощью duplicity — дело пары часов.
                      Но рейд можно тоже сделать, девайс имеет 2 USB 2.0 и один микро-USB.
                  0
                  как долго вы используете owncloud? и для каких целей?
                  я вот попытался хранить там коллекцию фоток, чтоб получать\загружать их в «облако» их разных мест — я обломался
                    0
                    Как и написано выше — синхронизация контактов и календаря.
                    Больше ни для чего.
                      0
                      Знакомый вот уже 2 года в продакшене использует owncloud-календарь для синхронизации и планирования работы 4-5 коллег.
                      По-моему еще версия ОС 4.0.4.
                      Смартфоны на андроид, дектопный Thunderbird.
                      Перешел на него после нескольких раз полной потери данных на «бесплатном» google calendar :)
                      Доволен. Как слон.

                      Я лично пользуюсь постоянно где-то около года, храню там некоторое количество документов, которые желательно иметь под рукой, но нежелательно терять вместе со смартфоном, плюс актуальные фото, немного музыки и видео.
                      Ну и конечно личные календарь и контакты. Зачем нашим американским друзьям ну прямо все-все о нас знать?
                +1
                Неплохой домашний NAS получается из WD MyBook Live — при цене на ~25% дороже встроенного диска мы получаем NAS с гигабитным сетевым интерфейсом, средненьким процессором (но умеющим быстро работать со своим HDD) и 256Mb RAM. Жаль только что нет USB.

                У меня 3Tb версия, на ней крутится transmission (торренты), bitTorrentSync (синхронизация/бекапы с мобильника и ноута), файлопомойка и медиа-сервер (twonky).
                Для многих применений этого вполне хватает.
                Цена вопроса 3Tb версии ~5500 руб.
                  +2
                  замеры скорости работы по сети с сетевым диском в студию
                    0
                    с сетевым диском пока не мерял, но вот с внешними серверами примерно такая картина:

                    — HP 36L, 1GBit Ethernet —
                    python ~/tespeed.py 
                    Getting ready. Use parameter -h or --help to see available features.
                    Loading speedtest configuration...
                    Loading server list...
                    Looking for closest and best server...
                    Testing latency...
                    14 ms latency for http://speedtest.internetx.de/speedtest/
                    54 ms latency for http://speedtest.emc-corp.net/speedtest/
                    15 ms latency for http://www.speed-001.com/speedtest/
                    24 ms latency for http://www.freshworx.com/speedtest/speedtest/ 
                    30 ms latency for http://speedtest.com-in.net/mini/speedtest/ 
                    Download size: 1.96 MiB; Downloaded in 0.10 s                                              
                    Download speed: 19.40 Mbit/s
                    Download size: 1.96 MiB; Downloaded in 0.10 s                                              
                    Download speed: 19.44 Mbit/s
                    Download size: 8.09 MiB; Downloaded in 0.33 s                                              
                    Download speed: 24.46 Mbit/s
                    Download size: 8.09 MiB; Downloaded in 0.33 s                                              
                    Download speed: 24.44 Mbit/s
                    Download size: 17.89 MiB; Downloaded in 0.71 s                                             
                    Download speed: 25.04 Mbit/s
                    Download size: 17.89 MiB; Downloaded in 0.71 s                                             
                    Download speed: 25.05 Mbit/s
                    Download size: 31.78 MiB; Downloaded in 1.26 s                                             
                    Download speed: 25.23 Mbit/s
                    Download size: 71.49 MiB; Downloaded in 2.82 s                                             
                    Download speed: 25.39 Mbit/s
                    Download size: 126.52 MiB; Downloaded in 4.98 s                                            
                    Download speed: 25.42 Mbit/s
                    Download size: 198.53 MiB; Downloaded in 7.80 s                                            
                    Download speed: 25.44 Mbit/s
                    Upload size: 2.10 MiB; Uploaded in 0.88 s                                                  
                    Upload speed: 2.38 Mbit/s
                    Upload size: 2.10 MiB; Uploaded in 0.88 s                                                  
                    Upload speed: 2.39 Mbit/s
                    Upload size: 8.39 MiB; Uploaded in 3.36 s                                                  
                    Upload speed: 2.50 Mbit/s
                    Upload size: 8.39 MiB; Uploaded in 3.44 s                                                  
                    Upload speed: 2.44 Mbit/s
                    Upload size: 12.58 MiB; Uploaded in 5.01 s                                                 
                    Upload speed: 2.51 Mbit/s
                    


                    — K-R42, 54MBit WiFi —
                    python ~/tespeed.py 
                    Getting ready. Use parameter -h or --help to see available features.
                    Loading speedtest configuration...
                    Loading server list...
                    Looking for closest and best server...
                    Testing latency...
                    28 ms latency for http://speedtest.internetx.de/speedtest/
                    66 ms latency for http://speedtest.emc-corp.net/speedtest/
                    29 ms latency for http://www.speed-001.com/speedtest/
                    37 ms latency for http://www.freshworx.com/speedtest/speedtest/
                    43 ms latency for http://speedtest.com-in.net/mini/speedtest/
                    Download size: 1.96 MiB; Downloaded in 0.96 s                                              
                    Download speed: 2.04 Mbit/s
                    Download size: 1.96 MiB; Downloaded in 1.03 s                                              
                    Download speed: 1.91 Mbit/s
                    Download size: 8.09 MiB; Downloaded in 3.83 s                                              
                    Download speed: 2.11 Mbit/s
                    Download size: 8.09 MiB; Downloaded in 3.86 s                                              
                    Download speed: 2.10 Mbit/s
                    Download size: 17.89 MiB; Downloaded in 7.96 s                                             
                    Download speed: 2.25 Mbit/s
                    Upload size: 2.10 MiB; Uploaded in 4.02 s                                                  
                    Upload speed: 0.52 Mbit/s
                    Upload size: 2.10 MiB; Uploaded in 3.69 s                                                  
                    Upload speed: 0.57 Mbit/s
                    Upload size: 8.39 MiB; Uploaded in 15.99 s                                                 
                    Upload speed: 0.52 Mbit/s
                    


                    Как видно, беспроводная связь сильно ограничивает скорость обмена, но в моей квартире и ноутбук не больно-то через вайфай шустрит.
                    Немного непонятно, почему аплоад меньше, чем у НР…

                    Скрипт testspeed.py брал тут, исправил правда в заголовке
                    from SocksiPy import socks
                    на
                    import socks
                    ато иначе вылетает с ошибкой.
                    0
                    Странная замена, полноценного сервера на медиа-приставку? Конечно все зависит от того, что вам нужно, но здесь «облака» ограничены sd картой, а внешний диск будет безумно медленным. Фильмы то хранить где-то надо для их проигрывания, на sd много в хорошем качестве не набросаешь, нужны нормальные диски, передача медиа с файл-сервера по сети и трансляция на тв получается. Как скорости?

                    В итоге я так понимаю медиа-приставка и файл-сервер? Может проще было было miniItx собрать, все в одном.
                      0
                      Проще. Лучше.
                      Но дороже, и не так незаметно и симпатично смотрелось бы на кухне на полке возле телевизора.

                      Насчет скоростей — HD 720p video по uPnP не заикается, и прокрутка довольно плавная.
                      Точно не мерял, все руки не дойдут.
                      0
                      8 Gb ECC RAM

                      Боюсь даже представить, что у вас там крутится)
                        0
                        У меня тоже N36L, и тоже 8 гиг (только не ECC). uTorrent отлично их кушает своим кэшем :)
                          0
                          Ну в принципе немного: парочка виртуальных дебианов для разработки и сервисов, пара виртуальных виндовс (XP i W7) для тестов и поддержки клиентов. Плюс samba. Ну и в общем-то все…
                          0
                          ставить на столь слабое устройсто owncloud — бессмысленное развлечение
                          у меня домашний комп (старый уже — 4ггц п4 и 3 гига рамы) уходил в 100% загрузку на несколько часов при попытке загрузки коллекцию фоток (тыщ 5 штук, или около того) и натужно гудел кулерами
                          пользуюсь бтсинком, он вообще на малиновом пи стоит и не ест почти электричество и звуков не издаёт
                            0
                            А разве у Pi есть чем шуметь?
                              0
                              BT Sync хороший, но из списка кандидатов выпал, ибо пока что не open source (пропадает смысл «личного» хранилища данных).
                                0
                                пробовал загрузить в owncloud архив фотографий ~50k и он не справился, да и просто с синхронизацией файлов у него все грусно, а btsync почти хорош, но у него нет веб морды для того чтоб достать конкретный вайл не синхронизируюя все. В итоге я их просто скрестил — за синхронизацию отвечает btsynс, но синхронизирует он все в папку owncloud. В итоге имеем быструю и работающую синхронизацию и веб морда для доступа к файлам, просмотру фотографий и прослушивания музыки.
                                0
                                А как оно с торрентами работает? Какова максимальная скорость скачивания?
                                  0
                                  А XBMC через Android работает или в chroot?
                                    0
                                    через андроид. если бы были драйвера под линукс для графического акселератора, то я бы тут же, недолго думая, поставил бы на него что-то вроде Picuntu. И тогда бы железка просто летала…
                                    Вон, оригинальный Picuntu-вебсайт в индии на 2-хядерном RK3066 летает ;)

                                  Только полноправные пользователи могут оставлять комментарии. Войдите, пожалуйста.

                                  Самое читаемое