image


Кража телефона простимулировала задуматься над резервным копированием данных на телефоне. Вторая причина — на старом телефоне, к которому вернулся, накопитель всего на 64 ГБ, часть емкости уже занята системной информацией. Фотографии и видео быстро заполняют весь накопитель.

Ручное перекладывание по USB-кабелю на компьютер как решение не рассматривалось. FTP и CIFS/NFS — несовременно. Выбрал ownCloud.

  • Есть бесплатная версия от сообщества.
  • Есть репозитории под Ubuntu, есть собственный платный (сейчас не очень актуально) и
    сторонние бесплатные клиенты.
  • Вся информация лежит на вашем сервере/хранилище.
  • Есть инструкции, как настраивать на русском и на английском
  • Есть веб-интерфейс для настройки и для просмотра сохраненных файлов
  • Есть поддержка нескольких пользователей. Можно сделать хранилища для других жителей квартиры. Ваши данные не будут путаться с их. Каждый будет иметь доступ только к своим данным. Ну не считая админа сервера :)

Есть два пути (а может и больше) установки и настройки ownCloud. Простой — использовать Docker и готовые контейнеры. Мне этот путь не нравится. Когда настроено не тобой, то не понятно, как чинить, если что-то пошло не так. Надо думать о сохранении настроек вне контейнеров и подгрузка их после обновления. Путь установки непосредственно на сервер длиннее, зато надежнее. Попутно получаешь базовые навыки по настройке не только самого ownCloud, но также Apache и MariaDB.

Краткий план установки такой:

  • Установка необходимых пакетов
  • Настройка MariaDB
  • Настройка Apache
  • Загрузка и установка ownCloud
  • Выбор места на сервере для хранения файлов
  • Настройка ownCloud
  • Поиск и исправление ошибок собственных и из используемых инструкций

За основу я взял инструкции с сайта проекта. С ними не всё гладко. Есть Detailed Installation Guide и Quick Installation Guide. Проблема в том, что некоторые пункты установки/настройки предлагается выполнить разными путями и в итоге с разным результатом. Поэтому моё руководство — это компиляция этих инструкций, а также сторонних статей. Источники даю по ходу рассказа.

  1. Устанавливаем Apache, MariaDB, PHP, а также служебные пакеты.

    evgeniy@owncloud-vm:~$ sudo apt update
    evgeniy@owncloud-vm:~$ sudo apt install apache2 libapache2-mod-php mariadb-server openssl redis-server wget php-imagick php-common php-curl php-gd php-gmp php-bcmath php-imap php-intl php-json php-mbstring php-mysql php-ssh2 php-xml php-zip php-apcu php-redis php-ldap php-phpseclib libsmbclient-dev php-dev php-pear
  2. Готовимся к работе с репозиторием PHP (PEAR):

    evgeniy@owncloud-vm:~$ sudo pecl channel-update pecl.php.net
    Updating channel «pecl.php.net»
    Update of Channel «pecl.php.net» succeeded


    Я не специалист в PHP, поэтому просто приведу цитату из man-страницы pecl

    PEAR is the PHP Extension and Application Repository, found at pear.php.net.
    The pear command is used to install PEAR extensions.
    The pecl command is used to install PECL extensions.

    Создаем папку для кэша PEAR

    evgeniy@ownclowd-vm:~$ mkdir -p /tmp/pear/cache
  3. Небольшое лирическое отступление. Я вначале использовал дистрибутив Ubuntu 18.04. Но в требованиях к ownCloud указан PHP 7.4, а для 18.04 стандартом идет 7.2. Поэтому я сделал do-release-update для дистрибутива, но уже после установки пакетов (пункты 1 и 2). Поэтому после обновления при запуске команды pecl у меня появлялись ошибки:

    evgeniy@owncloud-vm:~$ sudo pear channel-update pear.php.net
    PHP Warning:  PHP Startup: Unable to load dynamic library 'smbclient.so' (tried: /usr/lib/php/20190902/smbclient.so (/usr/lib/php/20190902/smbclient.so: cannot open shared object file: No such file or directory), /usr/lib/php/20190902/smbclient.so.so (/usr/lib/php/20190902/smbclient.so.so: cannot open shared object file: No such file or directory)) in Unknown on line 0
    
    Notice: Trying to access array offset on value of type bool in PEAR/REST.php on line 187
    PHP Notice:  Trying to access array offset on value of type bool in /usr/share/php/PEAR/REST.php on line 187

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

    evgeniy@owncloud-vm:~$ pear version
    evgeniy@owncloud-vm:~$ sudo pear upgrade --force --alldeps http://pear.php.net/get/PEAR-1.10.13
    evgeniy@owncloud-vm:~$ sudo pear clear-cache
    evgeniy@owncloud-vm:~$ sudo pear update-channels
    evgeniy@owncloud-vm:~$ sudo pear upgrade --force
    evgeniy@owncloud-vm:~$ sudo pear upgrade-all
    evgeniy@owncloud-vm:~$ pear version
  4. Ставим клиент SMB для PHP и активируем его

    evgeniy@owncloud-vm:~$ sudo pecl install smbclient-stable
    downloading smbclient-1.0.6.tgz ...
    Starting to download smbclient-1.0.6.tgz (33,207 bytes)
    .........done: 33,207 bytes 
    ....
    
    evgeniy@test:~$ echo "extension=smbclient.so" | sudo tee /etc/php/7.4/mods-available/smbclient.ini
    extension=smbclient.so
    evgeniy@owncloud-vm:~$ sudo phpenmod smbclient

    Перезапускаем Apache и проверяем, что модуль SMB загружен:

    evgeniy@owncloud-vm:~$ sudo systemctl restart apache2
    evgeniy@owncloud-vm:~$ php -m |grep smbclient

    В выводе команды должны быть модули libsmbclient и smbclient.
  5. Ставим еще немного пакетов

    evgeniy@owncloud-vm:~$ sudo apt install unzip bzip2 rsync curl jq inetutils-ping ldap-utils smbclient
  6. Сохраняем в переменную IP-адрес, придумываем и сохраняем в переменную доменное имя (FQDN) сервера

    evgeniy@owncloud-vm:~$ my_ip=$(hostname -I|cut -f1 -d ' ')
    evgeniy@owncloud-vm:~$ my_domain="test.owncloud.local"

    Меняем имя сервера на то, что мы сохранили в переменную my_domain

    evgeniy@owncloud-vm:~$ hostnamectl -f
    owncloud-vm
    evgeniy@owncloud-vm:~$ sudo hostnamectl set-hostname $my_domain
    evgeniy@owncloud-vm:~$ hostname -f
    test.owncloud.local
  7. Настраиваем MariaDB. Запускаем «Мастер установки». Я дал следующие ответы на его вопросы:

    evgeniy@test:~$ sudo mysql_secure_installation
    
    NOTE: RUNNING ALL PARTS OF THIS SCRIPT IS RECOMMENDED FOR ALL MariaDB
          SERVERS IN PRODUCTION USE!  PLEASE READ EACH STEP CAREFULLY!
    
    In order to log into MariaDB to secure it, we'll need the current
    password for the root user.  If you've just installed MariaDB, and
    you haven't set the root password yet, the password will be blank,
    so you should just press enter here.
    
    Enter current password for root (enter for none):
    OK, successfully used password, moving on...
    
    Setting the root password ensures that nobody can log into the MariaDB
    root user without the proper authorisation.
    
    Set root password? [Y/n] y
    New password:<пароль для root>
    Re-enter new password:<пароль для root>
    Password updated successfully!
    Reloading privilege tables..
     ... Success!
    
    
    By default, a MariaDB installation has an anonymous user, allowing anyone
    to log into MariaDB without having to have a user account created for
    them.  This is intended only for testing, and to make the installation
    go a bit smoother.  You should remove them before moving into a
    production environment.
    
    Remove anonymous users? [Y/n] n
     ... skipping.
    
    Normally, root should only be allowed to connect from 'localhost'.  This
    ensures that someone cannot guess at the root password from the network.
    
    Disallow root login remotely? [Y/n]
     ... Success!
    
    By default, MariaDB comes with a database named 'test' that anyone can
    access.  This is also intended only for testing, and should be removed
    before moving into a production environment.
    
    Remove test database and access to it? [Y/n]
     - Dropping test database...
     ... Success!
     - Removing privileges on test database...
     ... Success!
    
    Reloading the privilege tables will ensure that all changes made so far
    will take effect immediately.
    
    Reload privilege tables now? [Y/n]
     ... Success!
    
    Cleaning up...
    
    All done!  If you've completed all of the above steps, your MariaDB
    installation should now be secure.
    
    Thanks for using MariaDB!

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

    evgeniy@test:~$ mysqladmin -u root -p version
    Enter password:
    mysqladmin  Ver 9.1 Distrib 10.3.34-MariaDB, for debian-linux-gnu on x86_64
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Server version          10.3.34-MariaDB-0ubuntu0.20.04.1
    Protocol version        10
    Connection              Localhost via UNIX socket
    UNIX socket             /var/run/mysqld/mysqld.sock
    Uptime:                 1 hour 34 min 35 sec
    
    Threads: 6  Questions: 74  Slow queries: 0  Opens: 33  Flush tables: 1  Open tables: 26  Queries per second avg: 0.013

    Какая может быть проблема. У меня эта команда выдавала ошибку доступа. Если запускать ее с sudo, то команда работала корректно. Аналогичная история была с командой "mysql -u root"

    Это можно исправить следующим набором команд:

    evgeniy@test:~$ sudo mysql -u root
    [mysql] use mysql;
    [mysql] update user set plugin='' where User='root';
    [mysql] flush privileges;
    [mysql] \q

    Команда из инструкции к ownCloud

    evgeniy@test:~$ sudo sed -i "/\[mysqld\]/atransaction-isolation = READ-COMMITTED\nperformance_schema = on" /etc/mysql/mariadb.conf.d/50-server.cnf

    Перезапускаем сервер БД и проверяем его статус:

    evgeniy@test:~$ sudo systemctl restart mariadb
    evgeniy@test:~$ sudo systemctl status mariadb
    ● mariadb.service - MariaDB 10.3.34 database server
         Loaded: loaded (/lib/systemd/system/mariadb.service; enabled; vendor preset: enabled)
         Active: active (running) since Sun 2022-06-05 00:03:15 MSK; 31s ago
           Docs: man:mysqld(8)
                 https://mariadb.com/kb/en/library/systemd/
        Process: 1253 ExecStartPre=/usr/bin/install -m 755 -o mysql -g root -d /var/run/mysqld (code=exited, status=0/SUCCESS)
        Process: 1264 ExecStartPre=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
        Process: 1266 ExecStartPre=/bin/sh -c [ ! -e /usr/bin/galera_recovery ] && VAR= ||   VAR=`cd /usr/bin/..; /usr/bin/galera_recovery`; [ $? -eq 0 ]   &>
        Process: 1350 ExecStartPost=/bin/sh -c systemctl unset-environment _WSREP_START_POSITION (code=exited, status=0/SUCCESS)
        Process: 1352 ExecStartPost=/etc/mysql/debian-start (code=exited, status=0/SUCCESS)
       Main PID: 1319 (mysqld)
         Status: "Taking your SQL requests now..."
          Tasks: 31 (limit: 1103)
         Memory: 168.2M
         CGroup: /system.slice/mariadb.service
                 └─1319 /usr/sbin/mysqld
    
    Jun 05 00:03:15 test.owncloud.local systemd[1]: Started MariaDB 10.3.34 database server.
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1354]: Upgrading MySQL tables if necessary.
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1357]: /usr/bin/mysql_upgrade: the '--basedir' option is always ignored
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1357]: Looking for 'mysql' as: /usr/bin/mysql
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1357]: Looking for 'mysqlcheck' as: /usr/bin/mysqlcheck
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1357]: This installation of MariaDB is already upgraded to 10.3.34-MariaDB.
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1357]: There is no need to run mysql_upgrade again for 10.3.34-MariaDB.
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1357]: You can use --force if you still want to run mysql_upgrade
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1365]: Checking for insecure root accounts.
    Jun 05 00:03:15 test.owncloud.local /etc/mysql/debian-start[1369]: Triggering myisam-recover for all MyISAM tables and aria-recover for all Aria tables
    lines 1-27/27 (END)

    C этим разобрались. Идем дальше
  8. Настраиваем Apache. Включаем необходимые модули:

    evgeniy@test:~$ sudo a2enmod rewrite headers env dir mime unique_id ssl

    Для того, чтобы правильно работал выбранный мною клиент, да и вообще для безопасности, нужно использовать протокол HTTPS. Для этого надо сгенерировать ключи для SSL. Создаем директорию для ключей, переходим в нее и генерируем ключи. В качестве Common Name используем доменное имя сервера (FQDN), которое мы создали в пункте 6. в моем случае это «test.owncloud.local»

    evgeniy@test:~$ sudo mkdir /etc/apache2/certificate
    evgeniy@test:~$ cd /etc/apache2/certificate/
    evgeniy@test:/etc/apache2/certificate$ sudo openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -nodes -out apache-certificate.crt -keyout apache.key
    Generating a RSA private key
    .............................................++++
    .................++++
    writing new private key to 'apache.key'
    -----
    You are about to be asked to enter information that will be incorporated
    into your certificate request.
    What you are about to enter is what is called a Distinguished Name or a DN.
    There are quite a few fields but you can leave some blank
    For some fields there will be a default value,
    If you enter '.', the field will be left blank.
    -----
    Country Name (2 letter code) [AU]:RU
    State or Province Name (full name) [Some-State]:Moscow
    Locality Name (eg, city) []:Moscow
    Organization Name (eg, company) [Internet Widgits Pty Ltd]:Home
    Organizational Unit Name (eg, section) []:
    Common Name (e.g. server FQDN or YOUR name) []:test.owncloud.local
    Email Address []:

  9. Создаем файл конфигурации нашей директории в Apache:

    evgeniy@test:~$ sudo vim /etc/apache2/sites-available/owncloud.conf

    Следующего содержания:

    Alias /owncloud "/var/www/owncloud"
    <Directory /var/www/owncloud>
      Options +FollowSymlinks
      AllowOverride All
      Require all granted
      Satisfy Any
     <IfModule mod_dav.c>
      Dav off
     </IfModule>
    </Directory>

    Активируем ее:

    evgeniy@test:~$ sudo a2ensite owncloud.conf
    Enabling site owncloud.
    To activate the new configuration, you need to run:
      systemctl reload apache2
  10. Настраиваем Apache на работу с HTTPS. При обращении по протоколу HTTP (порт 80) клиент будет перенаправляться на порт HTTPS (443). Редактируем файл 000-default.conf

    evgeniy@test:~$ sudo vim /etc/apache2/sites-available/000-default.conf

    Содержание такое:

    <VirtualHost *:80>
            RewriteEngine On
            RewriteCond %{HTTPS} !=on
            RewriteRule ^/?(.*) https://%{SERVER_NAME}/$1 [R=301,L]
    </virtualhost>
    <VirtualHost *:443>
            ServerAdmin webmaster@localhost
            DocumentRoot /var/www/html
            ErrorLog ${APACHE_LOG_DIR}/error.log
            CustomLog ${APACHE_LOG_DIR}/access.log combined
            SSLEngine on
            SSLCertificateFile /etc/apache2/certificate/apache-certificate.crt
            SSLCertificateKeyFile /etc/apache2/certificate/apache.key
    </VirtualHost>

    Активируем:

    evgeniy@test:~$ sudo a2ensite 000-default.conf
    Enabling site 000-default.
    To activate the new configuration, you need to run:
      systemctl reload apache2

    Перезапускаем Apache:

    evgeniy@test:~$ sudo systemctl restart apache2
  11. Установка самого ownCloud. Я использую загрузку и распаковку архива. Так исторически сложилось. Но рекомендую использовать готовые пакеты. Инструкция, как добавить репозиторий тут. Ставить надо пакет owncloud-complete-files.

    Загрузка, распаковка, смена владельца:

    evgeniy@test:~$ cd /var/www
    evgeniy@test:/var/www$ sudo wget https://download.owncloud.com/server/stable/owncloud-complete-latest.tar.bz2
    --2022-06-05 00:11:58--  https://download.owncloud.com/server/stable/owncloud-complete-latest.tar.bz2
    Resolving download.owncloud.com (download.owncloud.com)... 167.233.14.167, 2a01:4f8:1c1d:3d1::1
    Connecting to download.owncloud.com (download.owncloud.com)|167.233.14.167|:443... connected.
    HTTP request sent, awaiting response... 200 OK
    Length: 79062710 (75M) [application/x-bzip2]
    Saving to: ‘owncloud-complete-latest.tar.bz2’
    
    owncloud-complete-latest.tar.bz2        100%[============================================================================>]  75.40M  1.08MB/s    in 1m 45s
    
    2022-06-05 00:13:44 (734 KB/s) - ‘owncloud-complete-latest.tar.bz2’ saved [79062710/79062710]
    
    evgeniy@test:/var/www$ sudo tar -xjf owncloud-complete-latest.tar.bz2
    
    evgeniy@test:/var/www$ sudo chown -R www-data. owncloud
  12. Запуск установщика:

    evgeniy@test:/var/www$ cd /var/www/owncloud
    evgeniy@test:/var/www/owncloud$ sudo -u www-data ./occ maintenance:install --database "mysql" --database-name "owncloud" --database-user "root" --database-pass "123456" --data-dir "/var/www/owncloud/data" --admin-user "admin" --admin-pass "123456"

    Все идентификаторы (имена пользователей, пароли) надо поменять на используемые у вас.

    Если что-то пошло не так и надо удалить базу данных ownCloud, то проверяем, что база есть и каково ее имя, удаляем, проверяем, что операция прошла успешно:

    evgeniy@test:~$ sudo mysql -u root -e "SHOW DATABASES";
    evgeniy@test:~$ sudo mysql -u root -e "DROP DATABASE owncloud";
    evgeniy@test:~$ sudo mysql -u root -e "SHOW DATABASES";
    
  13. Нужно IP-адрес сервера и его FQDN добавить в доверенные домены ownCloud:

    evgeniy@test:/var/www/owncloud$ sudo -u www-data ./occ config:system:set trusted_domains 1 --value="$my_ip"
    System config value trusted_domains => 1 set to string 172.16.1.213
    evgeniy@test:/var/www/owncloud$ sudo -u www-data ./occ config:system:set trusted_domains 2 --value="$my_domain"
    System config value trusted_domains => 2 set to string test.owncloud.local
    
  14. Задачи для Cron'a:

    evgeniy@test:~$ echo "*/15  *  *  *  * /var/www/owncloud/occ system:cron" | sudo -u www-data -g crontab tee -a /var/spool/cron/crontabs/www-data 
    */15  *  *  *  * /var/www/owncloud/occ system:cron
    evgeniy@test:~$ echo "0  2  *  *  * /var/www/owncloud/occ dav:cleanup-chunks" | sudo -u www-data -g crontab tee -a /var/spool/cron/crontabs/www-data
    0  2  *  *  * /var/www/owncloud/occ dav:cleanup-chunks
  15. На этом этапе ownCloud должен быть доступен в браузере по IP-адресу вашего сервера (протокол HTTPS — порт 443).



    Пока есть один пользователь admin. Пароль для него задан при установке (пункт 12), параметр --admin-pass.

    Вид интерфеса после авторизации:

  16. Перенос каталога с данными. По умолчанию данные хранятся в каталоге "/var/www/owncloud/data/". Правильнее хранить данные на отдельном диске, возможно, сетевом или на RAID-массиве. Далее преполагается, что целевой том для данных смонтирован по пути "/mnt/owncloud". Инструкция, как это сделать на официальном сайте. Но в ней неточности с путями. Вначале я сделал по инструкции, и у меня не заработало — файлы были недоступны. Я создал нового пользователя, и его каталог файлов лежал по правильному пути и был доступен. Сравнение записей в таблицах показало, где ошибка.

    Переводим ownCloud в сервисный режим и останавливаем Apache:

    evgeniy@test:~$ cd /var/www/owncloud
    evgeniy@test:/var/www/owncloud$ sudo -u www-data php occ maintenance:mode --on
    Maintenance mode enabled
    Please also consider to stop the web server on all ownCloud instances
    
    evgeniy@test:/var/www/owncloud$ sudo systemctl stop apache2.service

    Создаем каталог, если он еще не создан, и переносим в него файлы:

    evgeniy@test:/var/www/owncloud$ sudo mkdir /mnt/owncloud
    evgeniy@test:/var/www/owncloud$ sudo chown www-data /mnt/owncloud
    evgeniy@test:/var/www/owncloud$ sudo rsync -avz /var/www/owncloud/data /mnt/owncloud
    sending incremental file list
    data/
    data/.htaccess
    data/.ocdata
    data/htaccesstest.txt
    data/index.html
    data/owncloud.log
    data/admin/
    data/admin/cache/
    data/admin/files/
    data/admin/files/ownCloud Manual.pdf
    data/admin/files/Documents/
    data/admin/files/Documents/Example.odt
    data/admin/files/Photos/
    data/admin/files/Photos/Lake-Constance.jpg
    data/admin/files/Photos/Portugal.jpg
    data/admin/files/Photos/Teotihuacan.jpg
    data/avatars/
    data/files_external/
    data/files_external/rootcerts.crt
    
    sent 6,985,083 bytes  received 277 bytes  13,970,720.00 bytes/sec
    total size is 8,178,313  speedup is 1.17

    Манипуляции с базой данных. Заходим на сервер БД клиентом:

    evgeniy@test:/var/www/owncloud$ mysql -u root -p
    Enter password:
    Welcome to the MariaDB monitor.  Commands end with ; or \g.
    Your MariaDB connection id is 45
    Server version: 10.3.34-MariaDB-0ubuntu0.20.04.1 Ubuntu 20.04
    
    Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
    
    Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.

    Выбираем нашу базу:

    MariaDB [(none)]> use owncloud
    Reading table information for completion of table and column names
    You can turn off this feature to get a quicker startup with -A
    
    Database changed

    Смотрим список пользователей и у каждого меняем путь. Если уже создано несколько пользователей, то используем поле id для их идентификации. Если вы делаете эту процедуру сразу после установки ownCloud, то будет только один пользователь — admin.

    MariaDB [owncloud]> select * from oc_accounts;
    +----+-------+---------+---------------+--------------+-------+------------+------------------+------------------------------+-------+
    | id | email | user_id | lower_user_id | display_name | quota | last_login | backend          | home                         | state |
    +----+-------+---------+---------------+--------------+-------+------------+------------------+------------------------------+-------+
    |  1 | NULL  | admin   | admin         | admin        | NULL  | 1654386521 | OC\User\Database | /var/www/owncloud/data/admin |     1 |
    +----+-------+---------+---------------+--------------+-------+------------+------------------+------------------------------+-------+
    1 row in set (0.000 sec)
    
    MariaDB [owncloud]> UPDATE oc_accounts SET home='/mnt/owncloud/data/admin' WHERE id=1;
    Query OK, 1 row affected (0.033 sec)
    Rows matched: 1  Changed: 1  Warnings: 0

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

    MariaDB [owncloud]> select * from oc_jobs where class = 'OC\Log\Rotate';
    Empty set (0.000 sec)
    
    MariaDB [owncloud]> select * from oc_jobs;
    +----+----------------------------------------------------+----------+------------+--------------+-------------+--------------------+
    | id | class                                              | argument | last_run   | last_checked | reserved_at | execution_duration |
    +----+----------------------------------------------------+----------+------------+--------------+-------------+--------------------+
    |  1 | OCA\Files\BackgroundJob\ScanFiles                  | null     | 1654386430 |   1654386430 |           0 |                  0 |
    |  2 | OCA\Files\BackgroundJob\DeleteOrphanedItems        | null     | 1654386437 |   1654386437 |           0 |                  0 |
    |  3 | OCA\Files\BackgroundJob\CleanupFileLocks           | null     | 1654386444 |   1654386444 |           0 |                  0 |
    |  4 | OCA\Files\BackgroundJob\CleanupPersistentFileLocks | null     | 1654386477 |   1654386477 |           0 |                  0 |
    |  5 | OCA\DAV\CardDAV\SyncJob                            | null     | 1654386505 |   1654386505 |           0 |                  0 |
    |  6 | OCA\DAV\BackgroundJob\CleanProperties              | null     | 1654386522 |   1654386521 |           0 |                  0 |
    |  7 | OCA\Activity\BackgroundJob\EmailNotification       | null     | 1654386739 |   1654386739 |           0 |                  0 |
    |  8 | OCA\Activity\BackgroundJob\ExpireActivities        | null     | 1654386749 |   1654386749 |           0 |                  0 |
    |  9 | OCA\Federation\SyncJob                             | null     | 1654386752 |   1654386752 |           0 |                  0 |
    | 10 | OCA\Files_Sharing\DeleteOrphanedSharesJob          | null     | 1654386761 |   1654386761 |           0 |                  0 |
    | 11 | OCA\Files_Sharing\ExpireSharesJob                  | null     | 1654386770 |   1654386770 |           0 |                  0 |
    | 12 | OCA\Files_Sharing\External\ScanExternalSharesJob   | null     | 1654386775 |   1654386775 |           0 |                  0 |
    | 13 | OCA\Files_Trashbin\BackgroundJob\ExpireTrash       | null     | 1654386795 |   1654386795 |           0 |                  0 |
    | 14 | OCA\Files_Versions\BackgroundJob\ExpireVersions    | null     | 1654386833 |   1654386833 |           0 |                  0 |
    | 15 | OCA\Market\CheckUpdateBackgroundJob                | null     |          0 |   1654386024 |           0 |                 -1 |
    | 16 | OCA\UpdateNotification\Notification\BackgroundJob  | null     |          0 |   1654386025 |           0 |                 -1 |
    | 17 | \OC\Authentication\Token\DefaultTokenCleanupJob    | null     |          0 |   1654386026 |           0 |                 -1 |
    +----+----------------------------------------------------+----------+------------+--------------+-------------+--------------------+
    17 rows in set (0.000 sec)

    Если задача есть, то выполните запрос:

    MariaDB [owncloud]> UPDATE oc_jobs SET argument = REPLACE(argument, '\\/var\\/www\\/owncloud\\/data\\/', '\\/mnt\\/owncloud/data\\/')   WHERE id = <id of the incorrect record>;

    где в <id of the incorrect record> подставить id с записью, у которой неверный путь.
    Выходим из БД:

    MariaDB [owncloud]> \q
    Bye

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

    evgeniy@test:/var/www/owncloud$ sudo -u www-data php ./occ config:list
    {
        "system": {
            "instanceid": "oc8mwxq3rfxl",
            "passwordsalt": "***REMOVED SENSITIVE VALUE***",
            "secret": "***REMOVED SENSITIVE VALUE***",
            "trusted_domains": [
                "localhost",
                "172.16.1.213",
                "test.owncloud.local"
            ],
            "datadirectory": "\/mnt\/owncloud\/data",
            "overwrite.cli.url": "http:\/\/localhost",
            "dbtype": "mysql",
            "version": "10.10.0.3",
            "dbname": "owncloud",
            "dbhost": "localhost",
            "dbtableprefix": "oc_",
            "mysql.utf8mb4": true,
            "dbuser": "***REMOVED SENSITIVE VALUE***",
            "dbpassword": "***REMOVED SENSITIVE VALUE***",
            "allow_user_to_change_mail_address": "",
            "logtimezone": "UTC",
            "apps_paths": [
                {
                    "path": "\/var\/www\/owncloud\/apps",
                    "url": "\/apps",
                    "writable": false
                },
                {
                    "path": "\/var\/www\/owncloud\/apps-external",
                    "url": "\/apps-external",
                    "writable": true
                }
            ],
            "installed": true,
            "maintenance": false
        },
        "apps": {
            "activity": {
                "enabled": "yes",
                "installed_version": "2.7.0",
                "types": "filesystem"
            },
            "backgroundjob": {
                "lastjob": "14"
            },
            "comments": {
                "enabled": "yes",
                "installed_version": "0.3.0",
                "types": "logging,dav"
            },
            "configreport": {
                "enabled": "yes",
                "installed_version": "0.2.1",
                "types": "filesystem"
            },
    ........
            "updatenotification": {
                "enabled": "yes",
                "installed_version": "0.2.1",
                "types": ""
            }
        }
    }

    Команда для замены (не проверял):

    evgeniy@test:/var/www/owncloud$ sudo -u www-data php ./occ config:app:set --value /mnt/owncloud/data <название приложения> <имя параметра, содержащего путь к каталогу>

    И, наконец, исправляем путь в файле настроек, параметр datadirectory:

    evgeniy@test:/var/www/owncloud$ sudo vim /var/www/owncloud/config/config.php
    <?php
    $CONFIG = array (
      'instanceid' => 'oc8mwxq3rfxl',
      'passwordsalt' => 'ahNk4VxR1R5DeZyJ9ly8wsdqCXo1z3',
      'secret' => 'b8xm+wxPuQFyuW0syudVGGsKQwgfnTFoMEBm6cZA00Wm2zG0',
      'trusted_domains' =>
      array (
        0 => 'localhost',
        1 => '172.16.1.213',
        2 => 'test.owncloud.local',
      ),
      'datadirectory' => '/mnt/owncloud/data',
      'overwrite.cli.url' => 'http://localhost',
      'dbtype' => 'mysql',
      'version' => '10.10.0.3',
      'dbname' => 'owncloud',
      'dbhost' => 'localhost',
      'dbtableprefix' => 'oc_',
      'mysql.utf8mb4' => true,
      'dbuser' => 'oc_admin',
      'dbpassword' => 'WeBkvHU7WqHPQ/7Sxm0Oq4rVs1vAEh',
      'allow_user_to_change_mail_address' => '',
      'logtimezone' => 'UTC',
      'apps_paths' =>
      array (
        0 =>
        array (
          'path' => '/var/www/owncloud/apps',
          'url' => '/apps',
          'writable' => false,
        ),
        1 =>
        array (
          'path' => '/var/www/owncloud/apps-external',
          'url' => '/apps-external',
          'writable' => true,
        ),
      ),
      'installed' => true,
      'maintenance' => false,
    );

    Возвращаем ownCloud в боевой режим и запускаем Apache:

    evgeniy@test:/var/www/owncloud$ sudo -u www-data php occ maintenance:mode --off
    ownCloud is in maintenance mode - no app have been loaded
    
    Maintenance mode disabled
    
    evgeniy@test:/var/www/owncloud$ sudo systemctl start apache2.service
    
  17. На этом настройка серверной части завершена. Можно пользоваться веб-интерфейсом. Настройку клиента на Андроиде рассмотрю в следующей статье.

P.S. Первая публикация, не карайте строго.

Комментарии (33)


  1. kvazimoda24
    09.06.2022 01:18
    +5

    Почему именно owncloud, а не nextcloud?


    1. Ev9en1y Автор
      09.06.2022 02:21

      Я о nextcloud просто не знал. ownCloud у меня записался на подкорке, когда коллеги на работе делали демку с разворачиванием ownCloud с помощью Ansible и HPE OneView. Поэтому я не мучился с выбором, просто не зная о том, что этот выбор есть.

      Надо попробовать развернуть nextcloud.


    1. Shluzzz
      09.06.2022 11:12

      Для общего развития, не могли бы уточнить, чем плох owncloud по сравнению с nextcloud?

      У меня как раз исторически сложился owncloud, и непонятно, стоит ли переезжать. Так как ставил ещё 3 года назад, то оказывается, что установленная версия сильно устарела, и вместо обновления вероятно есть смысл перейти как раз на nextcloud.


      1. kvazimoda24
        09.06.2022 11:22
        +1

        У меня тоже ещё два месяца назад стоял owncloud, причём, ещё версии 9 с чем-то.

        Переехал на nextcloud.

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

        Например, у меня плагин для синхронизации СМСок с телефона. Так для owncloud'а этот плагин устарел и больше не поддерживается клиенстким приложением.

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


        1. Kpblc
          09.06.2022 11:32

          Подскажите, пожалуйста, что за плагин?


          1. kvazimoda24
            09.06.2022 11:46

            Phone Sync (ocsms)


  1. denisromanenko
    09.06.2022 01:54
    +3

    А некстклауд вообще можно одним снапом поднять в убунту, и пользоваться.

    Но блин какой же он все-таки сырой, а он owncloud опережает. Постоянно ошибки валятся, постоянно приложения вылетают, короче трясёшься больше за свои файлы, чем если бы они просто на компьютере лежали.


    1. Ev9en1y Автор
      09.06.2022 02:24

      Тогда не о чем будет писать статью :) Я просто не знал о nextcloud. Теперь стало интересно посмотреть. ownCloud в моих домашних условиях сбоев не давал. Хранит всё в файловой системе. То есть сами файлы не должны потеряться, даже если программа даст сбой.


    1. 13werwolf13
      09.06.2022 08:10
      +3

      юзать снап - мазохизм


      1. MEJIOMAH
        09.06.2022 15:39
        +1

        Таки в чем он заключается?


  1. Sazonov
    09.06.2022 02:37
    -1

    А можно это всё в докер завернуть?


    1. Ev9en1y Автор
      09.06.2022 11:30

      Есть инструкция на сайте производителя, как поставить в контейнере.
      https://doc.owncloud.com/server/10.10/admin_manual/installation/docker/
      Но я ретроград и консерватор :). Не понимаю, как быть с настройками, как чинить, если неудачное обновление контейнера пришло. В общем это мой чисто субъективный выбор. Конкретно данный экземпляр для статьи ставился в виртуалке KVM.


  1. zorn_v
    09.06.2022 04:16

    Для домашнго использования базы и в SQLite хватит.

    version: '3'
    
    services:
      nc:
        image: nextcloud:24-apache
        volumes:
          - ./data:/var/www/html/data
        ports:
          - 80:80
    


    1. Ev9en1y Автор
      09.06.2022 12:57
      +1

      Я пошел по пути наименьшего сопротивления - опирался на официальные руководства :).


  1. garbagecollected
    09.06.2022 05:09
    +5

    Если нужно синхронизировать только файлы, можно просто использовать Syncthing. Все настройки через GUI, без правок каких-либо конфигов nginx/php. Написана на Go. Работает как Dropbox с разницей лишь в том, что синхронизирует файлы на всех устройствах без сервера. Гибкая настройка прав, есть возможность ставить на папки пароли, можно использовать для синхронизаций документов в команде из небольшого количества участников (думаю, человек до 50 потянет).

    Бонусом идет система версионирования файлов. К сожалению, это не git, чтобы можно было править один и тот же файл с нескольких устройств. Но система не удаляет коллизии изменений (при этом оповещает о них). Правда, их приходится разруливать вручную, либо как вариант указать какую версию сохранить, а какую удалить или переименовать.

    100% opensource, в F-droid публикуют несколько совместимых друг с другом форков.


    1. Vaitek
      09.06.2022 08:57
      +1

      Да, вот так и я накопил терабайт фото и видео с домашних телефонов))


    1. Ev9en1y Автор
      09.06.2022 11:32

      Спасибо за совет. Посмотрю.


    1. quarus
      09.06.2022 12:25

      Syncthing - любители Украины, в конце мая отключили для России глобальные серверы обнаружения. Придется разворачивать свой syncthing-discosrv или работать только в локалке.


      1. dartraiden
        09.06.2022 19:53

        А можно ссылку на первоисточник?


        1. quarus
          10.06.2022 13:11

          Примерно с 25 мая:

          1) репозиторий APT недоступен, в т.ч. раздел на сайте (https://apt.syncthing.net/)... программу не обновить;
          2) все внешние связи отвалились (остались только локальные, по DHT), т.е. стали недоступны глобальные серверы обнаружения (это уже не репозиторий);
          3) основной раздел сайта (https://syncthing.net/) - доступен...
          4) на сайте первой строкой - "Фонд Syncthing выступает за мир и с Украиной! Читайте о том, что мы делаем..."

          по совокупности, предполагаю, что причина - фонд Syncthing.

          Начал уже устанавливать свой syncthing-discosrv (не работает совместно с клиентом на 1 IP - подбирал варианты), но сегодня все пришло в работоспособное состояние... и я рад.


          1. dartraiden
            10.06.2022 14:13

            А, я думал, они официально объявили.

            Скорее всего, всё проще:
            — о поддержке Украины они объявили ещё в марте
            — в конце мая случился Роскомнадзор

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


      1. decempir
        09.06.2022 21:42

        А это не проделки Роскомнадзора? У меня Ростелеком не пускает к серверам, а Теле2 нормально


      1. decempir
        09.06.2022 21:42

        А это не проделки Роскомнадзора? У меня Ростелеком не пускает к серверам, а Теле2 нормально


  1. saga111a
    09.06.2022 05:47

    При всем отличном функционале nextcloud/owncloud имеют очень большую проблему, как только количество файлов в папке переваливает за несколько тысяч, особенно если это фото то сервис начинает кошмарно тупить, все это не лечится ускорениями, сделав одну операцию тонкое место возникает в другой.
    Даже webdav от nextcloud получается непростительно медленным. Поднимаем от nginx или apach или любой другой webdav и скорость растет на порядок.


    1. Ranckont
      09.06.2022 06:32

      Нужно подбирать FS под свои цели, для конкретного сервиса


    1. Ev9en1y Автор
      09.06.2022 12:27

      Я, наверное, на это не налетал, так как стараюсь на телефоне фотографии раскладывать по папкам. А несколько тысяч файлов можно накопить только в фотках/видосиках :)


      1. saga111a
        09.06.2022 15:26
        +1

        у меня была цель сделать домашнее хранилище. В итоге сейчас останавливаюсь на голом webdav.


  1. Kundello
    09.06.2022 12:25

    Nextcloud все же на данный момент более открытый и не так сильно лезет в коммерцию, как Owncloud


  1. Kirikekeks
    09.06.2022 12:25

    Для синхронизации лучший (imho) совет дал garbagecollected, это на порядок быстрее некстклауда, а что бы избежать проблем синхронизации просто использовал схему "звезда" в которой телефон-главный поставщик изменений.

    От owncloud отказался из за платности, ничего сказать не могу.

    Nextcloud знаю как безпроблемный клиент уже много лет, правда не гонюсь за версиями. Так как отдаётся статика, то я у себя сделал nginx+postgres. Файлы: 278128 обслуживаются без проблем, быстрее чем в последней windows11 (семейное использование на десяток пользователей) на хосте core4duo с 8 Гб памяти hdd. Приложение "Фото" стараюсь избегать, при быстром пролистывании легко загнать CPU в "красную зону". Просто храню фотки в папке "год" в котором 12 папок-цифр с месяцами и открываю в "Файлы" по превью.

    ... добавлю, что лучший man используемый мною нашел в wiki calculate, но надо понимать разницу в архитектурах немного при установке по этому ману в debian.


    1. Ev9en1y Автор
      09.06.2022 12:55

      Про клиент допишу в этой статье. Вначале хотел сделать отдельную, но подумал, что смыла делать сериал нет. Я использую FolderSync. Он бесплатный, но в нем от души рекламы. С другой стороны, один раз настроил и забыл. Он в фоне сам работает.


  1. sayplzz
    09.06.2022 12:32

    Использую filerun быстрее nextcloud но плагинов таких нет.


  1. vlad49
    09.06.2022 18:18
    +1

    В свое время удивился, что в owncloud вся загрузка-выгрузка файлов написана на php. Этож блин какая-та поделка получается полукустарная, непригодная для серьезных нагрузок.

    С тех пор искал решение для развертывания собственного облака, оптимизированное под нагрузки и не нашел. Чтобы низкоуровневая часть, отвечающая за передачу данных была написана на c/c++/go, поддерживался нормально FTP/SMB, с сохранением квот и пользовательских прав - этого тоже нигде нет (!) и подобное. Бывает ли такое?


  1. werter_l
    11.06.2022 18:35

    Кому own\nextcloud-ы слишком жирно, смотрите в сторону filestash, filebrowser,sftpgo etc