Всі частіше і частіше більшість користувачів стикаються з проблемою зберігання зростаючого обсягу даних. Це стосується як мультимедійного та іншого «важкого» контенту, так і важливої інформації. Збільшення розміру локальних сховищ часто є неефективним методом, тому багато хто віддає перевагу хмарним сервісам типу Google Drive, Dropbox та іншим. Проте приватне хмарне сховище можна зробити і самостійно. WebDav сервер є простим рішенням цієї проблеми.
Переваги приватного WebDav сервера
Наявність та використання приватного WebDav сервера має низку переваг порівняно з публічними сервісами, серед яких можна виділити:
- Підключення до сервера з різних пристроїв: ноутбук, смартфон тощо. Може використовуватися також кількома користувачами одночасно. Наприклад, співробітниками компанії;
- Обмеження доступу до сервера з певних IP-адрес або ж розміщення «всередині» локальної чи VPN-мережі;
- Оптимізація використання дискового простору на серверах: за наявності доступного вільного простору воно не буде «простаїти»;
- Необмежена масштабованість та відмовостійкість шляхом підключення розподіленого мережевого файлового сховища, наприклад, Ceph.
Крім того, Ваш віддалений WebDav аккаунт може бути змонтований у файловій системі Linux у будь-якому каталозі для збільшення та економії дискового простору сервера, організації сховища backup або ж організації файлового сховища.
Підготовка до налаштування WebDav сервера
Для створення WebDav сервера ми будемо використовувати операційну систему CentOS 8 (також можна використовувати 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 8 завершено. Завдяки використанню панелі управління VestaCP нам вдалося автоматизувати процес додавання нових доменів та користувачів у майбутньому. Таким чином, у нашому розпорядженні з’явився функціональний WebDav хост, який дозволяє делегувати права користувачам, керувати аккаунтами, регулювати квоти виділеного дискового простору або ж просто створювати окремі аккаунти для кількох пристроїв, впорядковуючи сховище.
Тепер Ви можете почати використовувати WebDav сервер, використовуючи як стандартні функції Windows, так і сторонні додатки. Серед популярних можна виділити наступний RaiDrive, який підтримує безліч різних хмарних сервісів, а також дозволяє додати WebDav директорію як системний диск, що є дуже зручним рішенням!