🐹 CentOS 7: Работа в командной строке с Nextcloud. Обновление Nextcloud с помощью командной строки. Утилита updater.phar.

Содержание:

1. Введение.
2. Утилита командной строки и порядок обновления.
3. Команды технического обслуживания.
4. Подготовка к эксплуатации после обновления.

4.1. Добавление недостающих индексов баз данных.
4.2. Переиндексация файлов пользователей.
4.3. Обновление конфигурации Nginx.
4.4. Выход из режима обслуживания.

5. Устранение замечаний после обновления.
6. Оригиналы источников информации.


На чем было опробовано:

  1. CentOS Linux release 7.9.2009 (Core)
  2. Nextcloud 21.
  3. Nginx 1.19.10.
  4. PHP Version 7.4.16.
  5. MariaDB Server version 10.5.9.
  6. Ноутбук Emachines G525.

1. Введение.

Очередное актуальное обновление любимого облачного хранилища Nextcloud — это всегда радость:

И, конечно же, его хочется установить… но не хочется скачивать обновление, потом распаковывать и заменять старые версии файлов облачного хранилища Nextcloud, потом приводить систему в рабочее состояние после обновления. Бывает, что «всё и так работает», зачем обновляться? Зачем рисковать получить неработающий Nextclud?

Не переживайте, обновляться стало гораздо проще!

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

Внимание! Понижение версии не поддерживается и может повредить ваши данные! Если вы хотите вернуться к более старой версии Nextcloud, выполните новую, свежую установку, а затем восстановите данные из резервной копии.

2. Утилита командной строки и порядок обновления.

Утилита updater.phar — это PHP скрипт. Для активации её работы вы должны запускать её от имени пользователя от имени которого работает ваша система web-сервера и использовать работу с теми каталогами, к которым, у этого пользователя, есть права доступа.

Например: nginx или apache.

Пример пути:

./var/www/nextcloud/updater/updater.phar

Обновление версии облачного хранилища Nextcloud необходимо обновлять поэтапно:

  • Прежде чем вы сможете выполнить обновление до новейшего актуального выпуска, выполните обновление до крайнего предпоследнего выпуска.
  • Затем запустите обновление еще раз, чтобы перейти к крайнему предпоследнему выпуску следующего основного выпуска.
  • Вы не можете пропустить крайние предпоследние выпуски. Повторно запустите обновление, пока не достигнете актуального доступного (или применимого) выпуска.
  • Пример: 18.0.5 —> 18.0.11 —> 19.0.5 —> 20.0.2 —> 20.0.9 —> 21.0.

3. Команды технического обслуживания.

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

# sudo -u nginx php /var/www/nextcloud/occ maintenance:mode --on

Как это видят пользователи:

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

Перейдем в каталог с утилитой updater.phar:

# cd /var/www/nextcloud/updater/

И запустим её выполнение:

# sudo -u nginx php updater.phar

Утилита проверит факт наличия последующей версии и предложит выполнить действия по переходу на следующую версию облачного хранилища Nextcloud:

Отвечаем буквой ‘y‘, чтобы начать процесс обновления.

Начнётся и продолжится технический процесс скачивания файлов облачного хранилища Nextcloud:

Когда процесс получения файлов закончится, система облачного хранилища Nextcloud предложит проверить вам обновление и совместимость ваших установленных в ней приложений со скачанной версией Nextcloud. Отвечаем буквой ‘Y‘.

Побегут процессы работы с приложениями системы облачного хранилища:

В конце обработки приложений утилита updater.phar поинтересуется следует ли сохранить Режим обслуживания? Если ответить утвердительно, то потом его можно отключить вручную. Ответим буквой ‘y‘, то есть сохраним включённым Режим обслуживания.

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

Пример: 18.0.5 —> 18.0.11 —> 19.0.5 —> 20.0.2 —> 20.0.9 —> 21.0 (крайняя на момент данной инструкции).

4. Подготовка к эксплуатации после обновления.

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

4.1. Добавление недостающих индексов баз данных.

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

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

# sudo -u nginx php /var/www/nextcloud/occ db:add-missing-columns

# sudo -u nginx php /var/www/nextcloud/occ db:add-missing-indices

# sudo -u nginx php /var/www/nextcloud/occ db:add-missing-primary-keys

4.2. Переиндексация файлов пользователей.

Запустим консольную команду для работы консольной утилиты console.php в корневом каталоге системы облачного хранилища Nextcloud:

# sudo -u nginx php /var/www/nextcloud/console.php files:scan --all

Ответ:

Все файлы всех пользователей успешно переиндексировались и теперь пользователи корректно увидят свои файлы во всех своих каталогах.

4.3. Обновление конфигурации Nginx.

Обновите настройку конфигурации Nginx облачного хранилища Nextcloud до актуальной версии.

Ссылка на актуальную версию конфигурации: docs.nextcloud.com.

# mcedit /etc/nginx/conf.d/nextcloud.conf

Копируем в файл конфигурации данный текст и по смыслу меняем его на свои параметры:

nextcloud.conf
upstream php-handler {
    server unix:/var/run/php-fpm/php-fpm.sock;
}

server {
    listen 443      ssl http2;
    listen [::]:443 ssl http2;
    server_name nextcloud-site.ru;

    ssl_certificate         /etc/letsencrypt/live/nc.hamsterden.ru/fullchain.pem;
    ssl_certificate_key     /etc/letsencrypt/live/nc.hamsterden.ru/privkey.pem;
    ssl_trusted_certificate /etc/letsencrypt/live/nc.hamsterden.ru/fullchain.pem;

    add_header Strict-Transport-Security "max-age=15768000; includeSubDomains; preload;" always;

    # set max upload size
    client_max_body_size 512M;
    fastcgi_buffers 64 4K;

    # Enable gzip but do not remove ETag headers
    gzip on;
    gzip_vary on;
    gzip_comp_level 4;
    gzip_min_length 256;
    gzip_proxied expired no-cache no-store private no_last_modified no_etag auth;
    gzip_types application/atom+xml application/javascript application/json application/ld+json application/manifest+json application/rss+xml application/vnd.geo+json application/vnd.ms-fontobject application/x-font-ttf application/x-web-app-manifest+json application/xhtml+xml application/xml font/opentype image/bmp image/svg+xml image/x-icon text/cache-manifest text/css text/plain text/vcard text/vnd.rim.location.xloc text/vtt text/x-component text/x-cross-domain-policy;

    # HTTP response headers borrowed from Nextcloud `.htaccess`
    add_header Referrer-Policy                      "no-referrer"   always;
    add_header X-Content-Type-Options               "nosniff"       always;
    add_header X-Download-Options                   "noopen"        always;
    add_header X-Frame-Options                      "SAMEORIGIN"    always;
    add_header X-Permitted-Cross-Domain-Policies    "none"          always;
    add_header X-Robots-Tag                         "none"          always;
    add_header X-XSS-Protection                     "1; mode=block" always;

    # Remove X-Powered-By, which is an information leak
    fastcgi_hide_header X-Powered-By;

    # Path to the root of your installation
    root /hdd/nextcloud/www/;

    index index.php index.html /index.php$request_uri;

    # Rule borrowed from `.htaccess` to handle Microsoft DAV clients
    location = / {
        if ( $http_user_agent ~ ^DavClnt ) {
            return 302 /remote.php/webdav/$is_args$args;
        }
    }

    location = /robots.txt {
        allow all;
        log_not_found off;
        access_log off;
    }

    # Make a regex exception for `/.well-known` so that clients can still
    # access it despite the existence of the regex rule
    # `location ~ /(\.|autotest|...)` which would otherwise handle requests
    # for `/.well-known`.
    location ^~ /.well-known {
        # The following 6 rules are borrowed from `.htaccess`

        location = /.well-known/carddav     { return 301 /remote.php/dav/; }
        location = /.well-known/caldav      { return 301 /remote.php/dav/; }
        # Anything else is dynamically handled by Nextcloud
        location ^~ /.well-known            { return 301 /index.php$uri; }

        try_files $uri $uri/ =404;
    }

    # Rules borrowed from `.htaccess` to hide certain paths from clients
    location ~ ^/(?:build|tests|config|lib|3rdparty|templates|data)(?:$|/)  { return 404; }
    location ~ ^/(?:\.|autotest|occ|issue|indie|db_|console)              { return 404; }

    # Ensure this block, which passes PHP files to the PHP process, is above the blocks
    # which handle static assets (as seen below). If this block is not declared first,
    # then Nginx will encounter an infinite rewriting loop when it prepends `/index.php`
    # to the URI, resulting in a HTTP 500 error response.
    location ~ \.php(?:$|/) {
        fastcgi_split_path_info ^(.+?\.php)(/.*)$;
        set $path_info $fastcgi_path_info;

        try_files $fastcgi_script_name =404;

        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $path_info;
        fastcgi_param HTTPS on;

        fastcgi_param modHeadersAvailable true;         # Avoid sending the security headers twice
        fastcgi_param front_controller_active true;     # Enable pretty urls
        fastcgi_pass php-handler;

        fastcgi_intercept_errors on;
        fastcgi_request_buffering off;
    }

    location ~ \.(?:css|js|svg|gif)$ {
        try_files $uri /index.php$request_uri;
        expires 6M;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    location ~ \.woff2?$ {
        try_files $uri /index.php$request_uri;
        expires 7d;         # Cache-Control policy borrowed from `.htaccess`
        access_log off;     # Optional: Don't log access to assets
    }

    location / {
        try_files $uri $uri/ /index.php$request_uri;
    }
}

Проверьте синтаксис файла конфигурации:

# nginx -t

И перезапустите Nginx, чтобы конфигурация засчиталась:

# systemctl restart nginx

4.4. Выход из режима обслуживания.

Для отключения режима обслуживания выполним команду:

# sudo -u nginx php /var/www/nextcloud/occ maintenance:mode --off

Когда вы выводите сервер из режима обслуживания, вошедшие в систему пользователи должны обновить свои страницы в web-браузерах.

5. Устранение замечаний после обновления.

Зайдем в Настройки облачного хранилища Nextcloud, чтобы узнать результаты самодиагностики текущего вариант развернутой нами версии:

Найдем пункт Общие сведения и перейдем в него:

После некоторого времени самотестирования системы мы можем получить вот такой результат:

Все способы устранения замечаний уже имеются на моём сайте.

Ссылка: https://hamsterden.ru/category/rz-nextcloud/nextcloud-troubleshooting/.

После устранения всех замечаний, заново открываем раздел Общие сведения и всё должно быть в порядке:

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

Ссылка на сканер: scan.nextcloud.com.

Результат должен быть положительным и примерно вот таким, с поправкой на вашу актуальную версию Nextcloud:

Готово! Облачное хранилище Nextcloud готово к эксплуатации.

6. Оригиналы источников информации.

  1. docs.nextcloud.com «How to upgrade».
  2. docs.nextcloud.com «Upgrade manually».
  3. docs.nextcloud.com «Installation and server configuration
  4. docs.nextcloud.com «Nginx configuration».