Пошаговая записка как обновлял Mastodon с версии 4.2 до версии 4.3 запущенного в докере. Все особенности релиза читать тута. Данная инструкция подходит только для ванильной версии установленного инстанса на сервере, такой как у меня, без всяких дополнений.

Итак, заходим на сервер по SSH меняем каталог на тот где живет Mastodon cd mastodon

Создать бэкап

Как делать бэкап писал тута - Сохранить нужное для работы Mastodon и Backup Mastodon В моем случае запустить скрипт ./clear-cron-backup.sh

Остановить контейнеры

docker compose down
[+] Running 7/7
 ✔ Container mastodon-sidekiq-1       Removed
 ✔ Container mastodon-web-1           Removed
 ✔ Container mastodon-streaming-1     Removed
 ✔ Container mastodon-db-1            Removed
 ✔ Container mastodon-redis-1         Removed
 ✔ Network mastodon_internal_network  Removed
 ✔ Network mastodon_external_network  Removed

Обновить Mastodon

git fetch
remote: Enumerating objects: 9130, done.
remote: Counting objects: 100% (4945/4945), done.
remote: Compressing objects: 100% (21/21), done.
remote: Total 9130 (delta 4925), reused 4941 (delta 4924), pack-reused 4185 (from 1)
Receiving objects: 100% (9130/9130), 11.18 MiB | 12.86 MiB/s, done.
Resolving deltas: 100% (7409/7409), completed with 1462 local objects.
From https://github.com/tootsuite/mastodon
 * [new branch]          backports/4.3                                 -> origin/backports/4.3
 * [new branch]          build-stable-nightly                          -> origin/build-stable-nightly
 * [new branch]          cleanup/remove-old-notifications              -> origin/cleanup/remove-old-notifications
 * [new branch]          cleanup/simplify-css                          -> origin/cleanup/simplify-css
 * [new branch]          design/notifications-grid                     -> origin/design/notifications-grid
 * [new branch]          feature-post-layout                           -> origin/feature-post-layout
 * [new branch]          features/media-description-in-embedded-status -> origin/features/media-description-in-embedded-status
 * [new branch]          fix-context-socialweb-miscellany              -> origin/fix-context-socialweb-miscellany
 * [new branch]          fix-lookup-domain                             -> origin/fix-lookup-domain
 * [new branch]          fixes/crash-orphaned-notification             -> origin/fixes/crash-orphaned-notification
 * [new branch]          fixes/dashboard-quick-access-overflow         -> origin/fixes/dashboard-quick-access-overflow
 + 452236ece...df9352a8f fixes/detect-missing-indexes2                 -> origin/fixes/detect-missing-indexes2  (forced update)
 * [new branch]          fixes/different-strings-private-messages      -> origin/fixes/different-strings-private-messages
 * [new branch]          fixes/mastodon-setup-task-redis               -> origin/fixes/mastodon-setup-task-redis
 * [new branch]          fixes/middle-column-size                      -> origin/fixes/middle-column-size
 * [new branch]          fixes/notification-excerpt-paragraph          -> origin/fixes/notification-excerpt-paragraph
 * [new branch]          fixes/notification-excerpt-paragraph-take-two -> origin/fixes/notification-excerpt-paragraph-take-two
 + 52c56ed5a...868de9272 fixes/out-of-order-private-posts              -> origin/fixes/out-of-order-private-posts  (forced update)
 * [new branch]          fixes/regexp-timeout-optional                 -> origin/fixes/regexp-timeout-optional
 * [new branch]          fixes/small-otp-secret-length-4.1             -> origin/fixes/small-otp-secret-length-4.1
 * [new branch]          fixes/small-otp-secret-length-4.2             -> origin/fixes/small-otp-secret-length-4.2
 * [new branch]          fixes/suppress-follow-recommendations         -> origin/fixes/suppress-follow-recommendations
 * [new branch]          flaky-conversations-test                      -> origin/flaky-conversations-test
 + 3dbaa1fbd...6d7f88c5a i18n/crowdin/translations                     -> origin/i18n/crowdin/translations  (forced update)
   28411aceb..e15befebb  main                                          -> origin/main
 * [new branch]          more-explicit-fediverse-actor                 -> origin/more-explicit-fediverse-actor
 * [new branch]          renovate/babel-monorepo                       -> origin/renovate/babel-monorepo
 * [new branch]          renovate/definitelytyped-types-(non-major)    -> origin/renovate/definitelytyped-types-(non-major)
 * [new branch]          renovate/eslint-(non-major)                   -> origin/renovate/eslint-(non-major)
 * [new branch]          renovate/express-5.x                          -> origin/renovate/express-5.x
 * [new branch]          renovate/formatjs-monorepo                    -> origin/renovate/formatjs-monorepo
 + 70d6b71b8...37c5b8f00 renovate/glob-11.x                            -> origin/renovate/glob-11.x  (forced update)
 * [new branch]          renovate/major-formatjs-monorepo              -> origin/renovate/major-formatjs-monorepo
 * [new branch]          renovate/major-react-monorepo                 -> origin/renovate/major-react-monorepo
 * [new branch]          renovate/mime-types-3.x                       -> origin/renovate/mime-types-3.x
 * [new branch]          renovate/omniauth-packages                    -> origin/renovate/omniauth-packages
 * [new branch]          renovate/react-textarea-autosize-8.x-lockfile -> origin/renovate/react-textarea-autosize-8.x-lockfile
 * [new branch]          renovate/sass-1.x-lockfile                    -> origin/renovate/sass-1.x-lockfile
 * [new branch]          renovate/ubuntu-24.x                          -> origin/renovate/ubuntu-24.x
   ff90ebffa..bea446d89  stable-4.1                                    -> origin/stable-4.1
   a5b4a2b7e..02e7fbb56  stable-4.2                                    -> origin/stable-4.2
 * [new branch]          stable-4.3                                    -> origin/stable-4.3
 * [new tag]             v4.3.0                                        -> v4.3.0
 * [new tag]             v4.1.19                                       -> v4.1.19
 * [new tag]             v4.1.20                                       -> v4.1.20
 * [new tag]             v4.2.11                                       -> v4.2.11
 * [new tag]             v4.2.12                                       -> v4.2.12
 * [new tag]             v4.2.13                                       -> v4.2.13
 * [new tag]             v4.3.0-beta.1                                 -> v4.3.0-beta.1
 * [new tag]             v4.3.0-beta.2                                 -> v4.3.0-beta.2
 * [new tag]             v4.3.0-rc.1                                   -> v4.3.0-rc.1

Файл docker-compose.yml будет обновлен, если были какие то дополнения они пропадут. Я решил не парицо с конфликтами.

git checkout -- docker-compose.yml
git checkout v4.3.0

Только теперь в ручную надо добавить то что было с временными зонами для каждого контейнера. Добавил строку в каждый контейнер nano docker-compose.yml :

    environment:
      - TZ=Europe/Moscow

Если изменения очень хочется оставить в кастомном конфиге тоды:

git add docker-compose.yml
git commit -m "Сохранить изменения в docker-compose.yml"

А потом ручками уже дописать произошедшие изменения. По большому счету ничего не изменилось, только пара строк в контейнерах web и streaming

Генерация секретов для шифрования

Это новый шаг, который нужно выполнить для версии 4.3.0. Секреты шифрования необходимы для новой функциональности. Выполнить команду для генерации секретов:

docker compose run --rm web bin/rails db:encryption:init

Секреты, которые будут сгенерированы, нужно будет добавить в файл .env.production. Если несколько узлов Mastodon (например, на разных серверах), эти секреты нужно скопировать на все узлы.

[+] Creating 4/4
 ✔ Network mastodon_external_network  Created
 ✔ Network mastodon_internal_network  Created
 ✔ Container mastodon-redis-1         Created
 ✔ Container mastodon-db-1            Created
[+] Running 2/2
 ✔ Container mastodon-redis-1  Started
 ✔ Container mastodon-db-1     Started
[+] Running 21/21
 ✔ web Pulled
   ✔ 302e3ee49805 Pull complete
   ✔ 26b4e852792b Pull complete
   ✔ 4dd70af4081c Pull complete
   ✔ 5619e8eef3a2 Pull complete
   ✔ 937b49256a9f Pull complete
   ✔ 4f4fb700ef54 Pull complete
   ✔ a631acc9aa72 Pull complete
   ✔ 234bff3b3a1f Pull complete
   ✔ 7a929007a760 Pull complete
   ✔ e60bef0281db Pull complete
   ✔ 5bcf7e7aa2c2 Pull complete
   ✔ f4fb4dab301f Pull complete
   ✔ 405a1c8eb74c Pull complete
   ✔ 8cf8e13d8e55 Pull complete
   ✔ d1115ae56ca7 Pull complete
   ✔ 10240c6cf1b0 Pull complete
   ✔ 89b725606352 Pull complete
   ✔ 837be12cf02c Pull complete
   ✔ 3fab0d761410 Pull complete
   ✔ d5b3dffa1bed Pull complete
Add these secret environment variables to your Mastodon environment (e.g. .env.production):

ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=Gt4cWnB9dGBxi6uaIDK3to7WW0iQrPRX
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=8SSGZIbKxG2FtjuzbLI41pNJAz1hkeJE
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=0fmC4rUtD0xzYzqxLU5avwtFM7ArVQTY
nano .env.production

Вставить куда нить в конец, то что будет выведено в последних строках:

ACTIVE_RECORD_ENCRYPTION_DETERMINISTIC_KEY=Gt4cWnB9dGBxi6uaIDK3to7WW0iQrPRX
ACTIVE_RECORD_ENCRYPTION_KEY_DERIVATION_SALT=8SSGZIbKxG2FtjuzbLI41pNJAz1hkeJE
ACTIVE_RECORD_ENCRYPTION_PRIMARY_KEY=0fmC4rUtD0xzYzqxLU5avwtFM7ArVQTY

Предварительная миграция базы данных

В версии 4.3.0 перед развертыванием необходимо выполнить миграцию базы данных с переменной SKIP_POST_DEPLOYMENT_MIGRATIONS=true:

docker compose run --rm -e SKIP_POST_DEPLOYMENT_MIGRATIONS=true web bundle exec rails db:migrate

Запуск контейнеров заново

docker compose up -d

Миграция базы данных после развертывания

После перезапуска контейнеров нужно выполнить миграцию базы данных без переменной SKIP_POST_DEPLOYMENT_MIGRATIONS:

docker compose run --rm web bundle exec rails db:migrate

Перестроить индекс поиска (если используется Elasticsearch или OpenSearch)

docker compose run --rm web bin/tootctl search deploy --only=accounts