Всё чаще и чаще большинство пользователей сталкиваются с проблемой хранения растущего объёма данных. Это касается как мультимедийного и прочего другого «тяжелего» контента, так и важной информации. Увеличивать размер локальных хранилищ часто является неэффективным методом, поэтому многие отдают предпочтение облачным сервисам по типу Google Drive, Dropbox и прочим. Однако, приватное облачное хранилище можно сделать и самостоятельно. WebDav сервер является простым решением данной проблемы.
Преимущества приватного WebDav сервера
Наличие и использование приватного WebDav сервера обладает рядом преимуществ по сравнению с публичными сервисами, среди которых можно выделить:
- Подключение к серверу с различных устройств: ноутбук, смартфон и т.д. Может быть использовано так же несколькими пользователями одновременно. Например, сотрудниками компании;
- Ограничение доступа к серверу с определенных IP-адресов или же размещение «внутри» локальной или VPN-сети;
- Оптимизация использования дискового пространства на серверах: при наличии доступного свободного пространства оно не будет «простаивать»;
- Неограниченная масштабируемость и отказоустойчивость путем подключения распределенного сетевого файлового хранилища, например, Ceph.
Кроме того, Ваш удалённый WebDav аккаунт может быть смонтирован в файловой системе Linux в любой директории для увеличения и экономии дискового пространства сервера, организации хранилища backup или же организации файлового хранилища.
Подготовка к установке WebDav сервера
Для создания WebDav сервера мы будем использовать операционную систему CentOS 7 (так же можно использовать Debian 9/Ubuntu 18.04) и панель управления VestaCP для дальнейшей автоматизации добавления новых WebDav-пользователей, установки прав доступа и т.д., так как данная панель управления имеет простую структуру шаблонов и скриптов. К сожалению, более свежие ОС не поддерживаются, но для нас это не критично, так как функционал данного сервера будет ограничен исключительно WebDav.
Нам понадобится минимальный набор ПО: nginx + php-fpm (к сожалению, без php-fpm установка невозможна), DNS для получения сертификата Let’s Encrypt, FTP сервер и опционально – фаервол и система квот.
Установочную команду с необходимым набором ПО можно сгенерировать на сайте VestaCP: https://vestacp.com/install/
Загружаем установочный скрипт:
curl -O http://vestacp.com/pub/vst-install.sh
И выполняем следующую команду для установки VestaCP:
bash vst-install.sh --nginx yes --apache yes --phpfpm no --named yes --remi no --vsftpd yes --proftpd no --iptables yes --fail2ban yes --quota yes --exim no --dovecot no --spamassassin no --clamav no --softaculous no --mysql no --postgresql no
Следует инструкциям и ожидаем когда установка будет завершена.
Настройка шаблонов VestaCP для Nginx WebDav
Теперь перейдём к редактированию шаблонов VestaCP, чтобы автоматизировать процесс добавления доменов с поддержкой WebDav, так как стандартный конфиг nginx значительно отличается.
Так как мы будем использовать сервер исключительно в роли WebDav, все предлагаемые разработчиками шаблоны nginx нам не нужны, поэтому можно их удалить:
rm -f /usr/local/vesta/data/templates/web/nginx/php-fpm/*
Так как WebDav работает по протоколу SSL (https), http нам не нужен, поэтому создаём для него пустой файл шаблона конфигурации:
touch /usr/local/vesta/data/templates/web/nginx/php-fpm/default.tpl
Теперь нам необходимо создать nginx WebDav https (SSL) шаблон. Создаем в редакторе vi файл шаблона конфигурации:
vi /usr/local/vesta/data/templates/web/nginx/php-fpm/default.stpl
Со следующим содержимым:
server { listen %ip%:443 ssl; server_name %domain_idn% %alias_idn%; ssl_certificate %ssl_pem%; ssl_certificate_key %ssl_key%; location / { client_max_body_size 10g; root %sdocroot%; dav_access user:rw group:rw all:rw; dav_methods PUT DELETE MKCOL COPY MOVE; dav_ext_methods PROPFIND OPTIONS; create_full_put_path on; charset utf-8; autoindex on; auth_basic "Upload directory"; auth_basic_user_file %sdocroot%/.htpasswd; access_log /var/log/%web_system%/domains/%domain%.log combined; access_log /var/log/%web_system%/domains/%domain%.bytes bytes; } include %home%/%user%/conf/web/snginx.%domain%.conf*; }
Так как для функционирования модуля nginx WebDav на директорию должны быть установлены права nginx:nginx (пользователь и группа), то создадим скрипт, который будет менять принадлежность директории при добавлении домена:
vi /usr/local/vesta/data/templates/web/nginx/php-fpm/default.sh
Со следующим содержимым:
#!/bin/bash # Changing public_html permission user="$1" domain="$2" ip="$3" home_dir="$4" docroot="$5" chmod 755 $docroot chown -hR nginx:nginx $docroot exit 0
Авторизации на WebDav сервере происходит по логину и паролю, поэтому нам нужно найти решение как автоматизировать процесс добавления WebDav-пользователя. В процессе добавления сайта в VestaCP, панель управления предлагает создать отдельный FTP-аккаунт для него. Мы воспользуемся данным функционалом и внесём изменения в скрипт, отвечающий за это:
vi /usr/local/vesta/bin/v-add-web-domain-ftp
Ищем блок Action и заменяем:
# Adding ftp user /usr/sbin/useradd $ftp_user \ -s $shell \ -o -u $(id -u $user) \ -g $(id -g $user) \ -M -d "$ftp_path_a/public_html" > /dev/null 2>&1
На:
# Adding ftp user /usr/sbin/useradd $ftp_user \ -s $shell \ -o -u $(id -u nginx) \ -g $(id -g nginx) \ -M -d "$ftp_path_a" > /dev/null 2>&1
В конце блока Action добавляем следующие строки:
# Adding WebDav password htpasswd -cb $HOMEDIR/$user/web/$domain/public_html/.htpasswd $ftp_user $password
Сохраняем изменения. На этом правка конфигов VestaCP завершена и можно перейти к следующему шагу – установке nginx WebDav модуля.
Установка модуля Nginx WebDav
Проверяем установленную версию Nginx командой nginx -v:
[root@vesta]# nginx -v nginx version: nginx/1.20.2
Скачиваем исходный код nginx, соответствующий версии, которая установлена на сервере:
cd /usr/src wget http://nginx.org/download/nginx-1.20.2.tar.gz tar -xzf nginx-1.20.2.tar.gz cd nginx-1.20.2
Устанавливаем репозиторий для работы с GitHub:
yum -y install git gcc
Загружаем модуль nginx WebDav с GitHub:
git clone https://github.com/arut/nginx-dav-ext-module
Для сборки nginx нам потребуется установка некоторых модулей, иначе в процессе конфигурации будут ошибки:
yum -y install pcre-devel openssl-devel libxslt-devel
Проверяем параметры, с которыми сконфигурирован Nginx:
nginx -V
Нас интересует строка configure arguments:
configure arguments: --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie'
Пересобираем Nginx. Для этого копируем configure arguments с предыдущего шага и добавляем в конец параметры для установки модуля WebDav сервера:
--with-compat --with-http_dav_module --add-module=nginx-dav-ext-module/
Вся конфигурационная строка будет иметь примерно такой вид. Выполняем её:
./configure --prefix=/etc/nginx --sbin-path=/usr/sbin/nginx --modules-path=/usr/lib64/nginx/modules --conf-path=/etc/nginx/nginx.conf --error-log-path=/var/log/nginx/error.log --http-log-path=/var/log/nginx/access.log --pid-path=/var/run/nginx.pid --lock-path=/var/run/nginx.lock --http-client-body-temp-path=/var/cache/nginx/client_temp --http-proxy-temp-path=/var/cache/nginx/proxy_temp --http-fastcgi-temp-path=/var/cache/nginx/fastcgi_temp --http-uwsgi-temp-path=/var/cache/nginx/uwsgi_temp --http-scgi-temp-path=/var/cache/nginx/scgi_temp --user=nginx --group=nginx --with-compat --with-file-aio --with-threads --with-http_addition_module --with-http_auth_request_module --with-http_dav_module --with-http_flv_module --with-http_gunzip_module --with-http_gzip_static_module --with-http_mp4_module --with-http_random_index_module --with-http_realip_module --with-http_secure_link_module --with-http_slice_module --with-http_ssl_module --with-http_stub_status_module --with-http_sub_module --with-http_v2_module --with-mail --with-mail_ssl_module --with-stream --with-stream_realip_module --with-stream_ssl_module --with-stream_ssl_preread_module --with-cc-opt='-O2 -g -pipe -Wall -Wp,-D_FORTIFY_SOURCE=2 -fexceptions -fstack-protector-strong --param=ssp-buffer-size=4 -grecord-gcc-switches -m64 -mtune=generic -fPIC' --with-ld-opt='-Wl,-z,relro -Wl,-z,now -pie' --with-compat --with-http_dav_module --add-module=/usr/src/nginx-dav-ext-module/
Пересобираем nginx и производим установку:
make make install
Перезагружаем nginx:
systemctl restart nginx
nginx WebDav модуль установлен. Теперь можно перейти непосредственно к настройке WebDav и добавлению аккаунта.
Настройка WebDav сервера и добавление аккаунта
Теперь нам понадобится непосредственно web-интерфейс панели управления VestaCP. Открываем её в браузере и переходим на вкладку WEB:
В списке сайтов мы видим доменное имя (имя хоста), которое мы указали при установки панели управления. Его мы удаляем даже если оно совпадает с тем, которое мы будем использовать для WebDav сервера.
Так как WebDav использует для работы протокол https, нам необходимо будет получить SSL сертификат. Мы воспользуемся бесплатным Let’s Encrypt, однако адрес для которого выдаётся сертификат, должен быть направлен на IP адрес сервера. Поэтому, в настройка DNS зон для используемого доменного имени пропишите А запись с IP адресом WebDav сервера. В примере мы используем webdav.virtirio.com, поэтому для домена virtirio.com мы создали А запись webdav.
Теперь мы заново добавляем доменное имя. Алиасы, поддержка DNS и Mail нам не нужны, поэтому отключаем:
На разделе Advanced options включаем поддержку SSL и выбираем сертификат Let’s Encrypt:
На вкладке Additional FTP создаём нового пользователя, который будет являться и пользователем WebDav сервера, поэтому логин и пароль нужно будет сохранить:
Жмём Add и WebDav аккаунт добавлен!
Проверяем синтаксис конфигураций nginx:
nginx -t
Если всё корректно, то видим:
nginx: the configuration file /etc/nginx/nginx.conf syntax is ok nginx: configuration file /etc/nginx/nginx.conf test is successful
Перезагружаем nginx:
systemctl restart nginx
Готово, на этом установка завершена. Вы можете проверить работу с помощью любого WebDav клиента.
Заключение
На этом установка и настройка nginx WebDav сервера в CentOS 7 завершена. Благодаря использованию панели управления VestaCP нам удалось автоматизировать процесс добавления новых доменов и пользователей в будущем. Таким образом, в нашем распоряжении появился функциональный WebDav хост, позволяющий делегировать права пользователям, управлять аккаунтами, регулировать квоты выделяемого дискового пространства или же просто создавать отдельные аккаунты для нескольких устройств, упорядочивая хранилище.
Теперь Вы можете начать использовать WebDav сервер, используя как стандартные функции Windows, так и сторонние приложения. Среди популярных, можно выделить следующие RaiDrive, поддерживающий множество различных облачных сервисов, а так же позволяющий добавить WebDav директорию в качестве системного диска, что является весьма удобным решением!