Страницы

воскресенье, 1 июня 2014 г.

Nginx, OwnCloud, Pydio, Bittorrent tracker. Доступ и распространение авторских материалов альтернативным способом

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

Во первых, это должен быть не домашний настольный компьютер. Хотя я сплошь и рядом это нарушаю.
Во вторых, это должен быть тихий, малопотребляющий и компактный компьютер, чтобы он мог  работать 24 часа в сутки, с минимальным вмешательством.
В третьих, это должен быть компьютер под управлением Linux.
В четвертых, он должен позволять удалённое управление, должен работать без клавиатуры и мыши, без монитора. Восстанавливаться и загружаться после потери питания.
В пятых, он должен иметь постоянное подключение к сети Интернет.
В шестых, должен поддерживать ftp,web-сервера, подключение webdav, ssh ftps, https, rsync, bittorrent и пр.

Я подобрал небольшие предварительные конфигурации для домашнего облака, которая возможно будет отвечать этим требованиям на сегодняшний момент (Май 2014 года).

1. Intel NUC (с процессором Celeron), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
2. Pegatrom Mercury L6 (с процессором Celeron, пассивное охлаждение), Гибридный 1 Тб винчестер SSD Seagate, память 4Г.
3. Сетевой жесткий диск WD Cloud, с модифицированной прошивкой.

Конфигурации начальные, обеспечивают цену домашнему облаку менее 11 тыс. руб.
И при текущей стоимости интернет-подключения ~450 руб./мес. 5500 руб. в год.
Если сравнить стоимость со стоимостью облачного хранения, например в Google за 120$ за терабайт, то возникают некоторые вопросы. Однако, домашнее, непосредственно доступное облако с некоторых позиций выглядит предпочтительнее.


Установка и настройка web-сервера nginx


Nginx - известный кэширующий веб-сервер.
Веб-сервер занимается тем, что отдает файлы с сервера, по протоколу http/https клиенту.

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

В Ubuntu 14.04 он идёт в пакетах,

$ sudo apt-get install nginx
либо
$ sudo apt-get install nginx-extras

Последний пакет, нужен если будет (а он будет, удобно) использоваться протокол webdav на сервере, для каких-то иных целей. В ownCloud встроен собственный webdav, так что системный не задействуется, как я понимаю.
Но у меня заработало более менее с nginx-extras


Основной конфигурационный файл web-сервера nginx: /etc/nginx/nginx.conf

Конфигурация сайта по умолчанию, сразу после установки: /etc/nginx/sites-enabled/default,
/etc/nginx/sites-enabled - это ссылки на конфигурации сайтов которые будет работать после запуска сервиса nginx
/etc/nginx/sites-available - это конфигурации сайтов, как работающих так и в процессе настройки и конфигурирования (неработающих).


Сайт по-умолчанию, после установки работает на 80 порту и содержит приветствие nginx.

Просмотреть его можно по ссылке: http://localhost/


Пользователь добавленный в систему: www-data

Простейшая документация по web-серверу и его конфигурационному файлу: http://nginx.com/resources/admin-guide/web-server/


Теперь надо определиться с месторасположением (location) файлов web-сервера в локальной файловой системе компьютера.

Пусть это будет /srv/www
Создадим /srv/www и установим пользователя www-data у этого каталога.

# mkdir /srv/www
# chown -R www-data:www-data /srv/www

Сюда (в /srv/www) можно скопировать index.html файл из начального примера.

http://localhost/index.html


※※※


Предварительно устанавливаемые пакеты


autogen - генератор текстовых файлов по шаблону.
ntp - сервис "сетевая служба времени", понадобиться, видимо при синхронизации файлов между клиентами owncloud.
clamav - антивирусная проверка файлов.

К серверу добавится служба времени, служба антивируса, и обновления времени и баз сигнатур (отпечатков вирусов) антивируса.

※※※


Установка PHP5


PHP5 - дедушка Интернета. Использовался с очень древних пор. Но всё ещё продолжает использоваться. Кому-то нравиться.

Поиск пакетов в репозитории:
apt-cache search php5
apt-cache search php



Общий список устанавливаемых пакетов:

$ sudo apt-get install php5 php5-cgi php5-cli php5-common php-pear php5-fpm php5-mysqlnd php5-pgsql php5-sqlite php5-ldap php-xml-parserphp5-curl php5-dev php5-gd php5-imagick php5-intl php5-mcrypt

Базовая система
php5 - метапакет серверной части.
php5-cgi отдельный пакет, обеспечивающий связь Common Gateway Interface c php.
php5-cli
php5-common

php-pear

Отдельные модули php5

php5-fpm - PHP-FPM демон для запуска FastCGI сервера, для обработка php-программ.

php5-mysqlnd - родной пакет для поддержки связи php и субд mysql
php5-pgsql - пакет для поддержки связи php и субд postgresql
php5-sqlite - пакет для поддержки связи php и субд sqlite

php5-ldap - пакет для поддеркжи связи php и LDAP-серверов
php-apc - пакет для оптимизатора
php5-apc - если найдётся в пакетах

php-xml-parserphp5-curl
php5-dev
php5-gd
php5-imagick - поддерка связи php и imagick - утилиты и библиотеки обработки графических файлов
php5-intl - интернационализация
php5-mcrypt - поддержка какого-то кодирования


Конфигурационные файлы:
/etc/php5/cli/php.ini
/etc/php5/fpm/php.ini

В этих файлах надо настроить ограничения (снять) на размер загружаемого файла (обычное 2 Мб).

Установим максимальный размер загружаемого файла (пусть это будет архив, видео, резервный файл и т.п)

upload_max_filesize = 16G

Также приведём в соответствие максимальный размер POST-запроса, передаваемого серверу
post_max_size = 16G
Объём памяти выделяемый под загружаемый файл, пусть будет больше загружаемого файла, чтобы с запасом.
Единственное что, сложно - это размер памяти сервера, он достаточно мал, будет использоваться подкачка.

memory_limit = 20G

Плюс над протестировать в реальных условиях, а то может получить не очень хорошо.

Ещё кое что надо сделать в этих файлах (/etc/php5/fpm/php.ini):
cgi.fix_pathinfo=0

После внесения изменений перезапустить php5-fpm:
# service php5-fpm restart


Долго не мог понять, почему не изменяется размер возможного загружаемое файла в ownCloud, вроде все опции настроил по инструкции, перезапускал и сервер и php-rpm. Решение оказалось банальным - перезапустить компьютер. Что-то, где-то, видимо было недообновлено.

※※※

Опционально. Установка СУБД mySQL 


Для домашнего использования, совсем необязательно использовать mysql сервер и настраивать его. Достаточно использовать sqlite3.

# apt-get install mysql-server mysql-client


Настройку mysql, но я выбираю postgresql приведу возможно позже, в рамках другой заметки.

※※※

Подготовка и установка цифровых сертификатов подлинности сервера


Самоподписанные сертификаты позволяют без затрат денег, установить "заглушку" в протокол https, т.е. всё будет почти также работать как с настоящими сертификатами, но только при открытии сайта (в данном случае облака) обычные браузеры будут сообщать о риске и недоверенном узле. Тут надо будет добавить в список исключений этот сертификат облака и тогда на это можно будет не обращать внимания. Разве только красным цветом выделение надписи https будет "напрягать".

В результате мы должны получить 2 файла:

microserver.key - частный (приватный) ключ
microserver.crt - самоподписанный сертификат виртуального сервера

Инструкцию с описанием шагов по генерации самоподписанных сертификатов можно посмотреть на ресурсе [8].

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

openssl genrsa -des3 -out microserver.key 2048
openssl rsa -in microserver.key -out microserver.key.insecure
mv microserver.key microserver.key.secure
mv microserver.key.insecure microserver.key
openssl req -new -key microserver.key -out microserver.csr
openssl x509 -req -days 365 -in microserver.csr -signkey microserver.key -out microserver.crt


Скопировать их в хранилище сертификатов и ключей.
sudo cp microserver.crt /etc/ssl/certs
sudo cp microserver.key /etc/ssl/private

Пути к этим файлам, будут позже прописаны в конфигурации виртуального хоста nginx, чтобы сервер мог осуществлять https-соединения.
※※※

Подготовка к установке ownCloud

Для установки ownCloud в Ubuntu 14.04, проще всего подключить репозиторий, c сайта проекта[11]:

$ wget http://download.opensuse.org/repositories/isv:ownCloud:community/xUbuntu_14.04/Release.key 
$ sudo apt-key add - < Release.key
$ sudo sh -c "echo 'deb http://download.opensuse.org/repositories/isv:/ownCloud:/community/xUbuntu_14.04/ /' >> /etc/apt/sources.list.d/owncloud.list" 
$ sudo apt-get update 
$ sudo apt-get install owncloud

Если все ранее указанные пакеты программ были установлены ранее, то эта команда установить чистую систему персонального облака. Т.е. все зависимости облака выявлены и понятно, какие компоненты добавлены в систему сервера. Это важно понимать, чтобы проверить на возможные возникшие дыры и т.п.

Может потребоваться деинсталляция пакета apache2, т.к. здесь используется nginx.


Облако будет установлено в стандартную папку сайтов: /var/www, под именем owncloud.

Конфигурационный файл облака: /var/www/owncloud/config/config.php

Важная опция trusted_domain, она отвечает за домены с которых будут подключения. Важна, при выводе облака в общую сеть Интернет.

Для начала, лучше подготовить каталог, папку, том(volume), точку монтирования, которая будет выступать в качестве хранилища данных для собственного облака.
Очень часто, хранилище располагается на томе lvm, что даёт некоторые гибкие возможности по увеличению места, но я исповедую иной подход, т.к. увеличение места может закончиться неудачно, а данные огромны и просто так их не зарезервируешь.




Если этого не сделать, то данные будут храниться в папке по умолчанию: /var/www/owncloud/data, что не всегда безопасно, т.к. грозит удалением, при обновлении сервиса.

※※※

Настройка безопасного подключения к облаку ownCloud


"Безопасное подключение" - это использование протокола http поверх (внутри) ssl/tls, с ассиметричным шифрованием данных.


Теперь надо настроить виртуальный www-сервер (vhost nginx) на использование owncloud.
Для начала:
Доменное имя, по которому облако будет доступно: my.domain.name
В частных случаях, это может быть динамическое доменное имя (от сервисов подобных twodns, dyndns).
Если облако доступно только в домашней сети - что не имеет особого смысла, то это может быть avahi-домен, либо IP-адрес внутренней сети.
Т.е. если набрать в браузере https://my.domain.name/, то мы должны попасть на страницу регистрации (login).
Обычно, обычные пользователи используют какой-либо маршрутизатор, которые и принимает белый ip-адрес от провайдера, а остальным домашним клиентам выдаёт "серые" из диапазона неподключенных сетей.
В этом случае, надо делать проброс портов на роутере, регистрацию динамического доменного имени (например  twodns), чтобы таки получить возможность в строке браузера набрать https://my.domain.name/.

Также стоит заметить, что многие провайдеры фильтруют порты до 1024 от внешних обращений, тогда надо порт на котором будет слушать сервер, сдвинуть вверх, например 12443 и при указании адреса в строке указывать и порт: https://my.domain.name:12443/
На время тестирования к серверу можно обращаться по localhost,ip-адресу и пр.



# Виртуальный сервер "Персональное облако"
# сервер: микросервер
# дата: 29.05.2014
server {
       listen 443 ssl;
       listen 80 default_server;
       server_name default 'my.domain.name' '192.168.1.11';
       

       # Корень сайта - корень облака
       root /var/www/owncloud;

#       if ($http_host != "my.domain.name") {
#                 rewrite ^ http://my.domain.name$request_uri permanent;
#       }

       index index.php index.html;


       # Иконка сайта, отображаемая в адресной строке
       location = /favicon.ico {
                log_not_found off;
                access_log off;
       }

       location = /robots.txt {
                allow all;
                log_not_found off;
                access_log off;
       }

       # Запрет доступа к скрытым файлам .htaccess, .htpasswd.
       location ~ /\. {
                deny all;
                access_log off;
                log_not_found off;
       }
       

       # Самоподписанный сертификат и частный незапароленный ключ сервера
       ssl_certificate /etc/ssl/certs/microserver.crt;
       ssl_certificate_key /etc/ssl/private/
microserver.key;


        client_max_body_size 16G; # set max upload size

        rewrite ^/caldav(.*)$ /remote.php/caldav$1 redirect;
        rewrite ^/carddav(.*)$ /remote.php/carddav$1 redirect;
        rewrite ^/webdav(.*)$ /remote.php/webdav$1 redirect;
        rewrite ^/apps/calendar/caldav.php /remote.php/caldav/ last;
        rewrite ^/apps/contacts/carddav.php /remote.php/carddav/ last;
        rewrite ^/apps/([^/]*)/(.*\.(css|php))$ /index.php?app=$1&getfile=$2 last;
        rewrite ^/remote/(.*) /remote.php last;

        
        # Страницы ошибок
        error_page 403 = /core/templates/403.php;
        error_page 404 = /core/templates/404.php;





        # Запрет доступа к системным файлам облака ownCloud
        location ~ ^/(data|config|\.ht|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$is_args$args;
        }

        location ~ ^(.+?\.php)(/.*)?$ {
                        try_files $1 =404;
                        include fastcgi_params;
                        fastcgi_param SCRIPT_FILENAME $document_root$1;
                        fastcgi_param PATH_INFO $2;
                        fastcgi_param HTTPS $https;
                        # fastcgi_pass unix:/var/run/php5-fpm.sock;
                        fastcgi_pass 127.0.0.1:9000;
                        fastcgi_intercept_errors on;
                        fastcgi_index index.php;
                        fastcgi_buffers 64 4K;
        }

        location ~* ^.+\.(jpg|jpeg|gif|bmp|ico|png|css|js|swf)$ {
                        expires 30d;
                        access_log off;
        }
}

Этим файлом можно (либо надо) заменить файл default расположенный в /etc/nginx/site-available/.

Также этот файл (и другие) включается в общую конфигурацию сервера nginx посредством директивы include в файле: /etc/nginx/nginx.conf .



У облака ownCloud есть конфигурационный файл, которые тоже требует внимания пользователя на момент установки.
Располагается в ownCloud/config/config.php

На начальном этапе установки, нас в нём будет интересовать опция trusted_domain - которая укажет какие домены облака доверенные. Будет это полное имя т.н. FQDN, либо просто внутренний ip-адрес, либо и то и другое.

Выглядит он так:

$ cat /var/www/owncloud/config/config.php

<?php
$CONFIG = array (
  'instanceid' => 'oc2344a23abc',
  'passwordsalt' => 'ab1137423168fd7c2a6223a6b520b',
  'trusted_domain' =>
  array (
    0 => 'localhost:443', 1 => 'mir.local:443', 2 => 'my.domain.name:443'
  ),

  'datadirectory' => '/mnt/oblako',
  'dbtype' => 'sqlite3',
  'version' => '6.0.3.1',
  'installed' => true,
  'allowZipDownload' => false,
);

Тут видно и точку монтирования заданную при установке облака - /mnt/oblako. Это отдельный том, общим объёмом около 50Гб.

По идее виртуальных сайтов, можно сделать несколько установок owncloud, каждую в свой отдельный каталог, для различных целей. Например, одно облако для просмотра коллекций, а другое только для загрузки или обмена с пользователями.
Либо один сайт с облаком для предварительного тестирования всяких возможностей, чтобы затем перенести в работающее облако.




Из недостатков системы (точнее интеграции её в систему) - это то, что хранение данных, ведётся из под пользователя www-data и сложно пополнять базу документов и пр., с помощью простого файлового менеджера. После загрузки файлов с помощью файлового менеджера, из консоли, надо обязательно изменить права владельца, со своих на www-data, либо использовать webdav подключение, либо монтировать файловую систему webdav. В этих случаях, действия с файлами, практически не отличаются от обычных, за исключением временных задержек. Со временем, тут главное терпение и ожидание завершения предыдущих операций.


※※※

Pydio и Nginx


Pydio - Put your data in orbit - ещё одна облачная система, которая может быть использована для целей домашнего облака.

Устанавливается тоже с некоторыми сложностями, но в части раздела PHP5 (уже установленного) почти совпадает с ownCloud.

Надо скачать установочный архив [6] и развернуть (разархивировать) его в каталог который будет использоваться под этот проект (сам проект, не данные). Настроить первоначальные права.
Пусть это будет /var/www/pydio

У меня это происходит так, под суперпользователем (root):

# unzip /home/gimmor/Загрузки/pydio-core-5.2.3.zip
# mv pydio-core-5.2.3 /var/www/pydio
# chown -R www-data /var/www/pydio



Далее, настройка конфигурации сервере nginx для использования pydio
За основу возьмём файл с ресурса [7] и подправим для своих условий.

server {
    Сервер pydio временно будет сервером по-умолчанию
    listen 80 default_server;

    Сервер будет принимать безопасные соединения на 443 порту.
    listen 443 ssl;
    # Доменное имя, под которым сервер будет доступен
    server_name localhost 'pydio.local' '192.168.5.37';


    # Самоподписанный сертификат для виртуального сервера pydio и частный ключ
    ssl_certificate     /etc/ssl/certs/pydio-server.crt;
    ssl_certificate_key /etc/ssl/private/pydio-server.key;
    # Корень сервера, его месторасположение
    root /var/www/pydio;
    # Кодировка сервера по-умолчанию
    charset utf-8;
    # Главный индексный файл корня сервера
    index index.php;

    
    # Если мы пытаемся зайти по 80 порту, то будем перенаправлены
    # Это заглушка временна, пока сервера окончательно не будут настроены
    # Вполне возможно, что на 80 порту будет висеть какая-либо страница
    if ($server_port = 80) {
        rewrite ^ https://$host$request_uri permanent;
    }

    client_max_body_size 1G;

    # Журнал доступа
    access_log /var/log/nginx/pydio.access.log;
    # Журнал ошибок

    error_log /var/log/nginx/pydio.error.log;




    # Месторасположение
    location / {
    }


    location ~* \.(?:ico|css|js|gif|jpe?g|png)$ {
        expires max;
        add_header Pragma public;
        add_header Cache-Control "public, must-revalidate, proxy-revalidate";
    }

    location = /conf/       { deny all; }
    location = /data/       { deny all; }

    # robots.txt определяет права для роботов индексаторов
    location = /robots.txt  { access_log off; log_not_found off; }

    # brj
    location = /favicon.ico { access_log off; log_not_found off; }
    location ~ /\.          { access_log off; log_not_found off; deny all; }
    location ~ ~$           { access_log off; log_not_found off; deny all; }


    # Некоторые настройки fastcgi для обработки php-файлов
    location ~ \.php {
        try_files $uri =404;
        fastcgi_param  QUERY_STRING       $query_string;
        fastcgi_param  REQUEST_METHOD     $request_method;
        fastcgi_param  CONTENT_TYPE       $content_type;
        fastcgi_param  CONTENT_LENGTH     $content_length;
        fastcgi_param  SCRIPT_NAME        $fastcgi_script_name;
        fastcgi_param  SCRIPT_FILENAME    $request_filename;
        fastcgi_param  REQUEST_URI        $request_uri;
        fastcgi_param  DOCUMENT_URI       $document_uri;
        fastcgi_param  DOCUMENT_ROOT      $document_root;
        fastcgi_param  SERVER_PROTOCOL    $server_protocol;
        fastcgi_param  GATEWAY_INTERFACE  CGI/1.1;
        fastcgi_param  SERVER_SOFTWARE    nginx;
        fastcgi_param  REMOTE_ADDR        $remote_addr;
        fastcgi_param  REMOTE_PORT        $remote_port;
        fastcgi_param  SERVER_ADDR        $server_addr;
        fastcgi_param  SERVER_PORT        $server_port;
        fastcgi_param  SERVER_NAME        $server_name;
        #fastcgi_pass unix:/var/run/php5-fpm.sock;
        fastcgi_pass 127.0.0.1:9000;
    }
}




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


Существует противоречивое требование к php5-fpm от pydio и от ownCloud.
Pydio требует выключенной опции output_buffering = Off , ownCloud - включенной.


Исправление бага php5 ubuntu с отключенным модулем mcrypt:

ln -s /etc/php5/mods-available/mcrypt.ini  /etc/php5/fpm/conf.d/20-mcrypt.ini


Исправление проблем безопасности файлов. Разграничение доступа

Здесь надо помнить, что при копировании файлов на веб-сервер, потом требуется задать владельца, т.к. часто владельцем оказывается root, что запрещает доступ к файлам.

Nginx обеспечивает запрещение доступа к отдельным каталогам (месторасположениям, location) веб-сервера, посредством директивы deny all в настройках конкретного виртуального сервера.
Например:

location /onlymyfiles {
 deny all;
}




Peertracker - bittorrent tracker


Peertracker - простейший трекер торрентов, который может быть установлен на собственный домашний компьютер и выступать в виде персонального трекера, посредством которого распространяются авторские (собственные) материалы. Т.е. статьи, изображения, скрипты, какие-то иные данные.

Устанавливается, как и любое веб-приложение, с некоторыми ручными операциями.

Для простейшего случая, домашнего трекера для небольшого количества файлов подойдет база данных sqllite3. Так что всех делов - это скопировать дистрибутив в папку сервера, создать конфигурацию nginx для этого сервера.

Это приложение, вообще ничего не показываеть пользователю веб-сервера, а тольк лишь принимает и отправляет информацию по определённому url адресу.
Т.е. можно этому трекеру выделить какой-то порт, и потом при создании торрент-файла, указывать url-адрес до этого трекера на домашнем компьютере, в качестве трекера и торрент клиент подключиться по url-адресу трекера, заполнит нужную информацию.

С технологической точки зрения, Трекер это сервисная программа обслуживающая специфические HTTP/HTTPS GET-запросы, которые
определены спецификацией протокола Bittorrent.


Для распространения собственных материалов, можно использовать посредника OpenBittorrent и его открытый (без регистрации и пр.) url.

http://tracker.openbittorrent.com:80/announce

При создании своего публично доступного торрент-файла, надо в списке трекеров указать http://tracker.openbittorrent.com:80/announce . Всё остальное сделает торрент-клиент. Пользователь полученного торрент-файла также может начать загрузку по получении торрент-файла.
Иногда, этот трекер часто оказывается единственно доступным, в списке торрент-трекеров, указанных в файле.

Для улучшения передачи файлов, надо стремиться исключить трекер, как посредника. Вполне рабочим способом является magnet-ссылка, которая даёт возможность не использовать трекер. Но у неё возникает другой посредник - распределённая хэш-таблица DHT.
Магнет-ссылка хороша тем, что её содержимое может передаваться в текстовой форме и отпадает необходимость создания торрент-файла (хотя торрент-клиенты делают это неявно).

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

※※※

Ресурсы


1. Официальный сайт ownCloud. http://owncloud.org/
2. Официальный сайт nginx. http://nginx.org/ru/
3. Сайт по языку PHP5. http://www.php5.ru/
4. Официальный сайт Pydio. https://pydio.com/
5. Сайт сообщества Pydio. http://pyd.io/
6. Загрузка Pydio. http://pyd.io/download/

7. http://pyd.io/nginx/

8. Сертификаты: http://help.ubuntu.ru/wiki/%D1%80%D1%83%D0%BA%D0%BE%D0%B2%D0%BE%D0%B4%D1%81%D1%82%D0%B2%D0%BE_%D0%BF%D0%BE_ubuntu_server/%D0%B1%D0%B5%D0%B7%D0%BE%D0%BF%D0%B0%D1%81%D0%BD%D0%BE%D1%81%D1%82%D1%8C/certificates

9. Свободный трекер Openbittorrent: http://openbittorrent.com/
10. Установка ownCloud. http://doc.owncloud.org/server/6.0/admin_manual/installation/installation_source.html

11. Подготовленные репозитории для дистрибутивов Linux. http://software.opensuse.org/download/package?project=isv:ownCloud:community&package=owncloud

Ресурсы простым списком, использованные при поднятии сервера.
http://habrahabr.ru/post/208566/
http://habrahabr.ru/post/160237/
http://habrahabr.ru/post/154047/
http://habrahabr.ru/company/selectel/blog/213945/

http://www.php5.ru/study/webbasics
http://martin-denizet.com/nginx-configuration-for-pydio-with-ssl/

http://blackbe.lt/setting-up-utf-8-encoding-in-php-and-mysql/
Свой WebDAV сервер на nginx. http://xandroskin.ru/it/svoj-webdav-server-na-nginx/495
Обработка регулярок в nginx. http://xandroskin.ru/it/obrabotka-regulyarok-v-nginx/597

http://vds-admin.ru/nginx/nastroika-svyazki-nginx-apache-fastcgi


※※※

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