Персональное облако на Raspberry Pi 3

Posted by

Порой все что я делал на Ubuntu Trusty на работе и дома я хотел бы повторить, но ориентировавшись на купленный в этом году миникомпьютер +. Мне просто интересно, как он себя поведет, справлюсь ли я с той ответственной задачей. Вот недавно я для домашнего использования разобрал шаги, как заставить работать персональное облако под файлы на Raspberry Pi 3. Я все задокумментировал, если вдруг мне понадобится переустанавливать или разворачивать знакомым, потому как я уже убедился и не раз, что если ты даешь инструкцию со всеми необходимыми действия, то для тебя это кажется легко, а вот для некоторых нет. И не важно какая это инструкция, столь подробная как это или какая-либо другая. Просто подготовка каждого человека отличается. Чего же я добился данной задачей, а то что теперь мой сервис для хранения заметок располагается на маленькой плате с подключенным к ней либо внешним жестким диском, либо домашним хранилищем WD My Book Live Duo.

Вся работа была проделана на связке дистрибутива jessie + owncloud + nginx

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

на свой миникомпьютер Raspberry Pi 3 Model B+

Итак, моя система:

pi@raspberrypi:~ $ uname -a && lsb_release -a

Linux raspberrypi 4.4.50-v7+ #970 SMP Mon Feb 20 19:18:29 GMT 2017 armv7l GNU/Linux

No LSB modules are available.

Distributor ID: Raspbian

Description: Raspbian GNU/Linux 8.0 (jessie)

Release: 8.0

Codename: jessie

pi@raspberrypi:~ $ sudo usermod -a -G www-data www-data

Начинаю заметку с установки необходимых пакетов для выполнения задачи:

pi@raspberrypi:~ $ sudo apt-get install nginx openssl ssl-cert php5-cli php5-mysql php5-gd php5-common php5-cgi php-pear php-apc curl libapr1 libtool curl libcurl4-openssl-dev php-xml-parser php5 php5-dev php5-curl php5-gd php5-fpm memcached php5-memcache varnish -y

Создаю SSL сертификат, чтобы доступ к собственному облаку был по URL ссылке вида https, а не http:

pi@raspberrypi:~ $ sudo openssl req $@ -new -x509 -days 3650 -nodes -out /etc/nginx/server.pem -keyout /etc/nginx/server.key

Common Name (e.g. server FQDN or YOUR name) []: 10.7.8.53

На заметку: указываю либо IP адрес, либо полное DNS имя с суффиксом, к примеру: raspberry.polygon.local, но т. к. данный сервис owncloud будет внутри локальной сети, а доступ к нему из вне посредством проброса порта, то правильнее будет указать IP адрес текущей системы как сделал Я.

pi@raspberrypi:~ $ sudo chmod 600 /etc/nginx/server.pem

pi@raspberrypi:~ $ sudo chmod 600 /etc/nginx/server.key

pi@raspberrypi:~ $ cat /proc/cpuinfo | grep processor

processor : 0

processor : 1

processor : 2

processor : 3

pi@raspberrypi:~ $ sudo nano /etc/nginx/nginx.conf

worker_processes 4;

worker_connections 1024;

pi@raspberrypi:~ $ sudo su root bash -c "cat > /etc/nginx/sites-available/default"

^C (Нажимаю сочетание клавиш Ctrl + C)

pi@raspberrypi:~ $

pi@raspberrypi:~ $ sudo unlink /etc/nginx/sites-available/default

pi@raspberrypi:~ $ sudo nano /etc/nginx/conf.d/owncloud.conf

upstream php-handler {

server 127.0.0.1:9000;

#server unix:/var/run/php5-fpm.sock;

}

server {

listen 80;

server_name 10.7.8.53;

return 301 https://$server_name$request_uri; # enforce https

}

server {

listen 443 ssl;

server_name 10.7.8.53;

add_header Strict-Transport-Security "max-age=63072000; includeSubdomains; ";

ssl_certificate /etc/nginx/server.pem;

ssl_certificate_key /etc/nginx/server.key;

# Path to the root of your installation

root /var/www/owncloud;

client_max_body_size 2000M; # set max upload size

fastcgi_buffers 64 4K;

rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;

rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;

rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;

index index.php;

error_page 403 /core/templates/403.php;

error_page 404 /core/templates/404.php;

location = /robots.txt {

allow all;

log_not_found off;

access_log off;

}

location ~ ^/(?:\.htaccess|data|config|db_structure\.xml|README) {

deny all;

}

location / {

rewrite ^/.well-known/host-meta /public.php?service=host-meta last;

rewrite ^/.well-known/host-meta.json /public.php?service=host-meta-json last;

rewrite ^/.well-known/carddav /remote.php/carddav/ redirect;

rewrite ^/.well-known/caldav /remote.php/caldav/ redirect;

rewrite ^(/core/doc/[^\/]+/)$ $1/index.html;

try_files $uri $uri/ index.php;

}

location ~ \.php(?:$|/) {

fastcgi_split_path_info ^(.+\.php)(/.+)$;

include fastcgi_params;

fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;

fastcgi_param PATH_INFO $fastcgi_path_info;

fastcgi_param HTTPS on;

fastcgi_pass php-handler;

}

location ~* \.(?:jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {

expires 30d;

access_log off;

}

}
pi@raspberrypi:~ $ sudo vi /etc/php5/fpm/php.ini

upload_max_filesize = 2000M

post_max_size = 2000M

pi@raspberrypi:~ $ sudo nano /etc/php5/fpm/pool.d/www.conf

;listen = /var/run/php5-fpm.sock

listen = 127.0.0.1:9000

Увеличиваем размер swap файла со 100Мб до 512Мб:

pi@raspberrypi:~ $ sudo nano /etc/dphys-swapfile

#CONF_SWAPSIZE=100

CONF_SWAPSIZE=512

pi@raspberrypi:~ $ sudo reboot

Теперь разворачиваем программное обеспечение owncloud на подготовленную систему Raspbian:

pi@raspberrypi:~ $ sudo mkdir -p /var/www/owncloud

pi@raspberrypi:~ $ wget https://download.owncloud.org/community/owncloud-9.1.4.tar.bz2

pi@raspberrypi:~ $ bzip2 -d owncloud-9.1.4.tar.bz2

pi@raspberrypi:~ $ tar xf owncloud-9.1.4.tar

pi@raspberrypi:~ $ sudo mv owncloud/ /var/www/

pi@raspberrypi:~ $ sudo chown -R www-data:www-data /var/www

pi@raspberrypi:~ $ rm owncloud-9.1.4.tar

pi@raspberrypi:~ $ sudo nano /var/www/owncloud/.htaccess

#php_value upload_max_filesize 513M

php_value upload_max_filesize 2000M

#php_value post_max_size 513M

php_value post_max_size 2000M

#php_value memory_limit 512M

php_value memory_limit 2000M

После не забываем сохранить внесенные изменения.

Теперь нужно установить MySQL, т. к. для работы OwnCloud нужна база:

pi@raspberrypi:~ $ sudo apt-get install mysql-server -y

New password for the MySQL "root" user: 712mbddr@

Repeat password for the MySQL "root" user: 712mbddr@

pi@raspberrypi:~ $ sudo mysql_secure_installation

pi@raspberrypi:~ $ mysql -u root -p712mbddr@

mysql> create database db_owncloud character set utf8;

mysql> create user 'us_own'@'localhost' identified by '612mbddr@';

mysql> grant all on db_owncloud.* to 'us_own'@'localhost';

mysql> flush privileges;

mysql> exit;

Далее проверяю что Webсервис nginx работоспособен с текущими настройками которые я проделал выше:

pi@raspberrypi:~ $ sudo nginx -t

nginx: the configuration file /etc/nginx/nginx.conf syntax is ok

nginx: configuration file /etc/nginx/nginx.conf test is successful

pi@raspberrypi:~ $ sudo service php5-fpm restart

pi@raspberrypi:~ $ sudo service nginx stop && sudo service nginx start

pi@raspberrypi:~ $ sudo netstat -tulpn | grep nginx

tcp 0 0 0.0.0.0:443 0.0.0.0:* LISTEN 7843/nginx -g daemon

tcp 0 0 0.0.0.0:80 0.0.0.0:* LISTEN 7843/nginx -g daemon

Теперь открываем браузер со своей рабочей станции и в строке адреса указываем http://IP&DNS (сменится на https://IP&DNS) адрес сервера где шагами выше развернули сервис персонального облака на собственном железе, точнее миникомпьютере Raspberry Pi 3 Model B+.

И указываю параметры настройки:

Create an admin account:

Указываю настройки для установки OwnCloud на Raspberry Pi 3 Model B

  • Username: ekzorchik
  • Password: 712mbddr@
  • Data folder: /var/www/owncloud/data

Т.к. у меня только MySQL установлена, то и установщик говорит мне об этом: Only MySQL/MariaDB is available.

  • Database user: us_user
  • Database password: 612mbddr@
  • Database name: db_owncloud

localhost

и нажимаю Finish Setup, ожидаю:

Ожидаю покуда процесс установки завершится

Да не быстро происходит установка, но это же не ноутбук и не компьютер, а все таки миникомпьютер Raspberry Pi 3 Model B+

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

Текущее облако занимает ничтожно малое место

Проверяю, каково использование системы после разворачивания программного обеспечения owncloud на Raspberry Pi 3 Model B+ операционной системе Raspbian:

pi@raspberrypi:~ $ free -m

Одного гигабайта памяти для OwnCloud маловато на Raspberry Pi 3 Model B+

Вывод: всё же 1Gb оперативной памяти для собственного хранилища как-то маловато, да и насилие над картой памяти MicroSD не внушает доверие по размещению важной информации в собственном облаке. Все же лучше использовать либо собранный под эту задачу компьютер с возможностью организации RAID. Ведь не столь ценно железо, как информация хранимая на нем. Если хочется просто поэкспериментировать, то такой вариант использования Owncloud на Raspberry Pi 3 Model B+ может сгодится.

Вообще задумка данной заметки была в том, чтобы через USB подключить к миникомпьютеру внешний жесткий диск и все файлы хранить на нем. Плюс к этому раз в день делать резервную копию каталога data на внешнее хранилище.
Отлично, задача выполнена. Вот собственно и всё, с уважением Олло Александр aka ekzorchik.