понедельник, 10 декабря 2018 г.

Установка WebDAV в Apache на CentOS 7

Установка WebDAV в Apache на CentOS 7

WebDAV (Web-based Distributed Authoring and Versioning) - это расширение протокола HTTP, позволяющее пользователю управлять файлами на WEB-сервере.
В CentOS7 при установке Apache это расширение устанавливается по умолчанию.
Проверить это можно командой «httpd -M | grep fs» . Вывод должен быть таким:
# httpd -M | grep fs
dav_fs_module (shared)

Создадим директорию для файлов, которые будут доступны по протоколу WebDAV и дадим ей права:
# mkdir /var/www/webdav
# chown -R apache:apache /var/www/webdav
# chmod -R 755 /var/www/webdav

Создаем пользователя, который будет подключаться к ресурсу:
# htdigest -c "/etc/httpd/wduser.passwd" DAV-upload dev
Adding password for dev in realm DAV-upload.
New password: <вводим пароль, например 12345>
Re-type new password: <вводим пароль еще раз, например 12345>
Здесь DAV-upload это признак пользователя, который будет использоваться далее в настройках.
dev – имя пользователя
12345 – это пароль

Добавляем виртуальный хост к серверу Apache, который будет обслуживать созданную папку webdav. Для этого создаем файл конфигурации webdav.conf и наполняем его содержимым:
# nano /etc/httpd/conf.d/webdav.conf
Вставляем описание хоста:
Listen 0.0.0.0:8080
DavLockDB /var/www/DavLock
<VirtualHost *:8080>
    ServerAdmin webmaster@localhost
    DocumentRoot /var/www/webdav/
    ErrorLog /var/log/httpd/error.log
    CustomLog /var/log/httpd/access.log combined
    Alias /webdav /var/www/webdav
    <Directory /var/www/webdav>
        DAV On
        AllowOverride All
        Order allow,deny
        allow from all
        AuthType Digest
        AuthName DAV-upload
        AuthUserFile "/etc/httpd/wduser.passwd"
        AuthDigestProvider file
        Require valid-user
        Options Indexes MultiViews
        IndexOptions Charset=UTF-8 FancyIndexing HTMLTable VersionSort NameWidth=350 FoldersFirst IgnoreCase SuppressDescription
        IndexOrderDefault Descending Name
        IndexIgnore *~ favicon.ico *.bat *.sh* ~$* Thumbs.db
        IndexStyleSheet "http://localhost/style.css"
    </Directory>
</VirtualHost> 
Для WebDAV важно, что бы вся папка /var/www/ принадлежала пользователю apache, поэтому выполняем:
# chown -R apache:apache /var/www/

Рестартуем сервер
# systemctl restart httpd

Не забываем открыть порт 8080 в файрволле:
Для iptables:
# nano /etc/sysconfig/iptables
Добавляем строку:
-A INPUT -p tcp -m tcp --dport 8080 -j ACCEPT
Рестартуем сервис:
# service iptables save
# service iptables restart

Для тестирования WEbDAV устанавливаем утилиту - клиента WebDav - cadaver
# yum --enablerepo=epel install cadaver
Проверяем работу WebDav с помощью cadaver
Подключение к ресурсу WebDev:
# cadaver http://10.10.49.162:8080/webdav/
Authentication required for webdav on server `10.10.49.162':
Username: dev
Password: <вводим пароль 12345>
dav:/webdav/>
Увидев это приглашение понимаем, что подключение прошло успешно.
Тестовая заливка файла:
> put /var/www/html/network2.html
Uploading /var/www/html/network2.html to `/webdav/network2.html':
Progress: [=============================>] 100,0% of 2364 bytes succeeded.
Просмотр содержимого каталога:
> ls
Listing collection `/webdav/': succeeded.
        network2.html                       2364  дек  1 19:45
        test.txt                              26  ноя 18 08:06
Скачивание файла:
> get test.txt
Downloading `/webdav/test.txt' to test.txt:
Progress: [=============================>] 100,0% of 26 bytes succeeded.
Удаление файла:
> delete test.txt
Deleting `test.txt': succeeded.
Выход из клиента:
> exit
Connection to `10.10.49.162' closed.


Ресурс WebDAV можно подключить в ОС Windows как сетевой диск.
Первый вариант (самый легкий):
"Мой компьютер" – кнопка "Подключить сетевой диск"
В поле "Папка" вводим наш URL http://10.10.49.162:8080/webdav/, отмечаем все галочки. Затем будет запрошен логин и пароль. После чего подключением можно пользоваться.
Второй вариант.
Подключаем сетевой диск в Windows из командной строки так:
C:\Users\rossyp>net use N: http://10.10.49.162:8080/webdav/
Введите имя пользователя для '10.10.49.162': dev
Введите пароль для 10.10.49.162:
Команда выполнена успешно.
Отключаем сетевой диск:
C:\Users\rossyp>net use N: /DELETE
N: успешно удален.
Третий вариант.
С помощью программы Cyberduck (https://cyberduck.io/ ) работать с ресурсом можно без проблем. В поле «Сервер» вводим URL, затем вводим логин и пароль и с ресурсом можно работать. Очередь загрузки / выгрузки показывается в удобном окне:

ПРИМЕЧАНИЯ:
1.
Для добавления хранилищу красивости просмотра через WEB-интерфейс можно в корне создать файл "HEADER.html", содержимое которого будет выводиться над листингом, и файл "README.html", содержимое которого будет выводиться под листингом.
Файл style.css применяется в конфигурации для подкачки стиля оформления страниц.
2.
Для решения проблемы работы с большими файлами через WebDAV в Windows необходимо исправить одну переменную в реестре:
Запускаем редактор реестра:
>regedit
Ищем ветку:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\WebClient\Parameters
Исправляем параметр FileSizeLimitInBytes на ffffffff
По умолчанию здесь -  2faf080

воскресенье, 8 апреля 2018 г.

Установка и использование graphviz в CentOS7

Установка и  использование graphviz в CentOS7

1. Просмотр доступных пакетов graphviz
# yum list available 'graphviz*'

2. Установка всех пакетов graphviz
# yum install 'graphviz*'

3. Проверка работы системы graphviz
Создаем файл temp.dot 
# touch temp.dot
Помещаем в файл следующее:
digraph G{
  Один->Два->Три->Четыре->Пять->Шесть->Десять;
  Три->Десять;
  Четыре->Десять;
}
Конвертируем данные в граф с представлением в png
# dot -Tpng temp.dot -o temp.png
После ключа T указываем тип выходного файла
Получим файл png с изображением:

4. Установка связки php с GraphViz
# yum install php-pear-Image-GraphViz
# service httpd restart

5. Создадим файл  network.php с содержимым
<?php
require_once 'Image/GraphViz.php';

$gv = new Image_GraphViz();
$gv->addEdge(array('wake up'        => 'visit bathroom'));
$gv->addEdge(array('visit bathroom' => 'make coffee'));
$gv->image();
?>
При просмотре этого файла в браузере получим изображение



Основными объектами являются узлы («node») и ребра («edge»)
Пример описания узла и связей:
<?php

require_once 'Image/GraphViz.php';

$gv = new Image_GraphViz();

$gv->addNode(
    'Node1',
    array(
      'URL'   => 'http://yandex.su',
      'label' => 'Яндекс',
      'shape' => 'box3d',
      'color' => 'green',
      'style'=>'filled',
      'fillcolor'=>'lightgrey'
    )
  );

$gv->addEdge(array('Node1' => 'Node2'));
$gv->addEdge(array('Node2' => 'Node3'),  
array('color' => 'red',
'fontcolor'=>"blue",
'label'=>"ссылка на Google",
'URL'=>"http://www.google.com"
) 
);
$gv->image();

?>

Результат:



Попытка вставить код php в имеющуюся отформатированную страницу приведет к ошибке
 
Это связано с тем, что код, который генерит GraphViz.php имеет первую строку 
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
При наличии xml-фрагмента браузер не допускает других символов перед <?xml.

Обойти это можно создав другую страницу, которая будет получать код основной с построенным графом.
Пример файла забирающего данные с другой страницы и выводящего дополнительные данные до и после графа:
<p>123</p>
<?php

date_default_timezone_set('Etc/GMT-3');

$url = "http://10.10.49.162/network.php";
$ch = curl_init();
curl_setopt($ch, CURLOPT_USERAGENT, 'Mozilla/5.0 (Windows NT 6.1) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.95 Safari/537.11');
curl_setopt($ch, CURLOPT_URL, $url);
curl_setopt($curl, CURLOPT_RETURNTRANSFER,true);
curl_setopt($ch, CURLOPT_TIMEOUT, 60);
$output = curl_exec($ch);

?>
<p>456</p>
Результат:

воскресенье, 18 марта 2018 г.

Apache на CentOS 7. Добавление виртуального хоста.

Apache на CentOS 7. Добавление виртуального хоста.

Есть установленный WEB-сервер на ip 10.10.49.162, порт 80
Сервер настроен по умолчанию. Имя сервера www.kos.domain.ru.
Сервер смотрит папку /var/www/html.
В ней один файл index.php:
<!DOCTYPE html>
<html>
<head>
  <title>1</title>
</head>
  <body>
    Сервер www.kos.domain.ru
  </body>
</html>
Задача: поднять виртуальный сервер www.purga.domain.ru, документы которого будут в папке /mnt/purga.

Для тестирования работы двух виртуальных серверов установим браузер links
# yum install links
Так мы сможем смотреть ответы сервера в консоли, а не по сети в отсутствии настроек DNS сервера.
Смотрим существующий сервер из консоли так:
# links www.kos.domain.ru

Для добавления нового виртуального хоста необходимо:
1) Прописать новое имя сервера в файл hosts
# nano /etc/hosts
Добавляем строку в конец
127.0.0.1 www.purga.domain.ru purga.domain.ru
Теперь с локальной машины данный адрес успешно пингуется по доменного имени.
# ping www.purga.domain.ru
2) Создаем корневую папку для WEB-сервера и даем ей права
# mkdir /mnt/purga
# chown apache:apache /mnt/purga
Делаем ссылку на эту папку в каталог /var/www:
# ln -s /mnt/purga/ /var/www/purga
3) В папку /mnt/purga кладем файл index.php:
# touch /mnt/purga/index.php
# chown apache:apache /mnt/purga/index.php
# chmod -R 755 /mnt/purga/
# nano /mnt/purga/index.php
Содержимое файла:
<!DOCTYPE html>
<html>
<head>
<title>2</title>
</head>
<body>
Сервер www.purga.domain.ru
</body>
</html>
4) Создаем файл описания виртуального сервера
# touch /etc/httpd/conf.d/purga.conf
Содержимое файла:
<VirtualHost purga.domain.ru:80>

    ServerName purga.domain.ru
    ServerAlias www.purga.domain.ru

    DocumentRoot "/var/www/purga"

    <Directory /var/www/purga >
        Options Indexes FollowSymLinks MultiViews
        AllowOverride All
        Order allow,deny
        allow from all
    </Directory>

    LogLevel warn

    ErrorLog /var/log/httpd/error_log

    CustomLog /var/log/httpd/access_log combined

</VirtualHost>
5) Перезагружаем сервер apache
# systemctl restart httpd.service
6) Проверяем:
# links www.purga.domain.ru
# links www.kos.domain.ru

Все великолепно!