Nextcloud инструкция по установке

Введение

В статье мы расскажем, что такое Nextcloud, как скачать и установить его на свой сервер с дистрибутивом Ubuntu 22.04. Перед установкой подготовим все необходимые зависимости и конфигурации. А также выпустим бесплатный SSL-сертификат от сервиса Let’s Encrypt.

Что такое Nextcloud

Nextcloud — бесплатная и открытая облачная система для хранения данных и совместной работы. Это альтернатива популярным облачным сервисам вроде Dropbox или Google Drive. Но в отличие от этих сервисов, Nextcloud можно установить на свой сервер. Это означает, что вы будете полностью контролировать свои данные, не передавая их третьим лицам. Пользоваться сервисом можно как через браузер, так и установив клиентское приложение на компьютер (Windows, MacOS, Linux) или телефон (Android, iOS).

Кроме того, Nextcloud поддерживает множество плагинов (приложений) для расширения функционала. Вот несколько примеров:

  1. Calendar. Позволяет управлять своим расписанием, поддерживает синхронизацию с другими календарями через CalDAV.
  2. Files. Синхронизация файлов между устройствами, есть поддержка протокола WebDAV.
  3. Contacts. Управление контактами и адресной книгой с возможностью синхронизации через CardDAV.
  4. Mail. Интеграция электронной почты с облачным хранилищем.
  5. Notes. Заметки и списки с возможностью синхронизации на разных устройствах.
  6. Talk. Чат, аудио и видео звонки между пользователями Nextcloud.
  7. Tasks. Планировщик задач, интегрированный с календарем и поддерживающий синхронизацию с другими устройствами.
  8. Document Viewer. Онлайн-редактор документов, позволяющий создавать и редактировать текстовые файлы, таблицы и презентации.
  9. External storage support. Интеграция и перенос данных из других облачных хранилищ, таких как Google Drive или Dropbox.
  10. Two-Factor Authentication (2FA). Усиление безопасности аккаунта за счет подключения двухфакторной аутентификации.
  11. News. RSS-ридер для чтения новостей и блогов.
  12. Group folders. Создание общих папок и управление доступом к ним для разных групп пользователей.

Social. Интеграция социальных сетей и обмен подписками на федеративные платформы, такие как Mastodon.

Создание сервера в облачной платформе Selectel

Для начала создадим виртуальную машину, на которой будем устанавливать и настраивать Nextcloud. В панели управления Selectel зайдем в раздел Облачная платформа, Серверы и нажмем кнопку Создать сервер.

создание сервера nextcloud

Укажем имя сервера и выберем источник — образ Ubuntu 22.04 TLS. Затем необходимо выбрать количество виртуальных процессоров, объем оперативной памяти и сетевого диска. Обязательно подключите к машине внешний статичный IP-адрес, чтобы сервер был доступен из интернета. Также загрузите свой SSH-ключ, чтобы удаленно подключаться к машине.

Разбираетесь в железе? Пройдите тест и проверьте себя

выбор конфигурации

После создания сервера нужно подождать несколько минут, пока виртуальная машина запустится и загрузится. После этого в разделе Серверы скопируйте IP-адрес машины и подключитесь к ней по SSH.

ip-адрес

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

Для начала установим необходимые пакеты: веб-сервер Apache, базу данных MariaDB и различные модули для PHP:

sudo apt update
sudo apt install apache2 mariadb-server libapache2-mod-php php-gd
php-mysql php-curl php-mbstring php-intl php-gmp php-bcmath 
php-xml php-imagick php-zip unzip

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

Nextcloud хранит большинство своих настроек в базе данных. Поэтому создадим БД и пользователя, а Nextcloud после первого запуска уже сам создаст нужные ему таблицы, индексы и представления. Чтобы подключиться к нашему локальному серверу, воспользуемся простой консольной утилитой mysql.

    sudo mysql

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

    CREATE USER 'nextcloud_user'@'localhost' IDENTIFIED BY 'password';
CREATE DATABASE IF NOT EXISTS nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextcloud_user'@'localhost';
FLUSH PRIVILEGES;

MariaDB настроена, выходим из командной строки SQL:

    quit;

Установка и настройка Nextcloud

Теперь мы готовы к установке Nextcloud. Скачиваем самую последнюю версию и распаковываем ее:

    wget https://download.nextcloud.com/server/releases/latest.zip
unzip latest.zip

Затем переместим распакованное приложение директорию /var/www:

    sudo cp -r nextcloud /var/www

И сменим владельца каталога, чтобы Apache мог корректно обрабатывать все вложенные файлы:

    sudo chown -R www-data:www-data /var/www/nextcloud

Настройка веб-сервера Apache

Теперь необходимо настроить Apache. Для начала создадим файл /etc/apache2/sites-available/nextcloud.conf с настройками виртуального хоста.

В качестве доменного имени мы будем использовать cloud.my-domain.com, а вам необходимо указать свой домен:

    
  DocumentRoot /var/www/nextcloud/
  ServerName  cloud.my-domain.com

  
    Require all granted
    AllowOverride All
    Options FollowSymLinks MultiViews

    
      Dav off
    
  


Чтобы Apache начал использовать этот файл конфигурации, выполните в shell-консоли команду:

    a2ensite nextcloud.conf

Далее активируем несколько модулей Apache, которые необходимы Nextcloud для корректной работы:

    a2enmod rewrite
a2enmod headers
a2enmod env
a2enmod dir
a2enmod mime

Перезапустим Apache, чтобы применить все выполненные настройки: 

    service apache2 restart

Получение TLS-сертификата

Nextcloud уже готов к работе, но сейчас сейчас он работает по протоколу HTTP и не шифрует трафик. Чтобы повысить защиту сервера, выпустим и установим бесплатный TLS-сертификат от сервиса Let’s Encrypt. Для начала установим утилиту certbot, которая автоматически выпускает и обновляет TLS-сертификаты.

    sudo apt-get install -y certbot

Запросим сертификат с помощью команды (не забудьте в параметре указать свое доменное имя):

    sudo certbot --nginx -d chat.my-domain.com

Далее Certbot попросит ввести адрес электронной почты и согласиться с условиями использования. На этот адрес будут приходить письма с информацией об окончании срока сертификата. Сертификаты Let’s Encrypt действуют 90 дней. Чтобы обновить сертификат автоматически, добавьте cron-задание или systemd-таймер, который будет запускать следующую команду:

    sudo certbot renew --quiet

Теперь необходимо включить соответствующие модули в Apache, чтобы он начал использовать SSL-сертификаты:

    a2enmod ssl
a2ensite default-ssl

И еще раз перезапустим Apache, чтобы он применил новые настройки:

    service apache2 reload

Инициализация облака Nextcloud и начальный интерфейс

Откроем в браузере страницу https://cloud.my-domain.com и увидим окно первоначальной настройки Nextcloud. Создадим учетную запись администратора, а также укажите название БД, пользователя и пароль, которые мы заводили на этапе настройки MariaDB. При необходимости также можете поменять каталог, где будут размещаться пользовательские данные.

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

интерфейс nextcloud

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

Заключение

Мы установили и настроили облако Nextcloud на собственном сервере. Установили все необходимые зависимости, подготовили MariaDB и Apache к установке, защитили сервер бесплатным SSL-сертификат от Let’s Encrypt для шифрования трафика.

Nextcloud – платформа с открытым исходным кодом, предназначенная для хранения, синхронизации и совместной работы с файлами. Данный инструмент — альтернатива коммерческим облачным сервисам, таким как Google Drive, Dropbox или Microsoft OneDrive, но с акцентом на конфиденциальность, безопасность и самостоятельное развёртывание.

В статье разберём, как установить Nextcloud на виртуальный сервер, работающий под управлением Ubuntu 24.04.

Подготовка системы к установке

Nextcloud представляет собой веб-приложение, написанное на PHP, которое хранит данные в базе данных MySQL или MariaDB, и работает через веб-сервер – Apache или Nginx. Без установки этих компонентов систему нельзя запустить и, естественно, она не будет функционировать. Исходя из чего, инсталляция Nextcloud на своём VPS требует установки стека либо LAMP, либо LEMP, являющихся стандартными наборами инструментов для веб-серверов. В настоящем примере установку Nextcloud мы будем производить на виртуальную машину, на которой установлен стек LAMP, как это описано в посвящённой этому статье нашего справочника.

Помимо базовых компонентов PHP, проинсталлированных при установке LAMP, для корректного функционирования Nextcloud необходимо наличие в системе определённого набора обязательных PHP-расширений. Чтобы установить данные зависимости, выполните команду:

$ sudo apt install php8.3-xml php8.3-zip php8.3-mbstring php8.3-gd php8.3-curl

В число обязательных расширений входят:

  • php8.3-xml – модуль обработки XML;
  • php8.3-zip – модуль работы с ZIP-архивами;
  • php8.3-mbstring – модуль многобайтовых строк;
  • php8.3-gd – графическая библиотека GD;
  • php8.3-curl – модуль cURL для выполнения сетевых запросов.

Далее, подключитесь к MySQL:

$ mysql -u root -p

И создайте базу данных и учётную запись для Nextcloud:

CREATE DATABASE nextcloud CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci;
CREATE USER 'nextclouduser'@'localhost' IDENTIFIED BY 'P@ssword';
GRANT ALL PRIVILEGES ON nextcloud.* TO 'nextclouduser'@'localhost';
FLUSH PRIVILEGES;
EXIT;

В данном случае:

  • nextcloud – имя БД;
  • nextclouduser – имя пользователя;
  • P@ssword – пароль пользователя nextclouduser, вместо которого вам необходимо придумать и установить свой.

Как установить Nextcloud на Ubuntu

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

Дефолтная директория для веб-сайтов на сервере Apache – /var/www/. По умолчанию веб-сервер на Ubuntu ищет сайты именно там. Поэтому, чтобы Apache мог найти Nextcloud, устанавливать его удобно в этот каталог. Исходя из этого, для установки Nextcloud перейдите в директорию /var/www/:

$ cd /var/www/

На странице релизов Nextcloud размещены ссылки на различные его версии, в том числе на ZIP-архива с последней версией, который называется latest.zip. При помощи утилиты wget загрузите данный архив в текущий каталог:

$ sudo wget https://download.nextcloud.com/server/releases/latest.zip

Для распаковки ZIP-архива используется утилита unzip. Если она не установлена в вашей системе, проинсталлируйте её при помощи пакетного менеджера apt:

$ sudo apt install unzip

Затем распакуйте загруженный архив:

$ sudo unzip latest.zip

После чего измените владельца и группы для директории nextcloud и всего её содержимого на www-data – стандартного пользователя и группу веб-сервера Apache в Ubuntu. Это необходимо для того, чтобы Nextcloud имел права на чтение и запись в данном каталоге. Сделать это можно, выполнив команду:

$ sudo chown -R www-data:www-data nextcloud

Чтобы веб-сервер Apache мог корректно работать с Nextcloud, установите соответствующие права доступа на каталог nextcloud и всё его содержимое:

$ sudo chmod -R 755 nextcloud

Загруженный архив с дистрибутивом Nextcloud больше не понадобится. Поэтому его можно удалить:

$ sudo rm latest.zip

Далее необходимо создать конфигурационный файл Nextcloud:

$ sudo nano /etc/apache2/sites-available/nextcloud.conf

Его содержимое должно быть примерно следующим:

<VirtualHost *:80>
    DocumentRoot /var/www/nextcloud
    ServerName your-site-name.ru

    <Directory /var/www/nextcloud/>
        Options +FollowSymlinks
        AllowOverride All
        Require all granted
    </Directory>

    ErrorLog ${APACHE_LOG_DIR}/nextcloud_error.log
    CustomLog ${APACHE_LOG_DIR}/nextcloud_access.log combined
</VirtualHost>

В строке ServerName замените your-site-name.ru на доменное имя или IP-адрес вашего виртуального сервера.

Теперь активируйте конфигурацию виртуального хоста для Nextcloud на веб-сервере Apache:

$ sudo a2ensite nextcloud.conf

Далее активируйте необходимые для работы Nextcloud модули Apache:

  • rewrite – модуль перезаписи URL;
  • headers – модуль управления HTTP-заголовками;
  • env – модуль переменных окружения;
  • dir – модуль работы с директориями;
  • mime – модуль MIME-типов.

Чтобы сделать это, запустите команду:

$ sudo a2enmod rewrite headers env dir mime

После чего проверьте корректность синтаксиса Apache:

$ sudo apache2ctl configtest

Вывод данной команды должен содержать строку Syntax OK.

Проверка корректности синтаксиса Apache

Затем перезапустите службу Apache:

$ sudo systemctl restart apache2

Проверьте состояние службы Apache:

$ systemctl status apache2

В выводе команды не должно присутствовать сообщений о каких-либо ошибках. Также должно быть указано, что служба запущена (active (running)) и установлена в автозагрузку (enabled).

Вывод состояния службы Apache - Как установить Nextcloud на Ubuntu

Подключение к Nextcloud

Чтобы проверить работоспособность Nextcloud, откройте на своём локальном компьютере браузер и перейдите по ссылке http://your-site-name.ru, где замените your-site-name.ru на доменное имя или IP-адрес вашего виртуального сервера.

Подключение к Nextcloud - Как установить Nextcloud на Ubuntu

В открывшейся форме укажите:

  • имя новой учётной записи администратора вашего экземпляра Nextcloud;
  • пароль для создаваемого пользователя;
  • имя пользователя базы данных Nextcloud, созданного ранее, – nextclouduser;
  • пароль пользователя nextclouduser;
  • имя базы данных – nextcloud;
  • сервер, на котором работает база данных – localhost.

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

Установка рекомендованных приложений

После чего вы попадёте на страницу дашборда Nextcloud.

Дашборд Nextcloud - Как установить Nextcloud на Ubuntu

Настройка HTTPS с Let’s Encrypt

Если для доступа к установленной платформе вы используете не IP-адрес вашего VPS, а доменное имя, то имеет смысл настроить защиту передаваемых данных с помощью шифрования трафика путём использования протокола HTTPS. Для Nextcloud, как облачного хранилища конфиденциальных файлов, этот аспект выглядит особенно актуально.

Настройка доступа к веб-ресурсу по HTTPS заключается в установке на сайт TLS-сертификата. Наиболее удобным вариантом получения такого сертификата является использование TLS-сертификата от Let’s Encrypt, который предоставляет бесплатные доверенные сертификаты с возможностью их автоматического продления.

Для настройки шифрования через HTTPS Let’s Encrypt предоставляет специализированный инструмент для работы с сертификатами – Certbot. Данный инструмент является официальным клиентом Let’s Encrypt, который автоматизирует получение, установку и обновление бесплатных TLS-сертификатов. Certbot самостоятельно выполняет аутентификацию домена, настраивает конфигурацию веб-сервера и активирует автоматическое продление сертификата, избавляя администратора сервера от рутинных операций.

Для установки Certbot запустите команду, которая помимо основного клиента Let’s Encrypt для работы с сертификатами инсталлирует плагин для интеграции Certbot с Apache, предназначенный для автоматической настройки виртуальных хостов:

$ sudo apt install certbot python3-certbot-apache

Следующая команда производит настройку HTTPS для вашего сайта:

$ sudo certbot --apache -d your-site-name.ru

В данной команде замените your-site-name.ru на доменное имя, привязанное к IP-адресу вашего виртуального сервера.

Во время своей работы команда попросит вас указать адрес электронной почты для уведомлений о проблемах с сертификатами. После чего необходимо согласиться с условиями лицензионного соглашения и подписанием на новости EFF – некоммерческой организацией и партнёром-основателем проекта Let’s Encrypt. Затем Certbot запросит сертификат для вашего домена и после успешного сохранения настроит в шедулере задачу для его автоматического обновления в фоновом режиме.

Установка TLS-сертификата при помощи утилиты Certbot

После чего останется лишь добавить в брандмауэр UFW правило, разрешающее доступ к вашему серверу по протоколу HTTPS:

$ sudo ufw allow https

Чтобы убедиться в успешном завершении настройки шифрования трафика, обновите в браузере страницу вашего экземпляра Nextcloud. В строке навигации должно быть указано, что доступ к ней осуществляется с использованием протокола HTTPS.

Подключение к Nextcloud с использованием протокола HTTPS

На пути создания своего облачного сервиса пока мы освоились в системе Debian и создали веб-сервер. Теперь пришла пора для финального шага — создания и настройки персонального облака на базе сервера Nextcloud.


Оглавление

Часть 1. Настройка среды Debian для повседневного использования
Часть 2. Создание сервера — настройка LAMP в Debian
Часть 3. Создание персонального облака — установка и настройка Nextcloud
Часть 4. Актуализация 2018 – Debian 9 и Nextcloud 13
Часть 5. Актуализация 2019 – PHP 7.2, MariaDB 10.4 и Nextcloud 17


Быстрая навигация по главе

Предисловие
Подготовка сервера для установки Nextcloud
Установка Nextcloud
Организация места хранения данных Nextcloud
Настройка доступа к виртуальной машине Nextcloud из локальной сети
Настройка Nextcloud
Дополнительная «тонкая» настройка Nextcloud
Защита для Nextcloud
Синхронизация с облаком смартфонов
Синхронизация с облаком персонального компьютера
Послесловие


Предисловие

Вот мы и подошли к тому самому, ради чего всё затевалось и к чему не быстро продвигались. В этой части будет описана установка и некоторые моменты в настройке сервера Nextcloud в виртуальной машине VMWare, а также небольшой опыт работы с ним в виде синхронизации содержимого пары смартфонов и папок настольного компьютера под управлением Windows. Нижеприведённые инструкции по установке Nextcloud подразумевают, что сервис разворачивается на сервере, который был создан по инструкциям в предыдущей части моего повествования.

Изначально эта глава планировалась небольшой, так как я хотел ограничиться только описанием установки и настройки Nextcloud, по сути закончив эту историю о «простом входе в Linux под конкретную задачу». Но, подумав, что кому-то это может показаться интересным, потом всё же решил показать как я решил вопрос синхронизации папок своего домашнего компьютера, поэтому эта завершающая глава плавно перетекла из чётких инструкций что и как делать в, по сути, программирование. Этим объясняется некоторый «винегрет» в этой части – начинается она с работы и настройки в Linux, перетекая на уровень настроек сети и виртуального софта, а заканчивается строганием костылей в Windows. С другой стороны, этот цикл статей имеет название «История создания…» и я всё же решил рассказать её до конца.

Примечание
При дальнейшем чтении в конструкциях вида http:// 127.0.0.1 (https:// 127.0.0.1) пробел после http:// (https://) необходимо убирать при вводе в адресную строку браузера. Пробел вставлен при публикации этой статьи с целью воспрепятствовать автоматической конвертации движком сайта текста в ссылки.


Подготовка сервера для установки Nextcloud

Nextcloud – это веб-приложение, которое имеет набор файлов и работает с базой данный MySQL. Веб-приложение устанавливается как обычный сайт, для установки которого нужно загрузить файлы «движка» на сервер, запустить установочный файл и при установке указать реквизиты доступа к базе данных, заранее созданной для этого сайта.

Создаём директорию, в которой будут размещены файлы Nextcloud:
# mkdir /var/www/nextcloud

Я решил отказаться от HTTP, оставив доступ только по HTTPS. Для этого нужно настроить apache.

Открываем файл:
# nano /etc/apache2/sites-available/default-ssl.conf
И перед тегом добавляем следующее содержимое:

<Directory /var/www/nextcloud>
  Options FollowSymLinks
  AllowOverride All
  Require all granted
</Directory>

Отключаем конфигурацию HTTP:
# a2dissite 000-default.conf

Закрываем порт 80:
# ufw delete allow 80

И перезапускаем веб-сервер:
# service apache2 restart

Теперь нужно создать базу данных для nextcloud. Входим в mysql, введя пароль от суперпользователя mysql:
# mysql -u root -p

Создаём базу данных с названием nextcloud:
mysql> CREATE DATABASE `nextcloud`;

Создаём пользователя с именем nextcloud и тривиальным паролем nc123:
mysql> CREATE USER ‘nextcloud’@’localhost’ IDENTIFIED BY ‘nc123’;

Выдаём полный доступ пользователю nextcloud на базу nextcloud:
mysql> GRANT ALL PRIVILEGES ON `nextcloud`.* TO ‘nextcloud’@’localhost’;

Обновляем таблицу привилегий:
mysql> FLUSH PRIVILEGES;

Выходим из mysql:
mysql: mysql> exit

Помимо этого, необходимо установить дополнительные модули для PHP:
# apt-get install curl libcurl3 libcurl3-dev php5-curl
# a2enmod rewrite

В первой части этой истории нами были открыты порты для сетевого и почтового взаимодействия, но под нашу целевую задачу они не требуются и лучше их закрыть. Удаляем правила:
# ufw delete allow 138/udp
# ufw delete allow 139/udp
# ufw delete allow 139/tcp
# ufw delete allow 445/tcp
# ufw delete allow 25
# ufw delete allow 465
# ufw delete allow 110
# ufw delete allow 143
# ufw delete allow 993


Установка Nextcloud

Скачиваем файлы и распаковываем их в предназначенную директорию:
# wget download.nextcloud.com/server/releases/nextcloud-11.0.2.tar.bz2
# tar xjf nextcloud-11.0.2.tar.bz2 -C /var/www

Изменяем права на папку:
# chmod 755 /var/www/nextcloud

И назначаем владельцем этой папки веб-сервер, чтобы не было проблем с записью в неё:
# chown -R www-data:www-data /var/www/nextcloud

Всё! Сервис установлен, если набрать в браузере https:// 127.0.0.1/nextcloud, то откроется мастер установки. Но подождём с этим, предварительно подготовив место для хранения пользовательских данных.

Стоит упомянуть, что версия Nextcloud 11.0.2 на данный момент является довольно устаревшей и содержащей уязвимости, которых нет в более новых и актуальных версиях, поэтому если и устанавливать ветку 11.х, то лучше установить более свежую версию (на начало 2018 года — это версия 11.0.7).


Организация места хранения данных Nextcloud

Эта часть факультативная и может без проблем пропускаться – работать всё будет и без неё. Однако, если вы заходите выносить директорию с данными вне виртуальной машины, то рекомендую ознакомиться с ней.

По умолчанию синхронизируемый контент будет храниться в директории /var/www/nextcloud/nxcdata. Меня этот вариант сразу не устраивал по нескольким причинам. С одной стороны, я бы не хотел постоянного увеличения объёма файла виртуального диска. С другой стороны, хотелось бы иметь отдельное и независимое от виртуальной машины решение хранения данных. Самое простое, что сразу приходит в голову – использование USB-диска. В случае нехватки места диск можно просто заменить. В случае необходимости его можно подключить к другому компьютеру и скачать необходимые файлы. Мобильно и удобно. Однако USB 2.0 использовать не хотелось по причине относительно небольшой пропускной способности по современным меркам, а с USB 3.0 у меня ничего не получилось – софт виртуализации (WMVare и VirtualBox) никак не хотел нормально пробрасывать устройства, подключенные через контроллер USB 3.0.

Аппетиты, в процессе работы над созданием облака, у меня возросли и мне уже никак не меньше одного терабайта надо было, поэтому, в конце концов, я решил подключить к виртуальной машине обычный двухтерабайтный жесткий диск, который уже был размещён и подключен внутри компьютера. В случае необходимости он без проблем вытаскивается и подключается через имеющийся переходник SATA <-> USB 3.0.

Итак, основная идея — организовать постоянную точку для подключения директории с пользовательским контентом вне каталога /var/www/nextcloud, в которой создаётся символьная ссылка с названием nxcdata, ссылающаяся на реальный каталог с данными, который может быть подключен различными способами на различных носителях.

Создаём каталог:
# mkdir /mnt/nxcdata

Изменяем права:
# chmod 770 /mnt/nxcdata

Делаем владельцем веб-сервер:
# chown www-data:www-data /mnt/nxcdata

Я могу как угодно и где угодно располагать данные, главное – символьную ссылку на эту директорию размещать в директории /mnt/nxcdata и назвать её nxcdata, т.е. полный путь будет выглядеть как /mnt/nxcdata/nxcdata.

Сначала я протестировал решение для локальной папки, которую создал в домашнем каталоге.

Создал в нужном месте папку:
$ mkdir /home/user/nxcdata

Изменил права:
# chmod 755 /home/user/nxcdata

Сделал владельцем веб-сервер:
# chown -R www-data:www-data /home/user/nxcdata

Создал символьную ссылку:
# ln -s /home/user/nxcdata /mnt/nxcdata/nxcdata

Это решение было работоспособно, поэтому можно двигаться дальше. Внешний каталог для данных можно подключить двумя способами – через сервис VMWare Shared или напрямую как физический диск или раздел. Надо понимать, что первое решение возможно только при наличии установленных vmware tools, которые без проблем ставятся только при наличии графического интерфейса операционной системы (в ином случае придётся править установочные скрипты vmware tools). Если же отказаться от графического интерфейса, то остаётся только вариант подключения диска напрямую к виртуальной машине, но и с этим решением мне пришлось изрядно помучиться. Через некоторое время я всё же нашёл стабильно работающий вариант, с учётом которого был придуман универсальный скрипт, вобравший в себя оба варианта подключения.

Для папки, подключаемой через VMWare Shared Folders в разделе Shared Folders настройках виртуальной машины необходимо подключить необходимую папку из хостовой системы и дать ей название vmw-nxcdata. Эта папка может ссылаться на какую-то директорию на жестком диске или прямо на корневой каталог какого-то диска в хостовой системе.

Подключенная папка появится в виртуальной системе автоматически по пути /mnt/hgfs/vmw-nxcdata. Однако проблема в том, что веб-серверу будет недостаточно прав для записи файлов по этому пути и стандартными средствами системы переназначить права для этой директории не получится. Поэтому мне пришлось разобраться как вручную монтировать подобные ресурсы.

Создаём папку:
# mkdir /mnt/vmw-nxcdata

Выполняем монтирование, используя модуль vmhgfs, который установился вместе с vmware-tools:
# mount -t vmhgfs -o uid=www-data,gid=www-data,fmask=007,dmask=007 .host:/vmw-nxcdata /mnt/vmw-nxcdata

Монтирование нужно выполнять именно с такими параметрами для беспроблемной работы веб-сервера в будущем. Изначально я монтировал без указания uid/gid и масок, но ни к чему хорошему это потом не приводило, так как изменить права после монтирования уже не получалось. После выполнения монтирования может выдаваться: «Could not add entry to mtab, continuing», — однако монтироваться и работать будет.

Отлично, директорию мы примонтировали. Теперь можно разместить символьную ссылку на эту директорию в /mnt/nxcdata. Но не хотелось бы при каждом запуске или перезапуске сервера делать это вручную. Самый простой способ – в файле /etc/rc.local вписать вышеприведённую команду для монтирования до строчки «exit 0». Однако мне хотелось, чтобы при выключении виртуальной машины происходило автоматическое гарантированное размонтирование для надёжной сохранности данных. И я решил сделать всё на уровне сервисов и немного разобраться с механизмами init/update-rc, тем более мне было любопытно и это оказалось довольно интересно.

Смысл нижеследующих действий в том, чтобы создать системный сервис, который бы вызывался и выполнял заранее заданные команды при включении или выключении системы. Сервис описывается скриптом, составленным по определённым правилам и располагается в /etc/init.d. Блок INIT INFO располагается в самом начале скрипта и содержит служебную информацию, в которой хотелось бы отметить директивы Default-Start и Default-Stop – они задают уровни выполнения, на которых скрипт должен быть запущен или остановлен по умолчанию.

Уровни выполнения:

0 – выполнение скрипта при выключении системы
1 – выполнение скрипта при запуске системы в однопользовательском режиме
2 – выполнение скрипта при запуске системы в многопользовательском режиме
3 – 5 – зарезервировано
6 – выполнение скрипта при перезагрузке системы

После написания скрипта он задействуется, используя механизм update-rc, который, фактически, на скрипт создаёт ссылки в нужных каталогах /etc/rc0.d — /etc/rc6.d, содержимое которых соответствует выполняемым задачам по уровням запуска. Ссылки можно создавать и самостоятельно, но, в отличии от включения или отключения конфигураций веб-сервера apache, здесь нужно учитывать много нюансов, поэтому включать или отключать сервис нужно через update-rc.

Итак, создаём файл:
# nano /etc/init.d/nxcdata_automount.sh

И записываем в него следующее содержимое:

#!/bin/sh
# nxcdata_automount.sh 1.0

### BEGIN INIT INFO
# Provides: myscript
# Required-Start:
# Required-Stop:
# Default-Start: 1 2 3 4 5
# Default-Stop: 0 6
# Short-Description: nxcdata_automount.sh 1.0
# Description: nxcdata_automount.sh 1.0
### END INIT INFO

. /lib/lsb/init-functions

# Start actions
perform_start()
{
  log_daemon_msg «Start nxcdata_automount»
  sleep 30
  mount -t vmhgfs -o uid=www-data,gid=www-data,fmask=007,dmask=007 .host:/vmw-nxcdata /mnt/vmw-nxcdata
  #mount -t ntfs-3g -o uid=www-data,gid=www-data,fmask=007,dmask=007 /dev/sdb1 /mnt/sdb1
  #mount -t ext4 /dev/sdb1 /mnt/sdb1
  sleep 5
  service fail2ban restart
  log_end_msg 0
  return 0
}

# Stop actions
perform_stop()
{
  log_daemon_msg «Stop nxcdata_automount»
  umount /mnt/nxcdata
  log_end_msg 0
  return 0
}

case $1 in
  start)
    perform_start
    ;;

  stop)
    perform_stop
    ;;

  *)
    echo “Usage: /etc/init.d/myscript {start|stop}”
    exit 3
    ;;
esac

Обратите внимание на пару закомментированных команд в секции perform_start – это наш задел на будущее. Так же, после выполнения монтирования перезапускается сервис fail2ban.

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

После такого отвлечения продолжаем настройку далее. Создаём символьную ссылку:
# ln -s /mnt/vmw-nxcdata /mnt/nxcdata/nxcdata

Делаем наш скрипт исполняемым:
# chmod +x /etc/init.d/nxcdata_automount.sh

Добавляем скрипт в автозагрузку:
# update-rc.d nxcdata_automount.sh defaults

Перезагружаем систему и убеждаемся, что автомонтирование прошло успешно и по нужным путям всё доступно.

Для удаления скрипта нужно будет выполнить пару команд:
# update-rc.d -f nxcdata_automount.sh remove
# rm -f /etc/init.d/nxcdata_automount.sh

В случае монтирования диска не через VMWare Shared Folders, а напрямую следует выполнить действия аналогичные как и при монтировании через VMWare Shared Folders, но с учётом того, что в системе появляется полноценный второй диск. Как узнать букву диска?

Большинство блочных устройств Linux подключаются через интерфейс SCSI, поэтому в большинстве случаев диски будут начинаться с букв sd. Третья буква в имени диска означает его порядковый номер в системе и обозначается по алфавиту: sda — первый диск, sdb — второй диск, sdc — третий и так далее. Дальше следует цифра, которая определяет номер раздела на диске: sda1, sda2 и так далее. Самый простой способ увидеть все подключенные диски — посмотреть содержимое каталога /dev/ и отфильтровать устройства sd:

$ ls -l /dev/ | grep sd

Например, нам нужно подключить диск sdb1 с файловой системой NTFS.

Создадим директорию и смонтируем в неё диск:
# mkdir /mnt/sdb1
# mount -t ext4 /dev/sdb1 /mnt/sdb1

Создадим директорию для данных, выставим ей права и пользователя:
# mkdir /mnt/sdb1/nxcdata & chmod 770 /mnt/sdb1/nxcdata & chown -R www-data:www-data /mnt/sdb1/nxcdata

Далее необходимо так же создать скрипт для автомонтирования и откорректировать команду монтирования в скрипте (примеры подключения диска с NTFS и EXT4 в скрипте уже есть и закомментированы) и добавить скрипт в автозагрузку.

B cоздаём символьную ссылку на директорию с данными:
# ln -s /mnt/sdb1/nxcdata /mnt/nxcdata/nxcdata

По сути, вся эта морока с кучей директорий nxcdata призвана для одного: обеспечить простой перенос директории с данными в будущем — не нужно будет править конфигурацию в движке Nextcloud и вообще лезть в него — всё, что нужно будет сделать — подключить новый диск, перекопировать на него данные и пересоздать символьную ссылку, ведущую к новой директории с данными. При этом, все действия не выходят за каталог /mnt. Так всё усложнённо получилось эволюционно, просто я не захотел терять наработанные решения.

Как лучше выносить данные вне виртуальной машины? Поделюсь опытом на каком варианте я остановился и почему.

USB накопители автоматически захватывались при загрузке виртуальной машины, корректно и полноценно пробрасывались внутрь и всегда всё работало, но только до того момента как накопитель по какой-то причине не отключался от системы. Помогала перезагрузка или физическое отключение и подключение диска. Решение оказалось ненадёжным. С флешками такой проблемы не было, но меня категорически не устраивал их объём и скорость работы. Возможно стоило попробовать внешний накопитель с автономным питанием.

Проброс директории через VMWare Shared Folders работал стабильно и отлично. Такое решение полностью удовлетворило задачу синхронизации двух смартфонов. Всё отработало несколько дней, были прокачаны десятки гигабайт данных. Однако, когда я решил добавить в облако данные с компьютера, то внезапно обнаружилась проблема, связанная с длинными путями и именами файлов. В теории ограничение на длину имени файла или папки в NTFS составляет 255 символов, но на практике Windows API ограничивает до 244 символов. В теории ограничение на длину пути к файлу или папке в NTFS составляет 32767 символов, но на практике Windows API ограничивает до 245 символов. Учитывая то, что я большой любитель структурировать информацию, длина пути у меня может быть очень большой. Несокращённое название книг так же может легко составлять 100-150 символов с учётом пробелов. Данное ограничение – известная проблема VMWare Shared Folders, которая не вылечилась даже при использовании Windows 10 с всякими хитроумными ключами в реестре для снятия ограничения в 255 символов. Возможна причина в ограничениях vmhgfs. От этого удобного способа подключения пришлось отказаться. Причина установлена точно – проблема в виртуальной файловой системе, которая используется в механизме VMWare Shared Folders.

Следующее решение – подключение жесткого диска напрямую к виртуальной машине. Тут тоже не выходило всё гладко. Структура данных (или файловая система, причём это проявлялось и для NTFS и для EXT2/3/4) постоянно ломались то ли при «захвате» диска или его раздела софтом виртуальной машины, то ли при возврате его в хостовую систему даже если я переводил весь диск в режим offline на хостовой системе. При некоторых режимах я не то, чтобы записывать или читать данные — я даже не мог нормально отформатировать проброшенный жесткий диск или раздел. Однако работоспособный режим удалось найти: к виртуальной машине подключался физический жесткий диск с одним разделом, отформатированный в NTFS, в определённом режиме подключения: SATA/Independent/Persistent/Use individual partition. На жестком диске в должна находиться папка nxcdata, содержащая данные.


Настройка доступа к виртуальной машине Nextcloud из локальной сети

У нас нет проблем с открытием сайтов внутри виртуальной машины или с хостовой системы. Но как открыть созданный сайт с другого компьютера в локальной сети? Посмотрим на структуру нашей сети, изображённой ниже.

На картинке видно, что маршрутизатор подключен к интернету напрямую и сконфигурирован так, что автоматически раздаёт IP адреса подключенным устройствам в диапазоне 192.168.0.2-192.168.0.254. Адрес 192.168.0.2 получил наш компьютер, а 192.168.0.3 – второй компьютер, на котором мы делаем сервер. Однако на втором компьютере установлен софт виртуализации, который создал свой виртуальный маршрутизатор и сконфигурировал его DHCP на подсеть 192.168.233.0/24. Наш виртуальный сервер получил IP 192.168.133.138.

Я без проблем могу открыть сайт внутри виртуальной машины 192.168.233.138. Я без проблем могу открыть сайт с машины 192.168.0.3 просто введя нужный IP адрес в браузере – софт виртуализации уже позаботился о правильном конфигурировании сетевого окружения на хостовой машине. Но как мне добраться до сайта с компьютера 192.168.0.2? Если я введу IP адрес 192.168.233.138, то мне ничего не откроется, так как ни мой компьютер, ни реальный маршрутизатор ничего не знают об этой подсети. Если я введу адрес 192.168.0.3, то мне так же ничего не откроется, так как на этом компьютере реально нет никакого сайта – он внутри его виртуальной машины.

Для решения этого вопроса нужно настроить виртуальный маршрутизатор компьютера 192.168.0.3. Мы уже знаем, что обращение к сайтам идёт по портам 80 и 443. При обращении на эти порты к машине 192.168.0.3 нужно построить маршрутизацию так, чтобы запросы переправлялись на виртуальную машину 192.168.233.138. К счастью для этого у нас есть доступные инструменты. В VMWare Workstation есть инструмент Virtual Network Editor, который можно открыть из меню виртуальной машины (Edit -> Virtual Network Editor).

Этот инструмент позволяет довольно гибко управлять сетевыми параметрами. Нам нужно выделить виртуальную сетевую карту VMNet8 и щелкнуть по ставшей доступной кнопке «NAT Settings…». В открывшемся окне нужно добавить правила для создания нужной нам маршрутизации.

Указываем порт хостовой системы и затем прописываем IP адрес и порт виртуальной машины, куда следует перенаправлять запросы. Для проброса HTTPS траффика необходимо указать порт 443 хостовой системы и порт 443 и адрес 192.168.233.138 виртуальной машины. После создания правил нажимаем «OK» во всех окнах – виртуальное сетевое окружение переконфигурируется автоматически.

После этих изменений наши сайты начнут открываться и с машины 192.168.0.2 при обращении к адресу 192.168.0.3.

Подобные настройки для проброса портов есть не только у VMWare, но и у VirtualBox (Настройки → Сеть → выбрать требуемый адаптер → Дополнительно → Проброс портов). Однако в процессе экспериментов по подключению жесткого диска к этому этапу у меня оказался установленным бесплатный VMWare Player, в котором Virtual Network Editor не было. В интернете про проброс портов для VMWare Player я ничего не нашёл и пришлось воспользоваться пробной версией VMWare Workstation – при установке продукта даётся 30 дней его бесплатного использования. Через 30 дней продукт можно удалить, почистить реестр и установить заново, но такое внимание к серверу как-то избыточно и явно нежелательно. И тогда я пошёл на небольшую (или большую) хитрость. В наборе файлов VMWare Workstation присутствует утилита vmnetcfg, которая по сути и запускается через пункт Virtual Network Editor. Однако в наборе файлов VMWare Player её не было. Но при установке VMWare Player как-то же конфигурирует своё сетевое окружение? Я просто взял эту утилиту и скопировал в папку с VMWare Player, после чего запустил. Удивительно, но всё получилось. Возможно, тонкие сетевые настройки в среде VMWare Player работать не будут, но проброс портов обеспечивается, а большего мне и не нужно.

Для доступа к нашему серверу из интернета нужно аналогично пробросить порты на маршрутизаторе, который подключен к интернету. В прошивках подавляющего большинства маршрутизаторов есть секция Port Forwarding, в которой и можно настроить маршрутизацию, указав внешний порт и порт и IP адрес внутренней машины. Однако есть небольшой нюанс. Если провайдер нам выдал реальный IP адрес или мы его купили у него, то тогда проблем не будет – с компьютера из любой точки планеты вводим этот IP адрес, реальный маршрутизатор перенаправит траффик на компьютер с виртуальной машиной, на котором виртуальный маршрутизатор перенаправит траффик непосредственно в виртуальную машину. А вот что делать тому, у кого нет возможности получить реальный IP адрес и он получает динамические адреса или оказывается за NAT провайдера, получая «серые» IP адреса? Мне такую задачу решать не пришлось, так как у меня есть статичный «белый» IP. Тому, кому придётся решать такую задачу так или иначе придётся разбираться с этой проблемой. Я бы советовал посмотреть в сторону dyndns или freedns.afraid.org в случае динамических адресов, либо купить дешевый VDS попробовать придумать какую-то маршрутизацию самому, так как в любом случае без внешнего сервера с статичным IP адресом подобную проблему не решить.

После конфигурирования маршрутизации я зафиксировал IP адреса компьютеров 192.168.0.3 и 192.168.233.138, прописав их в настройках сетевых карт указанных машин вручную для того, чтобы исключить их автоматическое переназначение.


Настройка Nextcloud

Теперь пришла пора открыть в браузере https:// 127.0.0.1/nextcloud внутри виртуальной машины, https:// 192.168.233.138/nextcloud с хостовой системы или, исходя из вышеописанной настроенной маршрутизации, https:// 192.168.0.3/nextcloud с любого компьютера в локальной сети.

Далее задаём логин/пароль для администратора, доступ к ранее созданной БД, а в качестве места хранения указываем полный путь к директории nxcdata: /mnt/nxcdata/nxcdata. Данный этап настройки ничем не отличается от установки какого-нибудь сайта.

В настройках админки я сделал следующие нехитрые изменения:

— Personal → выбрал русский язык и указал e-mail для администратора user@localhost
— Администрирование → Общий доступ → отключил все пункты
— Администрирование → Usage survey → отключил все пункты
— Администрирование → Дополнительные настройки → Управление файлами: «Максимальный размер загружаемого файла» установил в 25 GB
— Пользователи → создал группу users и добавил в неё нового пользователя user

После настройки нужно включить кеширование.

Открываем файл:
# nano /var/www/nextcloud/config/config.php

И в самый конец, перед «);» добавляем нижеследующее:

'memcache.local' => '\OC\Memcache\Memcached',
'memcache.distributed' => '\OC\Memcache\Memcached',
'memcached_servers' => array(
array('localhost', 11211),
),

Теперь нужно разрешить внешний доступ к сайту на уровне его «движка».

Открываем файл:
# nano /var/www/nextcloud/config/config.php

В секцию trusted_domains нужно в массив IP адрес сервера, добавить адрес, на котором установлен Nexcloud. Секция trusted_domains в нашем случае будет выглядеть следующим образом:

'trusted_domains' =>
array (
0 => '127.0.0.1',
1 => '192.168.233.138',
),

Теперь можно проверить работоспособность сервиса – открываем сайт и авторизуемся под пользователем user. Если авторизация прошла успешно, то значит сервис готов к бою – можно ставить приложение для синхронизации на компьютеры и смартфоны, для доступа ввести IP адрес 192.168.0.3 и реквизиты доступа аккаунта, созданные под каждое устройство.
К счастью или к сожалению, мне не пришлось пользовался всем потенциалом созданного сервиса, так как изначально мне нужна была система резервного копирования с верификацией и стартово я вообще хотел обойтись только subversion, но скорость коммитов особенно большого количества мелких файлов меня сильно опечалила. Я сделал всё на вырост, но попользоваться этим так и не собрался, а потом стало как-то совсем не до облака.

Более детальный обзор по использованию сервиса сделал пользователь wtigga в конце 2017 года в своей статье «Чем загрузить VPS: своё «облако» Nextcloud». В статье, с точки зрения пользователя, даётся обзор более нового сервера Nextcloud, 12-ой версии.


Дополнительная «тонкая» настройка Nextcloud

В процессе эксплуатации облака в течение первого месяца работы всплыли некоторые проблемы, которые мне пришлось решить с помощью сообщества или самостоятельно. Надо сказать, что я использовал сервис очень усиленно и по сути проверил его на стрессоустойчивость. Синхронизировать за вечер с телефонов несколько гигабайт данных и до миллиона мелких файлов с компьютера – это было обычное дело. В общем, сервис произвёл на меня очень положительное впечатление.

Я бы не сказал, что нижеизложенные решения правильны и красивы, но эти костыли работают по крайней мере для версии 11.0.2, иначе сервисом пользоваться было бы невозможно. В версии 12.х возможно что-то было улучшено и исправлено, поэтому я бы не рекомендовал эти настройки прописывать сразу в рамках стартовой настройки, в то время как для линейки 11.x их можно применять сразу.

Проблема 1

При синхронизации возникает ошибка типа «file is locked». Синхронизация останавливается. Проблема известна — необходимо очистить содержимое таблицы oc_file_locks выполнив из консоли mysql (при авторизации пользователя nextcloud) к ней следующий запрос:
mysql > DELETE FROM oc_file_locks WHERE 1

Так как такие ошибки нередки, то я не придумал ничего лучше, как создать скрипт и положить его прямо в папку суперпользователя:
# nano /root/empty_oc_file_locks

Содержимое скрипта:

#!/bin/bash
mysql -unextcloud > -pnc123 -D nextcloud  <<MY_QUERY
DELETE FROM oc_file_locks WHERE 1
MY_QUERY

Скрипт можно выполнять вручную, но это же не наш метод. Я решил запускать его автоматически каждые 15 минут используя cron (https://ru.wikipedia.org/wiki/Cron ).
Для этого нужно создать файл:
# nano /root/crontab

Со следующим содержимым:

*/15 * * * * root bash /root/empty_oc_file_locks

Теперь нужно внести изменения в планировщик:
# crontab /root/crontab

Проверить наличие изменений можно так:
# crontab -l

Проблема 2

При синхронизации по webDAV в логах (смотреть в панели администрирования, авторизовавшись администратором) могут появляться следующие ошибки:

Error PHP reset() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#783
Error PHP ksort() expects parameter 1 to be array, null given at /var/www/nextcloud/apps/files_versions/lib/Storage.php#782
Error PHP Invalid argument supplied for foreach() at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: by_file at /var/www/nextcloud/apps/files_versions/lib/Storage.php#759
Error PHP Undefined index: all at /var/www/nextcloud/apps/files_versions/lib/Storage.php#757

На этот раз сообщество ничем не помогло и пришлось вести следствие в одиночку. Причина крылась в ошибке «Undefined index… Storage.php#757», которая каскадно тянет ещё несколько ошибок. Смотрим на код этого файла. Вся проблема оказалась в квоте. На этой строчке в коде (Storage.php#757) вычисляется свободное место с учётом объёма архивных файлов. Что-то идёт не так при вычислении, хотя квота задана «неограничено». Для исправления ошибки в панели администрирования я задал «бесконечную, но числовую» квоту для каждого пользователя, например, 100TB.

Проблема 3

Проблема с синхронизацией файлов .htaccess – они просто не синхронизируются! Причём я был не одинок, на некоторых форумах задавали подобные вопросы. Однако готового решения я не встретил. Пришлось опять думать самому. В результате гугления, просмотра логов, анализа кода не придумал ничего лучше, как подправить файл движка nextcloud.
В файле /var/www/nextcloud/lib/private/Files/filesystem.php ищем следующую строку:

$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array('.htaccess'));

И приводим её к следующему виду:

$blacklist = \OC::$server->getConfig()->getSystemValue('blacklisted_files', array(''));


Защита для Nextcloud

Защитить наш сервис от подбора паролей к админке можно с помощью fail2ban. Для этого нужно описать характерное выражение, встречающееся в логах nextcloud при неудачной авторизации, по которому будет срабатывать соответствующий триггер.

Создаём файл:
# nano /etc/fail2ban/filter.d/nextcloud.conf

С нижеприведённым содержимым:

[Definition]
failregex={«reqId»:».*»,«remoteAddr»:».*»,«app»:«core»,«message»:«Login failed: ‘.*’ \(Remote IP: »\)»,«level»:2,«time»:».*»}
ignoreregex =

Открываем файл:
# nano /etc/fail2ban/jail.local

И в конец файла добавляем нижеприведённое:

# выявляем неудачные попытки ввода пароля к nextcloud
[nextcloud]
enabled = true
port = http,https
protocol = tcp
filter = nextcloud
logpath = /var/log/nextcloud.log

Перезагружаем сервис:
# service fail2ban restart

Проверяем наличие активного фильтра:
# fail2ban-client status nextcloud

Не забываем, что в соответствии с настройками fail2ban из предыдущей части при неудачном вводе пароля шесть раз подряд в течение 12 часов ваш IP заблокируется ни много ни мало на 30 дней. Я как-то потратил два вечера из-за ошибочного ввода пароля на одном из телефонов, пока не выяснил этот простой факт в логах системы.


Синхронизация с облаком смартфонов

Для синхронизации содержимого телефонов, работающих под Android, существует замечательное приложение FolderSync. Программа полностью оправдывает свою небольшую цену.

Для начала необходимо создать новую учётную запись, в которой в качестве адреса сервера указать https:// 192.168.0.3/nextcloud, ввести логин и пароль от предварительно созданной учётной записи и разрешить самоподписной сертификат. Нажимаем кнопку «Тест» и убеждаемся, что соединение с сервером в порядке.

Далее нужно создать задание. В задании указываем ранее созданную учётную запись и выбираем тип синхронизации – «На удалённую папку». Указываем удалённую папку (создать её можно прямо из приложения» и выбираем локальную папку для синхронизации. Расписание я установил в 2 часа ночи каждый день. В настройках синхронизации у меня было включено «Синхронизация подпапок» и «Синхронизация включенных папок», так же я выбрал опцию всегда заменять старые файлы и в случае конфликтов разрешил по умолчанию использовать локальный файл. В разделе «Соединения» я отключил все соединения кроме Wi-Fi, причём прописал SSID своей домашней Wi-Fi сети в раздел «Разрешённые WiFi SSID’ы» — приложение будет выполнять синхронизацию только в моей домашней сети и не пытаться искать сервер в других сетях. Остальные настройки я оставил по умолчанию. Здесь же можно добавить фильтрацию. Я создал новый фильтр «Имя папки содержит» и указал значение [nosync]. Таким образом, я могу исключить из синхронизации некоторые папки в указанной локальной папке, просто добавляя в конец их названия «[nosync]».

Данная настройка была произведена для таких локальных папок как DCIM, Download, Telegram, viber, WhatsApp. Плюс пара моих пользовательских папок объёмом по нескольку гигабайт. Раз в сутки происходит синхронизация содержимого этих папок с сервером, причём старые версии файлов на сервере не удаляются, а переименовываются и перемещаются в архив. Это позволяло мне быстро восстановить случайно удалённый файл или откатить изменения в каких-то других файлах.


Синхронизация с облаком персонального компьютера

Я не считаю себя настоящим программистом. Последние десять лет я программирую на таких языках программирования, которые применяются разве что при разработке процессоров или чипсетов. Ввиду того, что я уже как лет 15 ничего не делал на Си/Си++, но что-то автоматизировать на компьютере мне требовалось, я довольно активно применял скриптовые языки типа BAT/CMD или такой софт как Sign 0f Mistery или xStarter. Когда-то я узнал и попробовал что такое AutoIt и это стало новой эрой в моей автоматизации на ПК.

После того как я убедился в стабильности и надёжности системы синхронизации на смартфонах я подумал, что неплохо было бы синхронизировать данные на своём домашнем компьютере. У Nextcloud есть свой клиент для Windows и, естественно, он стал первым кандидатом для испытаний. Синхронизировать я собирался объём данных порядка терабайта, состоявший из сотен тысяч файлов разного размера. Данные были различны: музыка, картинки, документы, электронные книги, дистрибутивы, резервные копии сайтов и прочее и подобное. Всё это разумно было бы свести к синхронизации более критических данных, например, таких как документы, но мной овладел азарт и хотелось проверить сделанный сервис на прочность.

Спустя десяток часов после начала синхронизации, а по сути первой закачки контента на сервер, клиент запнулся о файл с длинным именем. В то время на сервере я еще использовал подключение внешнего хранилища через VMWare Shared Folders и мне пришлось перепробовать с десяток клиентов, а потом ставить простые эксперименты по ручному копированию файлов на сервер, чтобы понять, что проблема – на стороне сервера. Так, спустя неделю удачного запуска сервиса, пришлось откатываться на резервную виртуальную машину и отказаться от механизма VMWare Shared Folders, начиная всё сначала. В конце концов, я убрал это узкое место на стороне сервера, протестировал надёжность решения неделей синхронизации смартфонов и решил вновь вернуться к домашнему компьютеру. На этот раз клиент не споткнулся о злополучный файл и я уже было возрадовался, однако спустя полсуток синхронизации мелких файлов клиент опять подвис. Теперь выяснилось, что слишком длинный путь именно на стороне домашнего компьютера и клиент Nextcloud не может его корректно обработать. К сожалению, с родным клиентом Nextcloud работы не получилось, да и информативность его была не совсем высока, поэтому от него пришлось отказаться.

Какое-то время я потратил на то, чтобы найти удобную программу для синхронизации, поддерживающее управление через командную строку. Мне хотелось на каждую крупную папку на компьютере сделать своё задание и запускать их в пакетном режиме. Ранее у меня уже был сделан и отработан набор BAT файлов для синхронизации, используя сценарии и управление FreeFileSync через командную строку. Проблема длинных путей или имён файлов решалась заданием локальных папок вида «\\?\D:\Info», т.е. по сути обращением к локальной папке как к сетевой. Однако, что такое webdav FreeFileSync не знает. Полных аналогов FolderSync для Windows, к сожалению, не нашлось, но не раз на форумах вместо неё рекомендовали GoodSync и, после кастинга десятка других программ, я решил попробовать его. К сожалению, GoodSync стоит на порядок дороже, но разовая трата 15$ ради сохранности своих драгоценных данных, в принципе, посильная трата. Программа имеет тестовый режим, поэтому сначала можно убедиться в её работоспособности и стабильности.

GoodSync оказался довольно дружелюбным софтом. Имеется специальная портабельная версия, которая называется GoodSync2Go. Вот она меня и заинтересовала. При установке нужно выбрать букву диска и программа устанавливается на него в папку GoodSync. Я создал папку Sync в корневом каталоге диска, допустим D, и переместил туда созданную папку GoodSync со всем содержимым.

[ Данный текст написан специально для сайта geektimes.ru автором AlexanderS.
Ссылка на источник необязательна, но его упоминание крайне желательно! ]

После установки в программе нужно создать задания: указывается локальная папка и удалённая папка для синхронизации. В параметрах задания я выбрал синхронизацию слева направо с выбором опций «Синхронное удаление» и «Сохранять предыдущие версии удалённых/заменённых файлов». В настройках левой стороны я выбрал «Безопасное копирование» и «Не создавать папку _gsdata_», правой стороны — «Безопасное копирование» и «Быстрый преданализ по временным меткам». Таким образом, создаются задания на каждую требуемую папку. Допустим так я настроил задание на папку Info и назвал его «bck_Info».
Далее в папке D:\Sync создаётся файл bck_Info.bat со следующим содержимым:

@set dir=%~dp0
@%dir%GoodSync\GoodSync2Go-v10.exe /miniwin /exit sync "%~n0"

Это скриптовый язык BAT. В первой строчке кода в переменную устанавливается текущий путь для запущенного скрипта. Вторая строчка запускает по этому пути из папки GoodSync файл GoodSync2Go-v10.exe, в котором должно выполнится задание с названием имени этого файла (bck_Info), окно выполнения задания минимизируется, по завершению задания программа должна автоматически закрыться. Я могу скопировать этот скрипт несколько раз, каждый раз меняя только его название на имя ранее созданного задания в GoodSync. Таким образом, просто щёлкая кнопкой Enter по BAT файлу я могу запускать синхронизацию нужных мне папок индивидуально.

Для добавления нового задания в FreeFileSync я мог просто скопировать xml файл сценария и вручную поправить его, т.е. запуска графической оболочки программы не требовалось вообще. В GoodSync же все задания прописываются в файле D:\Sync\GoodSync\GoodSync\Profile\jobs.tic и для добавления нового задания нужно будет отрыть программу и создать его, т.к. править этот файл несколько проблематично и неизвестно к чему это может привести.
Для синхронизации всех папок теперь можно написать простой скрипт bck_all.bat:

@set dir=%~dp0

call %dir%bck_Info.bat
call %dir%bck_Info2.bat
call %dir%bck_Info3.bat
call %dir%bck_Info4.bat

Каждая строчка скрипта просто вызывает выполнение отдельного скрипта, которое запускает синхронизацию.

Это всё очень хорошо и удобно работает, однако нет никакого контроля ошибок при синхронизации. Например, если сервер не включен, то все задания стремительно выполнятся, а я, вернувшись через час, буду думать, что синхронизация уже завершена. В то же время, логи всех заданий создаются по пути D:\Sync\GoodSync\GoodSync\Profile\*.log. Достаточно просто просмотреть лог каждой синхронизации на наличие слова «ОШИБКА» – почему-то именно так в логе сообщается о сбоях при синхронизации. Поэтому решено было написать небольшую программку для анализа этих логов после всех синхронизаций, которую запускать автоматически после выполнения синхронизаций всех папок. Программка получила гордое название log_analayser и написана на полускриптовом языке AutoIt. Если кого-то заинтересует, то скачать её полную версию можно на официальном сайте AutoIt, которая содержит нужные библиотеки, компилятор и SciTE – кроссплатформенный редактор для кода из которого можно и скомпилировать программу.

Какое время я потратил на разработку и отладку кода, в результате получился файл log_analayser.au3 со следующим содержимым:

; LOG Analyser 1.0
; Программа предназначена для анализа текстовых лог-файлов

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Field=ProductName|LOG Analyser
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Field=OriginalFilename|log_analyser.exe
#AutoIt3Wrapper_Res_Comment=Программа предназначена для анализа текстовых лог-файлов
#AutoIt3Wrapper_Res_Description=Анализ лог-файлов
;****
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Res_ProductVersion=1.0
#AutoIt3Wrapper_Compile_Both=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

;AutoItSetOption ("WinTitleMatchMode", 2) ; сопоставление заголовка окна с произвольным фрагментом
;#NoTrayIcon ; скрыть иконку из трея во время выполнения программы

If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then
	MsgBox(48, @ScriptName, "Позволено запускать только одну копию программы!");
	;Раскоментируйте следующую строчку если нужно активировать окно вашей программы при повторном её запуске
    ;WinActivate('Имя вашей программы')
    Exit
EndIf

AutoItWinSetTitle(@ScriptName)

#include <Array.au3>
#include <_FileDirList.au3>




; настройки
Local $msg_title = "LOG Analyser 1.0"
Local $path = @ScriptDir
Local $soft_open_log = "notepad.exe"





Local $path, $dir_mode, $word, $file_analyse_name, $file_analyse_ext, $log_path, $log_msg_on
Local $file_log, $word_detect, $file_analyse, $cnt_files, $i



;проверка и загрузка параметров
if ($CmdLine[0] < 6) then
  MsgBox(0x10, $msg_title, "Отсутствуют или недостаточно параметров!" & @CRLF & @CRLF & "Работа программы прекращена")
  Exit
else
  if (StringCompare($CmdLine[1], "file") = 0) then
    $dir_mode = 0
  elseif (StringCompare($CmdLine[1], "dir") = 0) then
    $dir_mode = 1
  else
    MsgBox(0x10, $msg_title, "Первый параметр должен принимать значения 'file' или 'dir'!" & @CRLF & @CRLF & "Работа программы прекращена")
    Exit
  endif

  $word = $CmdLine[2]

  if ($dir_mode = 0) then
    $file_analyse_name = $CmdLine[3]
  else
    $dir_analyse = $CmdLine[3]
  endif

  $file_analyse_ext = $CmdLine[4]
  $log_path = $CmdLine[5]

  if (StringCompare($CmdLine[6], "err_msg_on") = 0) then
    $log_msg_on = 1
  elseif (StringCompare($CmdLine[6], "err_msg_off") = 0) then
    $log_msg_on = 0
  else
    MsgBox(0x10, $msg_title, "Шестой параметр должен принимать значения 'log_msg_on' или 'log_msg_off'!" & @CRLF & @CRLF & "Работа программы прекращена")
    Exit
  endif

endIf



; инициализация переменных
$file_log = $log_path & "\" & "log_analyser" & "-" & @YEAR & "-" & @MON & "-" & @MDAY & "-" & @HOUR & "-" & @MIN & "-" & @SEC & ".log"
$word_detect = 0


; основной код программы
if ($dir_mode = 0) then

  $file_analyse = $file_analyse_name & "." & $file_analyse_ext
  if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then
    $word_detect = 1
  endif

else

  ; сканирование файлов для анализа
  $dir_arr = _FileDirList($dir_analyse, "*."&$file_analyse_ext, 1, 1, 0)
  ;_ArrayDisplay($dir_arr)

  ; проверка после сканирования - проверка на наличие файлов для анализа
  if ($dir_arr = 0) then
    MsgBox(0x10, $msg_title, "Неверный путь или не обнаружены файлы для анализа!" & @CRLF & @CRLF & "Работа программы прекращена")
    Exit
  endif

  $cnt_files = $dir_arr[0]

  ; перебор анализируемых файлов
  $i = 0
  While $i <> $cnt_files
    $i = $i + 1
    $file_analyse = $dir_arr[$i]
    if (_file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect) = 1) then
      $word_detect = 1
    endif
  WEnd

endif



; обработка результатов анализа
if ($word_detect = 1) and ($log_msg_on = 1) then
  if (MsgBox (0x41034, $msg_title, "Обнаружены ошибки!" & @CRLF & "Все строки с ошибками записаны в файл: " & $file_log  & @CRLF & @CRLF & "Открыть файл с ошибками?")) = 6 then
    ShellExecuteWait($soft_open_log, $file_log)
  endif
endif

Exit





; функция выполняет построчный поиск слова в файле и возвращает переменную информирующую о наличии слова хотя бы в одной строке
; все обнаруженные строки, содержащие указанное слово, пишутся в файл лога
Func _file_analyser($file_analyse, $msg_title, $word, $file_log, $word_detect)

  Local $file1, $file2, $file_line, $write_once

  $word_detect = 0
  $write_once = 0

  $file1 = FileOpen($file_analyse, 0)

  ; проверка наличия анализируемого файла
  If $file1 = -1 Then
    FileClose($file1)
    MsgBox(0x10, $msg_title, "Отсутствует файл для анализа!" & @CRLF & @CRLF & "Работа программы прекращена")
    Exit
  EndIf

  ; построчный поиск слова в анализируемом файле
  While 1
    $file_line = FileReadLine($file1)
    If @error = -1 Then ExitLoop

    if (StringInStr($file_line, $word) <> 0) then
      $word_detect = 1

      ; проверка наличия файла для лога и его создание в случае отсутствия
      if (FileExists($file_log) = 0) then
        $file2 = FileOpen($file_log, 1)
        FileClose($file2)
      endif

      ; однакоратная запись в файл имени анализируемого файла
      if ($write_once = 0) then
        $write_once = 1
        $file2 = FileOpen($file_log, 1)
        FileWriteLine($file2, "Анализ файла: " & $file_analyse)
        FileClose($file2)
      endif

      ; вывод в лог строки с ошибкой
      $file2 = FileOpen($file_log, 1)
      FileWriteLine($file2, $file_line)
      FileClose($file2)
    endif
  WEnd

  ; если были записи в файл, то отделяем их пустой строкой от следующего массива записей
  if ($word_detect = 1) then
    $file2 = FileOpen($file_log, 1)
    FileWriteLine($file2, @CRLF)
    FileClose($file2)
  endif

  FileClose($file1)

	Return $word_detect
EndFunc

После набора кода нажимаем кнопку F7 в редакторе SciTE и получаем на выходе файл log_analayser.exe.

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

Программа может работать в двух режимах:

— анализ конкретного файла
— анализ папки, содержащей файлы для анализа (анализируются так же все вложенные подпапки)

При консольном вызове необходимо задать шесть параметров для программы:

1 — режим работы [file = анализ файла; dir = анализ папки, содержащей файлы]
2 — ключевое слово для поиска
3 — имя файла или полного пути к папке
4 — расширения файла или файлов для анализа в папке
5 — полный путь к папке, где будет расположен лог программы
6 — отображение окна после анализа всех файлов в случае нахождения заданного слова [err_msg_on = отображать; err_msg_off = не отображать]

Таким образом, получился новый скрипт bck_auto.bat:

@echo Start Backup
@set dir=%~dp0
call %dir%bck_all.bat
log_analyser.exe dir ОШИБКА %dir%GoodSync\Profile log %dir%LOG err_msg_on
exit

Скрипт запускает файл, из которого индивидуально друг за другом вызываются задания на синхронизацию всех нужных папок, а затем вызывается анализатор логов синхронизаций, по завершении работы которого в случае ошибок показывается сообщение с предложением просмотреть строки логов, где обнаружены эти ошибки и можно понять с каким заданием случились проблемы. Эти строки пишутся в отдельный лог-файл в папке D:\Sync\LOG.
И тут меня постигла жуткая неудача. Анализатор логов не работал. Нет, он прекрасно работал на тестовых файлах, но упорно не хотел видеть ошибки в логах. Я долго не мог понять в чём причина, пока не выяснил одну жуткую вещь: мало того, что в англоязычном логе сбой выводится единственным русскоязычным словом «ОШИБКА», так ещё и кодировка этой кириллицы – Macintosh! Зачем так сделали программисты из Siber Systems я не знаю, всего скорее это результат какого-то ужасного костыля внутри софта. Ну а кто сказал, что программирование должно быть скучным?

Ничего не оставалось как подпереть один костыль другим и в результате появилась работающая конструкция:

@echo Start Backup
@set dir=%~dp0
call %dir%bck_all.bat
log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on
exit

Однако появилась следующая проблема: сам GoodSync не удаляет файлы логов, с каждым новым выполнением задания появлялись новые файлы. И если какая-то синхронизация завершилась с ошибкой, то наш анализатор всегда будет находить этот файл и бодро рапортовать об ошибке. Поэтому перед запуском синхронизаций решено было автоматически очищать папку D:\Sync от любых файлов с логами. Для этого создан элегантный скрипт clean_logs.bat:

@echo off

set dir=%~dp0

For /R %dir% %%i in (*.log) Do (
Del /q "%%i")

@echo on

Скрипт отключает вывод каких-либо сообщений, выясняет директорию запуска скрипта, сканирует все файлы (в том числе в подпапках) пока они не закончатся и удаляет все файлы с расширением log. По окончании работы вывод сообщений включается.
Скрипт bck_auto.bat преобразился:

@echo Start Backup
@set dir=%~dp0
@call clean_logs.bat
call %dir%bck_all.bat
log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_on
exit

Всё очень отлично работает, но ведь смысл в автоматизации рутинных действий. Почему бы нельзя просто выключить компьютер на ночь и пойти спать, а он путь сам синхронизирует кучу файлов, анализирует и выключается?

Доработаем наш скрипт bck_auto.bat:

@echo Start Backup & PCOFF
@set dir=%~dp0
start MonitorOnOff.exe 0
@call clean_logs.bat
call %dir%bck_all.bat
log_analyser.exe dir Ћ˜€ЃЉЂ %dir%GoodSync\Profile log %dir%LOG err_msg_off
shutdown /s /t 0
exit

В скрипте появилось две новых строчки. Приложение MonitorOnOff просто отключает монитор (чтобы он не освещал комнату, а вручную мне его отключать каждый вечер и включать каждое утро очень лень), а команда shutdown выключает компьютер. В log_analyser изменился параметр, отвечающий за показ сообщений при нахождении ошибки – ведь после синхронизации не нужно тормозить выполнение скрипта этим сообщением, а дать возможность ему выключить компьютер.

Программа MonitorOnOff так же написана на AutoIt.

; Monitor On Off 1.0
; Программа для включения/отключения монитора

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Field=ProductName|Monitor On Off
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Field=OriginalFilename|MonitorOnOff.exe
#AutoIt3Wrapper_Res_Comment=Программа для включения/отключения монитора
#AutoIt3Wrapper_Res_Description=Программа для включения/отключения монитора
;****
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Res_ProductVersion=1.0
#AutoIt3Wrapper_Compile_Both=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****


;AutoItSetOption ("WinTitleMatchMode", 2) ; сопоставление заголовка окна с произвольным фрагментом
;#NoTrayIcon ; скрыть иконку из трея во время выполнения программы

If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then
  MsgBox(48, @ScriptName, "Позволено запускать только одну копию программы!");
  ;Раскоментируйте следующую строчку если нужно активировать окно вашей программы при повторном её запуске
  ;WinActivate('Имя вашей программы')
  Exit
EndIf

AutoItWinSetTitle(@ScriptName)





HotKeySet("{F10}", "_Monitor_ON")
HotKeySet("{F11}", "_Monitor_OFF")
HotKeySet("{Esc}", "_Quit")





Global Const $lciWM_SYSCommand = 274
Global Const $lciSC_MonitorPower = 61808
Global Const $lciPower_Off = 2
Global Const $lciPower_On = -1

Global $MonitorIsOff = False



if ($CmdLine[0] <> 0) then
  _Monitor_OFF()
endif



While 1
  Sleep(10)
WEnd



Func _Monitor_ON()
  $MonitorIsOff = False
  Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

  DllCall('user32.dll', 'int', 'SendMessage', _
                                              'hwnd', $Progman_hwnd, _
                                              'int', $lciWM_SYSCommand, _
                                              'int', $lciSC_MonitorPower, _
                                              'int', $lciPower_On)
EndFunc



Func _Monitor_OFF()
  $MonitorIsOff = True
  Local $Progman_hwnd = WinGetHandle('[CLASS:Progman]')

  While $MonitorIsOff = True
    DllCall('user32.dll', 'int', 'SendMessage', _
                                                'hwnd', $Progman_hwnd, _
                                                'int', $lciWM_SYSCommand, _
                                                'int', $lciSC_MonitorPower, _
                                                'int', $lciPower_Off)
    _IdleWaitCommit(0)
    Sleep(20)
  WEnd
EndFunc



Func _IdleWaitCommit($idlesec)
  Local $iSave, $LastInputInfo = DllStructCreate ("uint;dword")
  DllStructSetData ($LastInputInfo, 1, DllStructGetSize ($LastInputInfo))
  DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))

  Do
    $iSave = DllStructGetData ($LastInputInfo, 2)
    Sleep(60)
    DllCall ("user32.dll", "int", "GetLastInputInfo", "ptr", DllStructGetPtr ($LastInputInfo))
  Until (DllStructGetData ($LastInputInfo, 2)-$iSave) > $idlesec Or $MonitorIsOff = False

  Return DllStructGetData ($LastInputInfo, 2)-$iSave
EndFunc



Func _Quit()
  _Monitor_ON()
  Exit
EndFunc

Запущенная программа управляется тремя клавишами: F10 включает монитор, F11 – отключает, а кнопка ESC завершает работу программы и выгружает её из памяти. При задании любого параметра при запуске программы запущенная программа сразу отключит экран.

Теперь всё было хорошо – перед сном я просто запускал bck_all.bat, вместо «Выключить компьютер» и уходил спать. Монитор не освещал всю комнату, синхронизация производилась автоматически и автоматически анализировалась её успешность. Утром надо было только посмотреть содержимое папки D:\Sync\GoodSync\LOG\ на предмет хоть каких-то файлов. Но и это тоже не дело – зачем тратить время если всё хорошо? Нужно сделать анализатор лога анализатора логов и повесить его в автозагрузку системы, чтобы он срабатывал на следующий день при загрузке компьютера и тревожил моё внимание только при сбоях синхронизации. Так появилась программа check_file_exist.

; Check File Exist 1.0
; Программа предназначена для проверки наличия указанного файла

#Region ;**** Directives created by AutoIt3Wrapper_GUI ****
#AutoIt3Wrapper_Res_Field=ProductName|Check File Exist
#AutoIt3Wrapper_Res_Fileversion=1.0.0.0
#AutoIt3Wrapper_Res_Field=OriginalFilename|check_file_exist.exe
#AutoIt3Wrapper_Res_Comment=Программа предназначена для проверки наличия указанного файла
#AutoIt3Wrapper_Res_Description=Провека существования файла
;****
#AutoIt3Wrapper_Res_Language=1049
#AutoIt3Wrapper_Res_ProductVersion=1.0
#AutoIt3Wrapper_Compile_Both=y
#EndRegion ;**** Directives created by AutoIt3Wrapper_GUI ****

;AutoItSetOption ("WinTitleMatchMode", 2) ; сопоставление заголовка окна с произвольным фрагментом
;#NoTrayIcon ; скрыть иконку из трея во время выполнения программы

If WinExists('[CLASS:AutoIt v3;TITLE:' & @ScriptName & ']') Then
	MsgBox(48, @ScriptName, "Позволено запускать только одну копию программы!");
	;Раскоментируйте следующую строчку если нужно активировать окно вашей программы при повторном её запуске
    ;WinActivate('Имя вашей программы')
    Exit
EndIf

AutoItWinSetTitle(@ScriptName)

#include <Array.au3>
#include <_FileDirList.au3>





; настройки
Local $msg_title = "Check File Exist 1.0"
Local $path = @ScriptDir
Local $soft_open_dir = "explorer.exe"





Local $path, $dir_analyse, $words, $msg_open



;проверка и загрузка параметров
if ($CmdLine[0] < 5) then
  MsgBox(0x10, $msg_title, "Отсутствуют или недостаточно параметров!" & @CRLF & @CRLF & "Работа программы прекращена")
  Exit
else
  $dir_analyse = $CmdLine[1]
  $file = $CmdLine[2]

  $words0 = $CmdLine[3]
  $words1 = $CmdLine[4]

  if (StringCompare($CmdLine[5], "msg_on") = 0) then
    $msg_open = 1
  elseif (StringCompare($CmdLine[5], "msg_off") = 0) then
    $msg_open = 0
  else
    MsgBox(0x10, $msg_title, "Пятый параметр должен принимать значения 'msg_on' или 'msg_off'!" & @CRLF & @CRLF & "Работа программы прекращена")
    Exit
  endif
endIf



; сканирование директории на наличие файлов
$dir_arr = _FileDirList($dir_analyse, "*"&$file&"*", 1, 0, 0)
;_ArrayDisplay($dir_arr)

; проверка наличия файла и действия
if ($dir_arr = 0) then
  if (StringCompare($words0, "0") <> 0) then
    if ($msg_open = 0) then
      MsgBox(0x41030, $msg_title, $words0)
    else
      if (MsgBox(0x41034, $msg_title, $words0 & @CRLF & @CRLF & "Открыть папку с не обнаруженными файлами?")) = 6 then
        ShellExecuteWait($soft_open_dir, $dir_analyse)
      endif
    endif
  endif
else
  if (StringCompare($words1, "0") <> 0) then
    if ($msg_open = 0) then
      MsgBox(0x41030, $msg_title, $words1)
    else
      if (MsgBox(0x41034, $msg_title, $words1 & @CRLF & @CRLF & "Открыть папку с обнаруженными файлами?")) = 6 then
        ShellExecuteWait($soft_open_dir, $dir_analyse)
      endif
    endif
  endif
endif





Exit

По сути эта программа – немного урезанный функционал log_analyser. Программа анализирует указанную папку (без учёта подпапок) на наличие файлов и именами хотя бы частично совпадающими с указанным словом для поиска и выводит сообщение о результате проверки.

Параметры программы:

1 — полный путь к папке (без символа слеша — /)
2 — ключевое слово для поиска в именах файлов, либо полное название файла
3 — текстовая строка, выводимая при ненахождении файл, если =0 — не выводить сообщение
4 — текстовая строка, выводимая при нахождении файла, если =0 — не выводить сообщение
5 — вывод сообщения: msg_off — выводится только сообщение о наличии/отсутствии файлов, msg_on — в выведенном окне предлагается так же открыть папку, в которой обнаружены или необнаружены файлы

Теперь, для этой программы я создал скрипт Check_LOG_from_log_analyser.bat, ссылку которого разместил в обычной автозагрузке Windows:

@set dir=%~dp0LOG
start check_file_exist.exe %dir% .log 0 "Во время последней синхронизации были проблемы!" msg_on
exit

Таким образом, в финале мы получили полностью автономное решение, которое не зависит от местонахождения папки Sync и корректно отработает из любого места нашего компьютера. Решение не только работоспособно, но и стабильно – на Windows 7 х64 данный комплект скриптов отработал год и абсолютно никаких проблем с ним не возникло.

Возможно сейчас всё это кажется несколько монстрообразным, однако ничего сложно в этом нет. Если внимательно присмотреться к коду AutoIt, то базовой конструкцией является обычные циклы if-then-else-end, однотипные для любого языка программирования, в которые встроены некоторые повторяющиеся операторы и функции AutoIt, которые изучаются буквально за пару вечеров. Скриптовый язык BAT можно даже не учить, так как большинство решений типовые и уже давно описаны в интернете. Уметь пользоваться программированием не только интересно, но может быть и весьма полезно.

Ода коду от Dark Dragon


Послесловие

Если честно, я предполагал, но сам не ожидал такого объёма статей, на которые пришлось потратить до полусотни часов. Как правило, в интернете установку своего облака сводят к изречениям типа: «Да, там надо-то выполнить несколько команд». Это правда – установка тривиальная. Когда ты знаешь какие команды вводить в консоль и что они значат. Когда ты понимаешь суть маршрутизации в сети. Когда у тебя уже есть работающий сервер и когда ты понимаешь, как в него добавить хост. Когда ты знаешь, как установить сайт. То есть, для применения этих нескольких команд нужно иметь определённый багаж знаний и опыта. Цель этих трёх статей – попытка создать такой багаж, собрав необходимую достаточную информацию в одном месте и пояснить как ей правильно пользоваться. Я искренне надеюсь, что этот цикл статей поможет кому-то сделать свои первые осознанные шаги в мир свободного программного обеспечения.


Вернуться в начало, к оглавлению.


История создания домашнего облака. Часть 3. Создание персонального облака — установка и настройка Nextcloud.
Версия текста: 1.2.2.
Дата первой публикации: 08.02.2018.
Дата последней правки: 29.12.2021.

Лог обновлений

1.2.2 [29-12-2021]
Правка ссылок оглавления.

1.2.1 [15-01-2020]
Обновление оглавления.

1.2.0 [08-02-2018]
Коррекция текста.

1.1.0 [08-02-2018]
Коррекция текста.

1.0.0 [08-02-2018]
Первая версия.
Описывается установка и настройка Nextcloud 11.0.2 в виртуальной машине VMWare, конфигурация сетевого окружения VMWare и освещаются некоторые моменты настройки, проявившиеся в процессе эксплуатации Nextcloud.


Информация для администрации ресурса (подозрение на баг)

Если в какой-то тег (например, code или blockquote) в вышеприведённом тексте обернуть следующую конструкцию:

[Definition]
failregex={«reqId»:».*»,«remoteAddr»:».*»,«app»:«core»,«message»:«Login failed: ‘.*’ \(Remote IP: »\)»,«level»:2,«time»:».*»}
ignoreregex =

То закрывающий тег фильтруется и оформление применяется до конца статьи! Подобный эффект проявляется именно в этом тексте, т.к. отдельно воспроизвести эффект мне не удалось. Парную корректность тегов (открыто/закрыто) проверил — вроде бы всё нормально. Методика повторения:
— создать черновик
— скопировать исходное форматирование этой статьи и разместить в черновике
— в тексте, в разделе «Защита для Nextcloud» обернуть вышеуказанную конструкцию, например, цитатой
— эффект проявляется, в цитату попадёт весь текст до конца статьи


Об этом не все знают, но первоначально Nextcloud был частью проекта OwnCloud. За небольшой промежуток времени NC вырос и в 2016 году отделился. С того момента Nextcloud стал самостоятельным проектом с открытым исходным кодом. Благодаря этому любой заинтересованный пользователь может создать свое личное облачное хранилище, самостоятельно разместить ПО и собрать индивидуальное решение.

После установки Nextcloud в вашем распоряжении будет рабочее пространство с почтовыми программами, схожими с Gmail, различными документами (вроде Google Docs) и возможностью делиться файлами (как это позволяет Dropbox). Также календарь с заметками, планировщики задач и другие полезные вещи, которые помогают структурировать информацию.

Установка И Использование Nextcloud В Ubuntu 20.04 (1)

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

Способы установки NC:

  1. Через систему управления контейнерами Docker .
  2. Через пакет приложений snap. Он поддерживают любые дистрибутивы Linux. Мы будем использовать дистрибутив Ubuntu 20.04.
  3. Ручная установка на сервер.

Второй метод был выбран по нескольким причинам. Во-первых, он наиболее эффективный, доступный и быстрый. Во-вторых, существенную роль сыграли преимущества Snap-пакетов. Они полностью укомплектованы, содержат в себе все зависимости и автоматически обновляются. Чтобы все заработало, достаточно утилиты (менеджер пакетов snapd). Установить этот пакет можно прямо из Snap Store. Единственный минус этой системы в том, что пакет занимает много места на диске.

Мы будем использовать облачный сервер с Ubuntu.

Пошаговая инструкция установки NextCloud на Ubuntu 20.04

Ниже мы расписали все этапы установки, последовательность которых необходимо соблюдать:

  1.     Инсталлируем NextCloud в Ubuntu.
  2.     Создаем профиль (учетную запись пользователя).
  3.     Настраиваем доверенные домены.
  4.     Защищаем веб-интерфейс одним из методов (зависит от наличия доменного имени).
  5.     Тестируем.

Первый шаг

Для загрузки Nextcloud snap запустите команду с использованием утилиты sudo. Это позволит запускать программы без привилегий пользователя root и получить права администратора. 

sudo snap install nextcloud

Проверяем установку приложения:

snap changes nextcloud

Сообщение подтверждает, что установка NextCloud осуществилась:

ID Status Spawn Ready
Summary
4 Done today at 10:30 UTC today at 10:30 UTC
Install "nextcloud" snap

Такое сообщение должно появиться и у вас.

vds

Второй шаг

После установки NextCloud создаем аккаунт с логином и паролем.

sudo nextcloud.manual-install username password

Следом приходит сообщение, что запись настроена правильно. Теперь все права для работы с базой данных переданы пользователю username.

Nextcloud was successfully installed

Третий шаг

Переходим к настройке доменного имени. Так NC будет воспринимать HTTP-запросы, которые поступают не только сервера localhost. Допустим, сервер доступен по адресу 192.168.0.15, но мы хотим, чтобы он был доступен по адресу «mycloud.com». Для этого мы изменяем запись trusted_domains в файле config.php. По умолчанию адрес домена в NextCloud дополняется файлом с расширением «index.php».

Проверим, какие настройки у нас есть сейчас:

sudo nextcloud.occ config:system:get trusted_domains

Вывод:

localhost

Из сообщения видим, что пока массив trusted_domains содержит только localhost. Попробуем добавить еще запись в массив, увеличив номер индекса на один и изменив значение value. Для этого скопируйте и вставьте в свою командную строку команду:

sudo nextcloud.occ config:system:set trusted_domains 1 --value=mycloud.com

Вывод:

System config value trusted_domains => 1 set to string mycloud.com

Проверяем, сколько значений содержит массив сейчас:

sudo nextcloud.occ config:system:get trusted_domains

Результат (в нашем случае должно быть два домена):

localhost
mycloud.com

Используя данный алгоритм, можно добавлять доверенные домены и IP-адреса. Следующим шагом необходимо защитить веб-интерфейс. Порт 80 предназначен для сайтов с незашифрованным HTTP-трафиком, а 443 используется для сайтов с защищенным соединением. Как защитить свои данные, вы узнаете ниже.

Четвертый шаг

Чтобы между браузером и сервером (между клиентом и сервером) обеспечить безопасное соединение, необходимо произвести настройку SSL. При использовании SSL-сертификатов HTTPS заменяет HTTP в URL-адресе. SSL-сертификат информируют пользователей сайта о том, что соединение защищено, и сайту можно доверять. Подробнее об SSL мы писали в статье «Что такое SSL-сертификат и для чего он нужен».

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

Первый — когда серверу присвоено доменное имя. В этом случае рекомендуем пройти бесплатную сертификацию SSL от Let’s Encrypt. Ниже вы найдете подробную инструкцию как это сделать. Во втором варианте есть возможность произвести настройку сертификата с собственной подписью. Чем они отличаются друг от друга? Интернет-браузеры не доверяют самоподписанному сертификату по умолчанию, и при подключении внешнего посетителя выдает сообщение: «Сертификат безопасности не является доверенным!».

Сертификация от Let’s Encrypt

Срок действия сертификата составляет 90 дней, но по истечении этого промежутка времени он автоматически обновляется. Переходим к настройке.

Открываем порты брэндмауэра:

sudo ufw allow 80,443/tcp

Затем запрашиваем сертификат:

sudo nextcloud.enable-https lets-encrypt

И подтверждаем соответствие своего сервера условиям для запроса сертификата. В конце этого сообщения вопрос. Чтобы продолжить, вводим «Y»:

In order for Let's Encrypt to verify that you actually
own the domain(s)
for which you're requesting a certificate,
there are a number of requirements of which you need to be aware:

 1. In order to register with the Let's Encrypt ACME server, you must agree to the currently-in-effect Subscriber Agreement located here: https://letsencrypt.org/repository/ By continuing to use this tool you agree to these terms. Please cancel now if otherwise.
2. You must have the domain name(s) for which you want certificates pointing at the external IP address of this machine.
3. Both ports 80 and 443 on the external IP address of this machine must point to this machine (e.g. port forwarding might need to be setup on your router).

Have you met these requirements? (y/n)

В следующей строке указываем email, который потребуется для важных уведомлений.

Please enter an email address (for urgent notices or key recovery):

После чего, чтобы завершить, необходимо ввести само доменное имя.

Please enter your domain name(s) (space-separated): mycloud.com

Если все команды заданы верно, то сервер запросит SSL-сертификат и перезапустит веб-сервер Apache для NextCloud.

Attempting to obtain certificates... done Restarting apache... done

Дальше можно выполнять вход в собственное облачное хранилище.

Самоподписанный сертификат SSL

Такой способ шифрует данные, но не подтверждает домен.

Для создания сертификата с собственной подписью запустите команду:

sudo nextcloud.enable-https self-signed

Сообщение об активации сертификата:

Generating key and self-signed certificate... done Restarting apache... done

Чтобы войти в NC, открываем веб-порты брандмауэра:

sudo ufw allow 80,443/tcp

Пятый шаг

Этапы установки и настройки пройдены. Пора попробовать зайти на сервер. Для этого достаточно ввести в поисковую строку браузера доменное имя или IP-адрес. Мы попадем на главную страницу, где требуется ввод логина и пароля. Если веб-интерфейс защищен самоподписанным сертификатом, то первоначально появиться окошко с предупреждением о небезопасном подключении. Проигнорируйте данное сообщение. При наличии заверенного сертификата сразу открывается окно с приветствием. Закрыв это, сразу можно приступать к работе с файлами.

Заключение

Мы рассмотрели процесс установки Nextcloud на сервер с Ubuntu 20.04. После выполнения всех описанных шагов можно переходить к работе, настривать синхронизацию и обмениваться файлами. Узнать еще больше про облачные сервисы можно в блоге Timeweb Cloud.

Кстати, в официальном канале Timeweb Cloud собрали комьюнити из специалистов, которые говорят про IT-тренды, делятся полезными инструкциями и даже приглашают к себе работать. 

Хотите создать собственное облако с помощью Nextcloud? В этой статье мы объясним, как это сделать.

Эта инструкция – часть гайда по настройке собственного облачного хранилища на основе Raspberry Pi, однако вы также сможете воспользоваться инструкциями, чтобы установить Nextcloud на облачные и серверные платформы SIM-Networks. Хранилище на базе Raspberry Pi станет интересным проектом для домашнего использования, однако для внедрения Nextcloud в корпоративной среде мы рекомендуем рассмотреть аренду полноценной IT-инфраструктуры.

Nextcloud – это дочерняя компания Owncloud. Если хотите узнать разницу между Owncloud и Nextcloud, прочтите нашу статью об этом.

Требования к установке

Для установки Nextcloud вам понадобится веб-сервер с поддержкой PHP и MySQL. Если вы следовали нашему руководству по Raspberry Pi, все требования уже соблюдены. Если нет, обратите внимание, что в руководстве значится следующее: /var/www/ является каталогом содержимого, а сертификат SSL находится в /var/www/ssl, включая файл dhparam.pem (см. инструкции).

Подключитесь к своему серверу, чтобы выполнить следующие команды.

1. Настройка сервера для Nextcloud

Сначала вам нужно настроить SSL-сервер в Nginx. В содержимом файла по ссылке замените ||HOST|| на свой хост:

https://www.sim-networks.com/user/assets/getnginxconfig_nextcloud.txt

и используйте его содержимое в качестве настроек сервера (следующая команда открывает содержимое указанного файла):

sudo nano /etc/nginx/sites-enabled/default

Важно: даже если вы не следовали нашим инструкциям по Raspberry Pi, эта команда должна работать и на других установках Nginx. Однако вам необходимо убедиться, что файлы /var/www/ssl/cloudssl.crt и /var/www/ssl/cloudssl.key и /var/www/ssl/dhparam.pem существуют и являются файлами сертификации для вашего SSL-сертификата.

Если вы используете Apache, вручную создайте запись Apache vHost.

После настройки перезапустите веб-сервер, в нашем случае Nginx:

sudo service nginx restart

2. Загрузка последней версии Nextcloud

Сначала нам нужно скачать последнюю версию Nextcloud. Перейдите на официальную страницу загрузки. В разделе «Nextcloud Server» в категории «Archives» вы можете скачать серверную версию, нажав «Get ZIP File».

3. Создание SFTP-соединения

Теперь подключитесь к своему облачному серверу через (S)FTP. Например, загрузите клиент Filezilla (скачать тут), чтобы установить FTP-соединение.

Скриншот из Filezilla - соединение SFTP

Затем введите соответствующую информацию о сервере.

Например, локальный IP-адрес вашего Raspberry Pi может выглядеть так: 192.168.178.43. Если вы не используете Raspberry Pi, введите вместо этого свой FTP-хост, например, myftp.myhomepage.com.

Используйте «pi» или выбранное вами имя пользователя в качестве пользователя (Username). Затем в следующем поле введите выбранный вами пароль (Password).

Установите порт на 22.

Подключитесь к серверу.

В правой части Filezilla вы теперь увидите папки на сервере. Перейдите в /var/www/cloud.

4. Загрузка установочных файлов

Все, что осталось сделать, это загрузить установочные файлы Nextcloud на свой сервер.

Перейдите к месту загрузки на вашем компьютере (см. 2.). Возможно, сначала вам придется разархивировать файлы в проводнике Windows.

Теперь выделите все файлы в папке Nextcloud, отметив их мышкой (или каждый раз [Ctrl] + щелчок мышью). Вы можете перетащить файлы вправо или щелкнуть правой кнопкой мыши и выбрать «Upload», чтобы загрузить файлы.

Важно: нельзя загружать саму папку Nextcloud, только файлы из этой папки!

Загрузка может занять некоторое время. В нижней части Filezilla можно увидеть, сколько времени займет этот процесс.

Затем снова установите разрешения (при необходимости отрегулируйте, если вы не используете Raspberry Pi):


sudo chown -R www-data:www-data /var/www/cloud && sudo chmod -R 775 /var/www/cloud

5. Установка Nextcloud

Все файлы загружены? Откройте настройку Nextcloud в своем браузере, используя адрес сервера (например, yourhost.dyndns.com). Появится окно установки (как на картинке):

Скриншот - настройка Nextcloud через браузер

Если вы использовали самозаверяющийся сертификат (как в нашем руководстве по Raspberry Pi) и получили предупреждение, добавьте правило исключения безопасности (подробнее тут).

Если появится окно инсталляции, можно продолжать установку.

Если вы не видите все поля, нажмите «Storage & Database».

Убедитесь, что каталог данных правильный. Если вы следовали нашим инструкциям по Raspberry Pi, путь будет таким: /var/www/cloud/data.

Nextcloud также необходимо будет указать правильную базу данных MySQL. Укажите учетные данные MySQL, которые вы установили ранее (для Raspberry Pi: не учетные данные root, а имя пользователя и пароль MySQL). Обычно вы можете установить хост «localhost», как предлагает Nextcloud.

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

Затем нажмите «Complete Installation». Настройка облака завершена!

Если у вас возникли какие-либо проблемы с Nextcloud, посетите наш раздел FAQ, официальную документацию Nextcloud или форум Nextcloud.

6. Настройка клиентов Nextcloud

Для Nextcloud в настоящее время вы можете использовать клиентов Nextcloud и Owncloud. Обзор клиентов Owncloud см. в разделе 6. руководства по Owncloud.

Для синхронизации настольных устройств (например, ПК) доступны клиенты для MacOS, Linux и Windows (перейдите по ссылке и выберите «Install Desktop Clients»).

Вы можете загрузить приложение Nextcloud для Android из магазина Google Play. Также доступно приложение для iOS.

Каждый раз вводите учетные данные своего облака, то есть учетные данные администратора, и URL-адрес вашего сервера (например, yourhost.dyndns.com) для доступа к вашим облачным данным.

7. Обновление для Nextcloud (необходимо будет позже)

Интерфейс Nextcloud уведомит вас, когда станет доступна новая версия Nextcloud. Обновления можно установить с помощью внутреннего установщика вашего Nextcloud. Для этого следуйте инструкциям в интерфейсе Nextcloud.

Кроме того, вы можете установить обновление вручную:

  1. Загрузите последнюю версию сервера с сайта Nextcloud и разархивируйте файлы в каталоге на своем ПК.
  2. Подключитесь к облачному серверу через Filezilla (см. 3. Установите соединение SFTP).
  3. Перейдите в свой облачный каталог, обычно /var/www/cloud.
  4. Создайте резервную копию, выбрав все файлы на стороне сервера, щелкнув правой кнопкой мыши и «Download» в любую папку на вашем ПК.
  5. Выберите все файлы и папки на стороне сервера кроме «config» и «data» (при необходимости исключить их с помощью [Ctrl]+клик). Удалите выбранные файлы и папки, используя клавишу [Delete] на клавиатуре.
  6. Теперь перейдите в Filezilla слева к папке, в которой вы сохранили новые файлы Nextcloud (см. пункт 1). Выберите все файлы и папки (из папки «nextcloud», а не саму папку «nextcloud»!), кроме «config» и «data», и загрузите их на сервер.
  7. Перейдите в веб-интерфейс nextcloud и следуйте инструкциям. Если возникли проблемы, сбросьте права доступа к файлам, как описано выше.

Готово: ваш Nextcloud запущен и работает

Поздравляем, вы успешно настроили Nextcloud! Теперь вы можете легко синхронизировать файлы с помощью дочернего продукта Owncloud и пользоваться комплексным и стабильным облачным ПО.

Наслаждайтесь новым Nextcloud!

Автор

Illia Chernikov

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

Эта статья была полезной?

Также читайте

Previous

Next

Понравилась статья? Поделить с друзьями:
0 0 голоса
Рейтинг статьи
Подписаться
Уведомить о
guest

0 комментариев
Старые
Новые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии
  • Xiaomi перкуссионный массажер инструкция
  • Кромецил капли в глаза инструкция
  • Ибупрофен детский таблетки инструкция по применению детям дозировка
  • Ремантадин инструкция по применению побочные действия
  • Самовыравнивающиеся полы своими руками пошаговая инструкция по применению видео