Пошаговая записка как обновлял 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
Комментарии