Установка Kernel Tube Video Sharing 2.4.3 на Ubuntu 12.04

    Вступление:



    Попробую поделиться установкой tube скрипта для отдачи видео.

    Решили не идти путём написания своего скрипта, а использовать сторонние решения.

    Дело началось ещё в 2010 году. Тогда мы рассматривали существующие решения, платные и бесплатные.
    Вот такой списочек я рассмотрел вроде на тот момент. Предпологаю, что мог не всё тогда запостить.
    В итоге мы остановились на Kernel Tube Video Sharing. Продукт платный. Если вы его ещё не рассматривали, то думаю стоит хотя бы глянуть на него и его возможности(изначально он судя по всему ориентирован на контент для взрослых).
    Ни в коем случае не сочтите за рекламу. Установка стоит 40$, может мой пост поможет вам их сэкономить и немного сократить время нужное на установку :)
    Сейчас как раз занимаюсь установкой KVS на сервер и решил поделиться своей инструкцией. На просторах Internet такого не встречал.

    Страница проекта — www.kernel-video-sharing.com/ru
    Демо сайт — kvs-demo.com
    Демо админка — kvs-demo.com/admin

    Особенности нашей инсталяции


    1. Используется suexec модуль mod_ruid2 — для пущей безопасности. Ранее я настраивал всё без него.
    2. У нас пакет с исходниками KVS(ещё с версии 1.5) — посему мы не используем ionCube loader. Уточните этот момент у разработчиков.

    Установка Kernel Tube Video Sharing 2.4.3 на Ubuntu 12.04


    Серверные требования

    Минимальные требования к серверу

    • PHP 5.2 или выше
    • Mysql 5.0 или выше и поддержка его в PHP
    • FFmpeg 0.8 или выше с поддержкой libfaac, libx264, libavfilter
    • Yamdi
    • Qt-faststart
    • ImageMagick
    • Curl и поддержка его в PHP
    • Apache + mod_rewrite + (выключенная опция MultiViews)
    • ionCube loader
    • Perl & CGI 3.15 или выше (не требуется при использовании Nginx)
    • Не кириллическое доменное имя


    Обязательные требования к PHP

    • библиотека Zlib
    • XML extension
    • GD2 с поддержкой true type font (обязательно!)
    • Возможность запуска PHP из CLI, используя exec()
    • PHP register_globals off
    • PHP magic_quotes_gpc off
    • PHP safe_mode off
    • PHP file_uploads on
    • PHP allow_url_fopen on


    Рекомендуемые опции (крайне желательные)

    • Memcache и поддержка его в PHP
    • Nginx + Apache (через reverse proxy) + NginxHttpUploadProgressModule


    Установка необходимых компонентов



    Yamdi, Imagemagick

    sudo apt-get install yamdi imagemagick

    Memcache, MySQL, Apache, Php

    sudo apt-get install memcached mysql-server-5.5 apache2 libapache2-mod-rpaf php5 php5-mysql php5-curl php5-cli php5-memcache php5-gd

    Build tools

    sudo apt-get install build-essential checkinstall subversion git unzip


    Установка Exim

    sudo apt-get install exim


    Настройка Exim


    sudo dpkg-reconfigure exim4-config


    Установка Nginx

    Устанавливаем зависимости

    sudo apt-get install libssl-dev zlib1g-dev

    Скачиваем исходники Nginx

    cd /usr/local/src/
    wget http://nginx.org/download/nginx-1.2.4.tar.gz
    tar -zxvf nginx-1.2.4.tar.gz
    cd nginx-1.2.4


    Скачиваем дополнительные модули

    mkdir modules
    # nginx-upload-progress-module
    git clone https://github.com/masterzen/nginx-upload-progress-module.git modules/nginx-upload-progress-module
    # nginx_mod_h264_streaming
    wget http://www.kernel-video-sharing.com/files/nginx_mod_h264_streaming-2.3.2.zip
    unzip nginx_mod_h264_streaming-2.3.2.zip -d modules/
    rm -f nginx_mod_h264_streaming-2.3.2.zip
    


    Запускаем скрипт конфигурации сборки

    ./configure \
    --conf-path=/etc/nginx/nginx.conf \
    --error-log-path=/var/log/nginx/error.log \
    --pid-path=/var/run/nginx.pid \
    --lock-path=/var/lock/nginx.lock \
    --http-log-path=/var/log/nginx/access.log \
    --http-client-body-temp-path=/var/lib/nginx/body \
    --http-proxy-temp-path=/var/lib/nginx/proxy \
    --http-fastcgi-temp-path=/var/lib/nginx/fastcgi \
    --with-debug \
    --with-http_stub_status_module \
    --with-http_secure_link_module \
    --with-http_gzip_static_module \
    --with-http_realip_module \
    --with-http_mp4_module \
    --with-http_flv_module \
    --with-http_ssl_module \
    --with-http_dav_module \
    --with-md5=/usr/lib \
    --add-module=modules/nginx-upload-progress-module \
    --add-module=modules/nginx_mod_h264_streaming-2.3.2
    


    Решение для сборки h264 в GCC-4.6

    Re: NGINX1.0.2+H264 streaming-2.2.7+Fedora 15
    vi auto/cc/gcc

    # коментируем следующую строчку
    CFLAGS="$CFLAGS -Werror"


    Запускаем сборку Nginx

    make


    Запускаем сборку и установку deb пакета

    checkinstall --pkgname=nginx --pkgversion "1.2.4-1.relase.`date +%Y%m%d`" --backup=no --install=yes --default


    Создаём пользователя для Nginx

    sudo useradd --shell /bin/false --no-create-home nginx


    Создаём необходимые симлинки и папки

    ln -s /usr/local/nginx/sbin/nginx /usr/sbin/nginx
    mkdir -p /var/lib/nginx/body
    mkdir /var/lib/nginx/proxy
    mkdir /var/lib/nginx/fastcgi
    chown -R  nginx:root /var/lib/nginx/
    


    Устанавливаем скрипт инициализации

    # http://wiki.nginx.org/Nginx-init-ubuntu
    wget http://nginx-init-ubuntu.googlecode.com/files/nginx-init-ubuntu_v2.0.0-RC2.tar.bz2
    tar -jxvf nginx-init-ubuntu_v2.0.0-RC2.tar.bz2 -C /etc/init.d/
    chmod 715 /etc/init.d/nginx
    /usr/sbin/update-rc.d -f nginx defaults
    rm -f nginx-init-ubuntu_v2.0.0-RC2.tar.bz2

    vi /etc/init.d/nginx

    DAEMON=/usr/local/nginx/sbin/nginx
    NGINX_CONF_FILE="/etc/nginx/nginx.conf"


    Устанавливаем видео компоненты


    Устанавливаем зависимости

    # sudo apt-get -y install build-essential checkinstall git
    #
    sudo apt-get -y install libfaac-dev libjack-jackd2-dev libmp3lame-dev libopencore-amrnb-dev libopencore-amrwb-dev libsdl1.2-dev libtheora-dev libva-dev libvdpau-dev libvorbis-dev libx11-dev libxfixes-dev texi2html yasm zlib1g-dev libgsm1 libgsm1-dev libxvidcore4 libxvidcore-dev libdc1394-22 libdc1394-22-dev


    Устанавливаем x264
    Удаляем существующий x264
    sudo apt-get remove x264 libx264-dev

    Скачиваем исходники x264
    cd /usr/local/src
    git clone git://git.videolan.org/x264.git x264_`date +"%Y%m%d"`
    cd x264_`date +"%Y%m%d"`

    Запускаем скрипт конфигурации сборки x264
    ./configure --enable-static

    Запускаем сборку x264
    make

    Запускаем сборку и установку deb пакета x264
    sudo checkinstall --pkgname=x264 --pkgversion="3:$(./version.sh | awk -F'[" ]' '/POINT/{print $4"+git"$5}')" --backup=no --deldoc=yes --fstrans=no --install=yes --default


    Устанавливаем libvpx
    Удаляем существующий libvpx
    sudo apt-get remove libvpx-dev

    Скачиваем исходники libvpx
    cd /usr/local/src
    git clone http://git.chromium.org/webm/libvpx.git libvpx_`date +"%Y%m%d"`
    cd libvpx_`date +"%Y%m%d"`

    Запускаем скрипт конфигурации сборки libvpx
    ./configure

    Запускаем сборку libvpx
    make

    Запускаем сборку и установку deb пакета libvpx
    sudo checkinstall --pkgname=libvpx --pkgversion="1:$(date +%Y%m%d%H%M)-git" --backup=no --install=yes --deldoc=yes --fstrans=no --default


    Устанавливаем ffmpeg
    Я устанавливал ffmpeg 0.8.x потому как версии выше не поддерживают прсесеты и были проблемы при наложении ватермарков на видео(синтаксис параметров у ffmpeg часто меняется). В версии 0.8.12 всё прекрасно работает.
    Удаляем существующий ffmpeg
    sudo apt-get remove ffmpeg

    Скачиваем исходники ffmpeg
    cd /usr/local/src
    wget https://ffmpeg.org/releases/ffmpeg-0.8.12.tar.gz
    tar -zxvf ffmpeg-0.8.12.tar.gz
    cd ffmpeg-0.8.12

    Запускаем скрипт конфигурации сборки ffmpeg
    ./configure \
    --enable-gpl \
    --enable-postproc \
    --enable-pthreads \
    --enable-swscale \
    --disable-debug \
    --enable-nonfree \
    --enable-libopencore-amrnb \
    --enable-libopencore-amrwb \
    --enable-version3 \
    --enable-libdc1394 \
    --enable-libfaac \
    --enable-libgsm \
    --enable-libmp3lame \
    --enable-libtheora \
    --enable-libvorbis \
    --enable-libx264 \
    --enable-libxvid \
    --enable-libvpx

    Запускаем сборку ffmpeg
    make

    Запускаем сборку и установку deb пакета ffmpeg
    sudo checkinstall --pkgname=ffmpeg --pkgversion="0.11.1-release-`date +%Y%m%d%H%M`" --backup=no --deldoc=yes --fstrans=no --install=yes --default


    Устанавливаем qt-faststart
    Переходим в папку с исходниками ffmpeg
    cd /usr/local/src
    cd ffmpeg-0.8.12

    Запускаем сборку qt-faststart
    make tools/qt-faststart

    Запускаем сборку и установку deb пакета qt-faststart
    sudo checkinstall --pkgname=qt-faststart --pkgversion="$(date +%Y%m%d%H%M)-git" --backup=no --deldoc=yes --fstrans=no --default install -Dm755 tools/qt-faststart /usr/local/bin/qt-faststart


    Проверяем установленные видео компоненты
    x264
    ffmpeg
    ffplay
    ffprobe
    qt-faststart


    Настройка Web серверов


    Создаём пользователя для работы сайта KVS
    useradd --shell /bin/false --no-create-home www-kvs


    Создаём рабочий каталог для сайта KVS
    mkdir /home/kvs/


    Настройка Apache
    Настриаваем порты прослушивания Apache
    vi /etc/apache2/ports.conf

    NameVirtualHost *:8080
    Listen 8080
    

    Устанвливаем Apache модули
    # mod_ruid2
    cd /usr/local/src
    #
    wget http://mirror.pnl.gov/ubuntu/pool/universe/liba/libapache2-mod-ruid2/libapache2-mod-ruid2_0.9.7-1_amd64.deb
    #
    dpkg -i libapache2-mod-ruid2_0.9.7-1_amd64.deb
    

    Настраиваем Apache модули
    # mod_rpaf
    vi /etc/apache2/mods-available/rpaf.conf

    <IfModule rpaf_module>
    RPAFenable On
    RPAFsethostname On
    RPAFproxy_ips 192.168.1.2 127.0.0.1
    RPAFheader X-Real-IP
    </IfModule>
    

    # mod_ruid2
    vi /etc/apache2/mods-available/ruid2.conf
    

    <IfModule mod_ruid2.c>
        RMode config
        RDefaultUidGid www-data www-data
        RUidGid www-data www-data
        RGroups www-data
    </IfModule>


    Включаем необходимые Apache модули
    a2enmod rpaf
    a2enmod ruid2
    a2enmod rewrite


    Создаём папку для логов KVS
    mkdir -p /var/log/www/kvs


    Создаём сайт для KVS в Apache
    vi /etc/apache2/sites-available/kvs.conf


    
    <VirtualHost 127.0.0.1:8080>
            ServerAdmin admin@domain.com
            Servername video.domain.com
            ServerAlias  tube.domain.com
    
            RMode config
            RUidGid www-kvs www-kvs
            RGroups www-kvs
    
            RewriteEngine on
            RewriteCond %{HTTP_HOST} ^tube.domain.com$
            RewriteRule (.*) http://video.domain.com$1 [R=301,L]
    
            DocumentRoot /home/kvs/
    
    #       AddType text/css css
    
            php_admin_value open_basedir /home/kvs
            php_admin_value upload_tmp_dir /home/kvs/tmp
            php_admin_value session.save_path /home/kvs/tmp
    
            <Directory /home/kvs>
                    Options -Indexes FollowSymLinks -MultiViews
                    AllowOverride All
                    Order allow,deny
                    Allow from all
            </Directory>
    
            ErrorLog /var/log/www/kvs/kvs-apache-error.log
    
            # Possible values include: debug, info, notice, warn, error, crit,
            # alert, emerg.
            LogLevel debug
    
            CustomLog /var/log/www/kvs/kvs-apache-access.log combined
    
    </VirtualHost>
    


    Активируем созданный сайт
    a2ensite kvs.conf
    a2dissite default


    Перезапускаем Apache
    service apache2 restart


    Настройка Php
    Редактируем конфиг Php для Apache
    vi /etc/php5/apache2/php.ini

    register_globals = Off
    magic_quotes_gpc = off
    safe_mode = Off
    max_execution_time = 9999
    allow_url_fopen = On
    file_uploads = On
    upload_tmp_dir = /tmp
    upload_max_filesize = 1024M
    post_max_size = 1024M
    memory_limit = 1024M
    session.gc_maxlifetime = 86400
    
    sendmail_path = "/usr/sbin/sendmail -t -i"


    Редактируем конфиг Php CLI
    vi /etc/php5/cli/php.ini

    memory_limit = 1024M
    safe_mode = Off
    allow_url_fopen = On
    
    sendmail_path = "/usr/sbin/sendmail -t -i"


    Настраиваем логирование Php
    vi /etc/php5/apache2/php.ini

    error_reporting = E_COMPILE_ERROR|E_RECOVERABLE_ERROR|E_ERROR|E_CORE_ERROR
    display_errors = Off
    display_startup_errors = Off
    log_errors = On
    log_errors_max_len = 102400
    error_log = /var/log/www/php.log


    Перезапускаем Apache
    service apache2 reload


    Настройка Nginx

    Пользователя, из под которого рабоает, nginx помещаем в группу www-kvs
    usermod -a -G www-kvs nginx


    Перемещаем умолчательный конфиг Nginx
    mv /etc/nginx/nginx.conf /etc/nginx/nginx.conf.bk


    Создаём новый конфиг Nginx
    vi /etc/nginx/nginx.conf

    user nginx;
    worker_processes  16;
    
    error_log  /var/log/nginx/error.log info;
    #error_log  logs/error.log  notice;
    
    pid        /var/run/nginx.pid;
    
    events {
        worker_connections  1024;
        #multi_accept on;
    }
    
    http {
        include      /etc/nginx/mime.types;
        default_type  application/octet-stream;
    
        server_tokens off;
        server_names_hash_bucket_size  128;
    
        log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '
                          '$status $body_bytes_sent "$http_referer" '
                          '"$http_user_agent" "$http_x_forwarded_for"';
    
        access_log  /var/log/nginx/access.log main;
    
        sendfile        on;
        tcp_nopush     on;
        tcp_nodelay    on;
    
        #keepalive_timeout  0;
        keepalive_timeout  65;
    
        gzip  on;
        gzip_disable "MSIE [1-6]\.(?!.*SV1)";
    
        include /etc/nginx/conf.d/*.conf;
        include /etc/nginx/sites-enabled/*;
    
       server {
            listen       192.168.1.2:80;
            server_name  default;
    
            #charset koi8-r;
    
            #access_log  logs/host.access.log  main;
    
            location = /stat {
                    stub_status on;
                    access_log  off;
                    allow all;
                    deny all;
                }
    
            location / {
                root   html;
                index  index.html index.htm;
            }
    
            #error_page  404              /404.html;
    
            # redirect server error pages to the static page /50x.html
            #
            error_page   500 502 503 504  /50x.html;
            location = /50x.html {
                root   html;
            }
    
        }
    }
    


    Создаём конфиг для KVS
    mkdir /etc/nginx/sites-available/
    mkdir /etc/nginx/sites-enabled/
    vi /etc/nginx/sites-available/kvs.conf

            upload_progress proxied 1m;
            proxy_buffering off;
    
    server {
            listen 192.168.1.3:80;
            server_name video.domain.com *.video.domain.com tube.domain.com ;
            access_log /var/log/www/kvs/kvs-nginx-access.log;
            error_log /var/log/www/kvs/kvs-nginx-error.log;
    
            location / {
                    index index.php;
                    if (-f /etc/nginx/maintenance.file) {
                    return 503;
                    }
                    proxy_pass         http://127.0.0.1:8080/;
                    proxy_redirect http://video.domain.com:8080/ /;
                    proxy_set_header   Host             $host;
                    proxy_set_header   X-Real-IP        $remote_addr;
                    proxy_set_header   X-Forwarded-For  $proxy_add_x_forwarded_for;
                    client_max_body_size       1024m;
                    client_body_buffer_size    128k;
                    proxy_connect_timeout      90;
                    proxy_send_timeout         900;
                    proxy_read_timeout         900;
                    proxy_buffer_size          4k;
                    proxy_buffers              4 32k;
                    proxy_busy_buffers_size    64k;
                    proxy_temp_file_write_size 64k;
                    charset         off;
                    track_uploads proxied 30s;
                }
    
            location ~* ^.+\.(gif|jpg|png|mpg|mp3|mpeg|avi|ico|txt|css|js|html)$ {
                    #valid_referers none blocked video.domain.com;
                    #if ($invalid_referer) {
                    #    return   403;
                    #}
                    root /home/kvs/;
                    expires 30d;
                    gzip             on;
                    gzip_min_length  100;
                    gzip_comp_level  9;
                    gzip_types       text/plain text/css text/javascript application/x-javascript;
                    gzip_disable "MSIE [1-6]\.(?!.*SV1)";
            }
    
            location ^~ /admin/include/get_upload_status.php  {
                    report_uploads proxied;
            }
    
            location ^~ /contents/videos/ {
                    flv;
                    mp4;
                    root /home/kvs;
                   internal;
                    expires max;
            }
    
    
            location ^~ /contents/private/ {
                    flv;
                    mp4;
                    root /home/kvs;
                   internal;
                    expires max;
            }
    
            location ^~ /contents/videos_sources/ {
                    root /home/kvs;
                    internal;
            }
    
            location ^~ /contents/albums/sources/ {
                    root /home/kvs;
                    internal;
            }
    
            # deny access to .htaccess files, if Apache's document root concurs with nginx's one
            #
            location ~ /\.ht {
                    deny  all;
            }
    
        }


    Активируем созданный сайт
    ln -s /etc/nginx/sites-available/kvs.conf /etc/nginx/sites-enabled/kvs.conf


    Тестируем конфиг KVS
    service nginx configtest


    Запускаем Nginx
    service nginx start


    Настраиваем KVS


    Распаковываем контент KVS

    unzip KVS_2.4.3_20120426.zip -d /home/kvs
    cd /home/kvs
    cat /home/kvs/_INSTALL/install_EN.txt


    Создаём базу для KVS

    mysql -uroot -p


    CREATE DATABASE kvs CHARACTER SET utf8 COLLATE utf8_general_ci;
    CREATE USER 'kvs'@'localhost' IDENTIFIED BY '*******';
    GRANT ALL PRIVILEGES ON kvs.* TO 'kvs'@'localhost';
    FLUSH PRIVILEGES;
    QUIT;


    mysql -uroot -p kvs < _INSTALL/install_db.sql


    Правим конфиги KVS

    vi admin/include/setup_db.php


    define('DB_HOST','localhost');
    define('DB_LOGIN','kvs');
    define('DB_PASS','*******');
    define('DB_DEVICE','kvs');


    vi admin/include/setup_db.php


    // a. Токен "/PATH" во всех местах заменить на полный серверный путь к папке установки проекта без слеша на конце
        (например, /usr/path/to/domain.com) 
    $config['project_path']="/home/kvs";
    $config['temporary_path']="/home/kvs/tmp";
    $config['content_path_videos_sources']="/home/kvs/contents/videos_sources";
    $config['content_path_videos_screenshots']="/home/kvs/contents/videos_screenshots";
    $config['content_path_categories']="/home/kvs/contents/categories";
    $config['content_path_models']="/home/kvs/contents/models";
    $config['content_path_dvds']="/home/kvs/contents/dvds";
    $config['content_path_avatars']="/home/kvs/contents/avatars";
    $config['content_path_content_sources']="/home/kvs/contents/content_sources";
    $config['content_path_advertisement']="/home/kvs/contents/advertisement";
    $config['content_path_albums']="/home/kvs/contents/albums";
    $config['content_path_referers']="/home/kvs/contents/referers";
    $config['content_path_other']="/home/kvs/contents/other";
    //
    // b. В настройке $config['is_nginx'] поставить значение "false", если главный сервер работает не на nginx
    $config['is_nginx']="true";
    //
    // c. В настройке $config['server_type'] поставить значение "apache", если главный сервер работает на apache без nginx
    $config['server_type']="nginx";
    //
    // d. В настройке $config['is_translit_directories'] поставить значение "true", если данные на вашем сайте будут вноситься
        на русском языке
    $config['is_translit_directories']="true";
    //
    // e. В настройке $config['php_path'] прописать путь к php (обязательно)
    $config['php_path']="/usr/bin/php";
    //
    // f. В настройке $config['ffmpeg_path'] прописать путь к ffmpeg (обязательно)
    $config['ffmpeg_path']="/usr/local/bin/ffmpeg";
    //
    // g. В настройке $config['image_magick_path'] прописать путь к imagemagick (обязательно)
    $config['image_magick_path']="/usr/bin";
    //
    // h. В настройке $config['mysqldump_path'] прописать путь к утилите mysqldump (опционально)
    $config['mysqldump_path']="/usr/bin/mysqldump";
    //
    // i. Удалить настройки $config['memcache_server'] и $config['memcache_port'], если у вас не установлен memcache
    

    Далее смотрите по вашей конфигурации.

    Устанавливаем права на файлы KVS

    kvsroot=/home/kvs
    kvsuser=www-kvs
    kvsgroup=www-kvs
    #
    chmod 750 $kvsroot
    chown -R $kvsuser:$kvsgroup $kvsroot
    #
    find $kvsroot/ -type f -exec chmod 444 {} \; 
    find $kvsroot/ -type d -exec chmod 555 {} \;
    #
    #
    # 5) Установите на следующие каталоги и подкаталоги привилегии 777, а на файлы в них привилегии 666: 
    #
    # a. /tmp
    find $kvsroot/tmp -type d -exec chmod 777 {} \;
    find $kvsroot/tmp -type f -not -name ".htaccess" -exec chmod 666 {} \;
    # b. /template (а также 777 на подкаталоги и 666 на все файлы кроме .htaccess)
    find $kvsroot/template -type d -exec chmod 777 {} \;
    find $kvsroot/template -type f -not -name ".htaccess" -exec chmod 666 {} \;
    # c. /contents (на сам каталог /contents не нужно, 777 на подкаталоги)
    find $kvsroot/contents -mindepth 1 -type d -exec chmod 777 {} \;
    find $kvsroot/contents -type f -not -name ".htaccess" -exec chmod 666 {} \;
    # d. /admin/smarty/cache
    find $kvsroot/admin/smarty/cache -type d -exec chmod 777 {} \;
    find $kvsroot/admin/smarty/cache -type f -not -name ".htaccess" -exec chmod 666 {} \;
    # e. /admin/smarty/template-c
    find $kvsroot/admin/smarty/template-c -type d -exec chmod 777 {} \;
    find $kvsroot/admin/smarty/template-c -type f -not -name ".htaccess" -exec chmod 666 {} \;
    # f. /admin/smarty/template-c-site
    find $kvsroot/admin/smarty/template-c-site -type d -exec chmod 777 {} \;
    find $kvsroot/admin/smarty/template-c-site -type f -not -name ".htaccess" -exec chmod 666 {} \;
    # g. /admin/logs (а также 777 на подкаталоги)
    find $kvsroot/admin/logs -type d -exec chmod 777 {} \;
    find $kvsroot/admin/logs -type f -not -name ".htaccess" -exec chmod 666 {} \;
    # h. /admin/data (на сам каталог /admin/data не нужно, 777 на подкаталоги и 666 на все файлы кроме .htaccess и /admin/data/conversion/remote_cron.php)
    find $kvsroot/admin/data -mindepth 1 -type d -exec chmod 777 {} \;
    find $kvsroot/admin/data -type f -not -name ".htaccess" -not -name "remote_cron\.php" -exec chmod 666 {} \;
    


    Пост-установочные настройки


    Добавляем задачу в cron

    # 6) Поставьте скрипт /admin/include/cron.php на выполнение по крону раз в минуту. Скрипт должен выполняться из той папки, в которой он находится. Команда должна быть задана в таком виде:
    #
    # cd /PATH/admin/include/ && /usr/local/bin/php cron.php > /dev/null 2>&1


    crontab -e -u www-kvs

    */1 * * * * cd /home/kvs/admin/include/ && /usr/bin/php cron.php > /dev/null 2>&1


    Проверяем пути в файле admin/data/conversion/remote_cron.php

    # 8) В файле /admin/data/conversion/remote_cron.php проверьте корректность путей к ffmpeg, yamdi и qt-faststart. При необходимости установите корректные пути.

    vi admin/data/conversion/remote_cron.php

    $ffmpeg_path="/usr/local/bin/ffmpeg";
    $yamdi_path="/usr/bin/yamdi";
    $qtf_path="/usr/local/bin/qt-faststart";
    $imagemagick_path="/usr/bin/convert";


    Меняем умолчательный пароль администратора

    # 7) Попробуйте зайти в зону администрирования (http://video.domain.com/admin).
    # Для доступа используйте данные: admin / 123. Если вы видите белый экран или какую-либо ошибку, то скорее всего у вас одна из следующих проблем:
    
    # - Не установлены 777 привилегии на нужные папки в /admin/smarty/ (см. шаги 5d, 5e, 5f)
    # - У вас нет поддержки memcache, но вы не удалили настройки memcache из /admin/include/setup.php (см. шаг 4i)
    # - У вас некорректно указан полный серверный путь к проекту в /admin/include/setup.php (см. шаг 4a)


    Заходим в административную часть сайта:
    video.domain.com/admin
    admin:123
    Настройки --> Персональные настройки --> Настройки пользователя --> Пароль: **********
    --> Сохранить настройки


    Добавляем сервер конвертации

    # 9) В разделе Настройки панели администрирования задайте сервер конвертации. Укажите для него следующие данные:
    #
    # Название:        Любое, например Local
    # Статус:          Активный
    # Тип подключения: Локально (это поле может отсутствовать)
    # Путь:            Полный серверный путь к папке /admin/data/conversion
    # 
    # При сохранении сервера конвертации вы можете получить ошибку, если вы некорректно выполнили шаги 6 или 8, либо некорректно указали путь.

    Настройки --> Сервера конвертации --> Добавить сервер
    Название (*): Локальный сервер конвертации
    Статус: Активный
    Макс. задач (*): 5
    Приоритет ресурсоемких операций: Средний
    Тип подключения: Локальный
    Путь (*): /home/kvs/admin/data/conversion
    
    --> Сохранить сервер
    


    Добавляем сервер хранения

    # 10) Для хранения видео контента на своих серверах необходимо добавить сервера хранения. Этого не требуется, если вы планируете использовать сторонние embed коды или хотлинковать видео с других серверов. Для добавления сервера хранения вам сначала необходимо добавить группу серверов хранения. Это можно сделать в разделе Настройки панели администрирования. Затем в этом же разделе вам необходимо открыть страницу добавления сервера хранения и в зависимости от того, где находится данный сервер использовать следующие значения:
    
    #  a. Локальный сервер хранения (т.е. видео будет храниться на том же сервере, где работает KVS):
    #    - Название:        Любое, например Local
    #    - Группа серверов: Выберите группу, которую вы только что создали
    #    - URL:             http://video.domain.com/contents/videos
    #    - Тип стриминга:   Выберите тип стриминга, который доступен у вас на сервере хранения (nginx или apache)
    #    - Тип подключения: Локально
    #    - Путь:            Полный серверный путь к папке /contents/videos
    
    #  b. Удаленный сервер хранения (т.е. видео будет храниться на стороннем сервере):
    
    #    Для хранения видео на удаленном сервере необходимо установить на нем nginx. Обычно к удаленному серверу привязывают субдомен, например: video.domain.com. Под ним необходимо создать любую папку, например: storage. Для этой папки должен быть настроен стриминг, а сама папка должна быть объявлена internal зоной nginx:
    
    #    location ^~ /storage/ {
    #        flv;
    #        root /usr/path/to/video.domain.com/html;
    #        internal;
    #    }
    #
    #    В корень субдомена необходимо скопировать скрипт /admin/tools/remote_control.php и убедиться, что он доступен по прямому адресу и выдает слово "connected":
    
    #    http://video.domain.com/remote_control.php
    
    #    В настройках сервера хранения необходимо задать следующие значения:
    
    #    - Название:        Любое, например Remote
    #    - Группа серверов: Выберите группу, которую вы только что создали
    #    - URL:             http://video.domain.com/storage
    #    - Тип стриминга:   nginx
    #    - Тип подключения: Папка через mount или FTP
    #    - Путь:            Если соединение с сервером работает через NFS, то укажите путь к NFS mount
    #    - FTP xxx:         Несколько полей для указания данных подключения к папке хранения через FTP
    
    #  c. Reflected Networks CDN:
    
    #    - Название:        Любое, например CDN
    #    - Группа серверов: Выберите группу, которую вы только что создали
    #    - URL:             CDN урл, который вы получите от Reflected Networks
    #    - Тип стриминга:   Reflected Networks CDN
    #    - Ключ стриминга:  Ключ защиты, который вы получите от Reflected Networks
    #    - Тип подключения: Папка через mount или FTP
    #    - Путь:            Если соединение с сервером работает через NFS, то укажите путь к NFS mount
    #    - FTP xxx:         Несколько полей для указания данных подключения к папке хранения через FTP
    
    # При сохранении сервера хранения вы можете получить ошибку, если вы некорректно указали пути, либо данные для подключения, либо некорректно выполнили шаги по настройке удаленного сервера.


    Сервера хранения --> Добавить группу серверов -->
    
    Название (*): Локальная группа серверов
    
    --> Cохранить группу серверов


    Сервера хранения --> Добавить сервер -->
    
    Название (*): Локальный сервер хранения
    Группа серверов (*): 	Локальная группа серверов
    URL (*): http://video.domain.com/contents/videos
    Тип стриминга: Nginx (x-accel-redirect)
    Тип подключения: Локально
    Путь (*): /home/kvs/contents/videos
    
    --> Сохранить сервер


    Проверяем всё ли верно установленно и сконфигурированно в KVS

    # 11) Откройте раздел Плагинов панели администрирования и запустите плагин Аудита со всеми опциями. Плагин не должен выдать ни одной ошибки. В большинстве случаев потенциальные ошибки будут ссылаться на какой-то нерабочий элемент конфигурации.


    Плагины --> Аудит системы --> 
    * Проверить инсталляцию (может занять много времени)
    * Проверить целостность БД
    * Проверить сервера
    * Проверить блоки и шаблоны сайта
    * Проверить видео контент (может занять много времени)
    # * Проверить защиту контента (требуется наличие контента)
    * Проверить критерии безопасности проекта
    
    --> Начать проверку


    Загружаем видео и убеждаемся, что оно успешно сконвертировалось и его можно просмотреть на сайте

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

    Видео --> Добавить видео -->


    Удаляем папку _INISTALL

    rm -rf _INSTALL


    Далее ваши личные настройки

    Форматы видео, их размеры, наложение ватермарков, показ тайм-лайнов. Всё это можно при желании настраивать.
    Читайте доку и настраивайте под себя.

    Что не понравилось

    1. Нет поддержки html5 — щас сидим вот ридумываем как показывать видео для яблочников и последних андроидов.
    2. Буду пополнять по мере воспоминаний…

    Заключение


    Инструкция получилась большой и немного утомительной.
    Надеюсь этот пост будет кому-либо полезным при создании сервиса стриминга видео если выбор падёт на Kernel Video Sharing.
    • +3
    • 18,2k
    • 7
    Поделиться публикацией

    Похожие публикации

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

      0
      Скрипт действительно отличный.

      html5 как и мобильная версия делается легко своими силами :)
      Разработчики в скором времени обещают это реализвать.

      Если будут вопросы пиши инбокс скину.
        0
        Из тикета:

        Posted on: 03 May 2012 06:04 AM

        Поддержка HTML5 плеера планируется в версии 2.5.0. Без HTML5 можно проигрывать видео просто поставив ссылку на MP4 видеофайл

        Версия 2.5.0 планируется еще не скоро.

        Время бежит. Может уже и скоро :)
      • НЛО прилетело и опубликовало эту надпись здесь
          0
          Точно, добавил в списочек.
          Спасибо.
          0
          Слава, привет! Конвертор для яблочников и в остальные форматы уже был реализован (и на каком то тесте был опробован). Так же нормально отдавался код если это были мобайл девайсы (или таблетки). Но так как начальство любило бюракротизировать все, в продакшн так и не вышло )

          Привет всему офису )
            0
            Привет.
            Текущая версия 2.4.3 поддерживает мультфорамты. Сейчас видео конвертируется в 2-а формата(flv, mp4), наверное перейдём только на mp4 для всех.
              0
              Так я и допиливал сам скрипт. Он там был дописан конверт в webm и ogv. Если посмотреть на тесте и его еще не снесли — может найдешь. Удачи!

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

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