Перейти до вмісту

Оновлення

Як дізнатися про нову версію

Section titled “Як дізнатися про нову версію”

Кожна версія сайту має номер виду 1.2.0. Поточний номер видно:

  • в адмін-панелі — «Версія 1.1.0» внизу бокового меню (клік відкриває «Що нового»);
  • у https://school.example.ua/health — поле "version".

Раз на добу сайт питає GitHub, чи вийшла новіша версія (звідки питати — UPDATE_REPO у .env). Якщо так, адміністратор бачить на дашборді: «Доступна версія 1.2.0 — як оновити →» з посиланням на сторінку релізу. Там описано, що змінилося. Той самий номер — у полі "latestVersion" повної відповіді /health (з заголовком Authorization: Bearer <HEALTH_TOKEN>; без нього /health показує лише status і version).

Сам сайт нічого не завантажує й не встановлює — оновлення завжди робите ви, коли вирішите.

Повідомлення не буде, якщо:

  • UPDATE_REPO порожній або UPDATE_CHECK=0;
  • UPDATE_REPO вказує на приватний репозиторій — GitHub не показує його релізи без входу, і дашборд мовчить. Офіційні релізи — у tabula-cms/tabula.

Пробні версії (з суфіксом, наприклад 1.2.0-rc.1) дашборд не пропонує.

  1. Прочитайте, що змінилося, — сторінку релізу за посиланням на дашборді.

  2. Зробіть бекап: в адмін-панелі «Бекапи» → «Зробити бекап».

  3. На сервері:

    Terminal window
    ssh deploy@<IP>
    cd /opt/tabula/app
    git fetch --tags
    git checkout v1.2.0
    nano .env # APP_IMAGE=ghcr.io/tabula-cms/tabula:1.2.0
    docker compose -f docker-compose.prod.yml pull
    docker compose -f docker-compose.prod.yml run --rm --no-deps --user root app chown -R app:app /data /backups
    docker compose -f docker-compose.prod.yml up -d

    git checkout оновлює файли запуску (docker-compose.prod.yml, шаблон nginx, скрипти): вони живуть у репозиторії, а не в образі, тож мають відповідати версії образу.

    Рядок із chown віддає каталоги data і backups користувачу, від якого працює сайт у новому образі. Зазвичай він нічого не змінює, але коли цей користувач у новій версії інший (так було з переходом на версію, що вийшла після 1.1.0), без нього сайт не зможе записувати базу й бекапи.

  4. Перевірте:

    • curl -s https://school.example.ua/health показує "version":"1.2.0";
    • внизу бокового меню адмін-панелі — «Версія 1.2.0»;
    • сайт відкривається, в адмін-панель можна увійти.

Зміни в базі даних, потрібні новій версії, виконуються самі при її першому запуску.

Старі образи займають місце на диску. Після успішного оновлення їх можна прибрати — ця команда видаляє образи, якими не користується жоден контейнер і які старші за тиждень (попередню версію на випадок повернення pull за потреби завантажить знову):

Terminal window
docker image prune -af --filter "until=168h"

Без -a (docker image prune -f) видаляються лише образи без назви — старі версії з номером лишилися б на диску.

Не ставте :latest замість номера в APP_IMAGE: тоді будь-який pull оновить сайт, щойно вийде нова версія, а не тоді, коли ви вирішили.

Якщо після оновлення щось зламалось — повернутися назад

Section titled “Якщо після оновлення щось зламалось — повернутися назад”

Поверніть попередній номер версії:

Terminal window
cd /opt/tabula/app
git checkout v1.1.0
nano .env # APP_IMAGE=ghcr.io/tabula-cms/tabula:1.1.0
docker compose -f docker-compose.prod.yml pull
docker compose -f docker-compose.prod.yml run --rm --no-deps --user root app chown -R app:app /data /backups
docker compose -f docker-compose.prod.yml up -d

Зміни в базі даних назад не відкочуються: попередня версія працює з новішою базою, поки нова версія не прибрала з бази те, на що покладається стара. Якщо після повернення сайт усе одно не працює, відновіть бекап, зроблений перед оновленням (крок 2), — див. Бекапи і відновлення.

Опишіть, що саме зламалось, автору проєкту (див. SECURITY.md для вразливостей і Issues проєкту для решти).