Закулисье
Переезд сервиса на Timeweb: история и одна подлая грабля
10 июня 2026 г. · 6 мин чтения
Polkka работает на self-hosted Supabase — это не «одна база», а 13 docker-контейнеров: Postgres, Auth, Storage, Realtime и компания. Переезд между серверами здесь — это три отдельные задачи: схема и данные БД, файлы хранилища, конфиги и секреты.
Зачем переезжал
- Цена. Конфигурация в Яндекс Cloud выходила в ~3 200 ₽/мес, аналог в Timeweb — около 2 000 ₽.
- Диск. На старом сервере упёрся в 91% заполнения, на новом взял 50 ГБ NVMe с запасом.
Подлая грабля: невидимые xattr
Файлы Supabase Storage (аватары пользователей) я перенёс обычным tar. Файлы на месте, права на месте — а хранилище отдаёт 500-ю с ошибкой ENODATA. Полдня на диагностику.
Причина: Supabase Storage хранит часть метаданных в расширенных атрибутах файлов (xattr), а обычный tar или scp их не переносит. Лечится флагом: tar --xattrs --xattrs-include="*" с обеих сторон.
Чек-лист, чтобы не наступить
- БД — только через pg_dump (отдельно public и отдельно auth), не копировать каталог Postgres.
- Storage — tar с флагом --xattrs, иначе ENODATA и 500.
- .env переносить один-в-один: если поменять JWT-секрет, все сессии пользователей слетят.
- DNS переключить, старый сервер подержать на время TTL, потом гасить.
Переезд занял один плотный день, аренда упала на ~1 200 ₽/мес, пользователи ничего не заметили. Самое дорогое по времени — не база, а невидимые атрибуты у файлов.