...

вторник, 22 октября 2013 г.

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

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

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


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

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



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


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


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


Стоит отметить, что как медиа-центр он работает на ура: актуальный на сегодня 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


На роутере необходимо разрешить 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


Пусть папка для бэкапов на файл-сервере 192.168.0.2 s mac-address 33:d0:ab:dd:11:c1 называется к примеру /media/backup/owncloud,

а локальный пользователь с правми записи в нее 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://rus@192.168.178.5//media/backup/owncloud
0 0 * * 1-6 /usr/bin/duplicity --no-encryption --volsize 100 --exclude /tmp --exclude /proc --exclude /sys / rsync://rus@192.168.178.5//media/backup/owncloud
0 1 * * sun /usr/bin/duplicity remove-all-but-n-full 2 --force rsync://rus@192.168.178.5//media/backup/owncloud


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




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

Конструктивные критика и предложения приветствуются.


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at fivefilters.org/content-only/faq.php#publishers. Five Filters recommends:



Комментариев нет:

Отправить комментарий