Обновление установки

Обновление TSync — это две вещи, именно в таком порядке: новые файлы попадают на сервер, затем база данных подтягивается к ним. Эта страница проходит по обоим шагам и, что важнее, объясняет, что именно говорят вам экраны по ходу дела.

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


Прежде всего: сделайте резервную копию

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

Теперь TSync её требует. При открытии экрана обновления сначала выполняется короткий список проверок, и самая первая — «есть ли резервная копия и насколько она старая?». Если её нет вообще, проверка отмечается красным, а в сводке написано «1 needs your confirmation».

Резервную копию можно сделать прямо там, с экрана обновления, кнопкой Take a database backup now. Если ваш хостинг не позволяет встроенному механизму работать — часть виртуальных хостингов его блокирует — экран скажет об этом прямо и предложит сделать копию из панели управления хостингом.

Либо можно принять риск и продолжить. Отсутствующая копия — единственный красный пункт, о котором решаете вы сами: отметьте подтверждение над кнопкой — «I accept the risk marked in red above and want to continue anyway» — и обновление запустится. Все остальные красные пункты описывают состояние сервера (слишком старый PHP, папка, в которую обновление не может писать, оставшиеся файлы-дубликаты), и никакое подтверждение их не изменит: кнопка останется выключенной, пока они не исправлены по-настоящему.


Шаг 1 — новые файлы на сервере

Загрузите архив релиза в папку temp/ и дайте TSync распаковать его за вас.

  1. Загрузите tsync-erp-vX.Y.Z-….zip в temp/ (по FTP или через файловый менеджер хостинга).

  2. Создайте одноразовый файл-ключ. Подойдёт любой случайный текст; через SSH:

    printf '%s' "$(openssl rand -hex 16)" > temp/tsync-upgrade.allow
    

    Если SSH нет, создайте temp/tsync-upgrade.allow в файловом менеджере и вставьте туда любой длинный случайный текст.

  3. Откройте https://ваш-домен/tsync_upgrade/index/ и добавьте ровно этот текст.

  4. Выберите архив и нажмите Extract.

Что он делает за вас, чтобы вам не пришлось это помнить

  • Сначала переводит сайт в режим обслуживания, чтобы никто не попал на наполовину заменённую установку.
  • Распаковывает всё, кроме ваших загруженных файлов, логотипа и оформления, настроек базы данных, кэшей и журналов. Их не трогают никогда — этот список зашит в продукт, а не держится в голове у того, кто разворачивает обновление.
  • В том же проходе убирает папку установщика. (Оставленная на месте, она намеренно отключает сайт — установщик, доступный из интернета, это реальная опасность.)
  • Очищает файловый кэш PHP, чтобы новый код заработал сразу, а не после какой-то будущей перезагрузки.
  • Кладёт заметки о релизе туда, где их ищет экран обновления.
  • Запирается снова. Файл-ключ удаляется, поэтому адрес нельзя использовать повторно. В следующий раз создайте новый.

Есть и режим только предпросмотр: он покажет, что именно изменилось бы, и не запишет ничего.


Шаг 2 — база данных подтягивается

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

Вы увидите Database upgrade required с версией, с которой вы уходите, и той, к которой идёте.

Перед запуском

Разверните Before you start. Каждая строка — либо в порядке, либо стоит посмотреть, либо требует исправления:

Проверка Почему это важно
Резервная копия базы Единственный путь назад. Отмечается красным, если копии не было никогда, — но можно отметить подтверждение и продолжить.
Инструмент резервного копирования Может ли сервер вообще сделать копию за вас.
Версия PHP и расширения Обновлению они нужны; их отсутствие останавливает процесс чисто, а не на середине.
Время выполнения Не проблема — именно оно определяет длительность каждого прохода.
Свободное место на диске Копии и архиву нужно место.
Права в базе данных Обновление создаёт и меняет таблицы. Проверяется по-настоящему, на служебной таблице.
Файлы миграций Ловит дубликаты, оставшиеся от прошлого обновления, — иначе они остановят всё.
Права на папки Папки, в которые обновление пишет.

Что будет выполнено

Разверните What will run, чтобы увидеть точный список шагов, каждый со своей версией, и пометку на тех, что меняют структуру базы. На этот момент не выполнено ничего — список только сокращается по ходу обновления.

Запуск

Нажмите Run upgrade now. Появится индикатор прогресса, который двигается по мере завершения шагов.

Работа идёт короткими проходами. TSync читает, сколько времени ваш хостинг отводит одной странице, останавливается заметно раньше этого предела и продолжает автоматически. Он никогда не начинает шаг, который не успеет закончить. На очень старой установке шагов могут быть сотни, а проходов много — это нормально, и вы видите, как это происходит.


Если обновление прервалось

Этот раздел стоит прочитать дважды.

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

Каждый шаг записывает себя в тот момент, когда завершается. Поэтому:

  1. Снова откройте админ-панель.
  2. Экран теперь скажет «The upgrade was interrupted, not failed» и покажет, до какого шага дошло.
  3. Нажмите Continue the upgrade.

Процесс продолжится с этого места. Он не повторяет сделанное и не начинает заново.

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

Если шаг действительно упал, экран скажет, какой именно и почему, а всё сделанное до него останется применённым. Устраните причину и нажмите Continue.


Что видят клиенты и посетители

Пока обновляется база данных, все остальные посетители получают короткую страницу «Maintenance in progress» с корректным техническим статусом, чтобы браузеры и поисковые системы знали, что нужно вернуться позже, а не фиксировали ошибку.

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

Вас это не касается: ссылка, по которой вы перешли из распаковщика, несёт ключ, пропускающий вас насквозь.


С какой версии можно обновляться?

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

Если версия старше или вы не уверены — используйте поэтапный путь из UPGRADE.md и сначала на копии. Если вы переносите очень старую установку, свяжитесь с нами: это другая работа, нежели обновление, и Центр обновления создан именно для неё.


Одно действие вручную, один раз

В прежних релизах в корне сайта поставлялся файл opcache_reset.php. Он очищал кэш PHP, но не требовал никакой авторизации, а такому не место в открытом доступе на публичном сайте.

Он больше не входит в релиз, и распаковщик теперь делает эту работу сам. Но обновление только добавляет и заменяет файлы — оно никогда ничего не удаляет. Поэтому после обновления удалите opcache_reset.php из корня сайта.


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

В вашей установке есть папка tools/. В ней лежат два файла, которые страница Здоровье читает с диска, чтобы понимать, о каких известных проблемах вас больше не предупреждать. Паролей в них нет — но в них описано, какие внутренние проверки безопасности были отложены и в каких файлах, а это не то, что должен иметь возможность скачать посторонний.

Отвечать по HTTP им никогда не требовалось. С этой версии в поставку входит правило, закрывающее папку — и для Apache, и для IIS.

Одна проверка, один раз, после обновления. Откройте в браузере этот адрес, подставив свой домен:

https://ваш-домен.com/tools/release_quality_allowlist.json
  • Должно появиться «Forbidden» или «Not found». Это правильно.
  • Если файл скачивается или открывается, ваш веб-сервер не читает правило из поставки. Обычно так на nginx. Попросите администратора сервера закрыть папку tools/ в его конфигурации.

Это единственная часть исправления, которую нельзя сделать изнутри приложения: что отдавать наружу, решает только ваш веб-сервер.


После обновления

  • Откройте админ-панель — версия в Настройки → Info должна быть новой.
  • Откройте и собственный клиентский портал, а не только админ-панель. Достаточно страницы входа. Это единственный способ заметить целый класс проблем, который никогда не проявляется на той стороне, где вы работаете каждый день.
  • Если что-то выглядит устаревшим, это почти всегда кэш. Кэш PHP чистит распаковщик; кэш браузера — жёсткая перезагрузка.