Migrating Atlassian Bitbucket from Windows to Linux
Продолжаем постепенно разгребать существующую архитектуру на работе, наконец-то добрался до Atlassian Bitbucket. Для тех кто не в курсе, это локальная версия bitbucket.org, а для тех кто совсем не в курсе, это возможность коллективной работы над исходным кодом проекта (ов).
Ну так вот. Не буду вдаваться в детали и историю, но исторически так сложилось что все это добро проживает на Windows 7 (которой уже больше 5 лет) и в качестве внешней СУБД используется MSSQL. Так же там есть куча всякого не нужного уже добра… с учетом всего этого добра объем занимаемой виртуалки порядка 150Гб. Простой калькуляцией объем реальных данных составляет 3Гб на исходники и 100Мб на базу. КПД стремится к нулую, в общем.
Сначала идея была просто мигрировать на новую винду. Потом я все же решил пойти по пути наименьшего сопротивления и экономить на размерах виртуалок и развернуть все под Ubuntu. Googling как-то ничего похожего по миграции не нашел, поэтому и родилась данная статья. Для аккуратного переноса нам потребуется:
1. Временный сервак с той же версией MSSQL. Я не использовал боевой сервер, т.к. сегодня были учения )) Разработчики проверят результат, потом на выходных или вечером сделаю еще раз уже с боевого. Нужно развернуть базу для Bitbucket с тем же паролем и пользователем.
2. Виртуалка с Ubuntu. По памяти 4Гб достаточно, по виртуальным процам – от 4 и выше, я отдал все 8 🙂 Самым требовательным там является elastic search, как оказалось… постоянно что-то делает 🙂
3. Скачиваем последнюю версию Bitbucket с сервера (из личного кабинета). Устанавливаем как новый инстанс. Я все ставил в /opt (отдельный виртуальный диск). Останавливаем.
4. Распаковываем Application Data в указанную при установке папку. По идее, можно запустить и глянуть на ошибки. Ошибка будет про недоступность СУБД, т.к. обычно совмещают базу и bitbucket, то есть стока подключения содержит localhost 🙂
5. Делаем туннель до нужного нам временного сервера СУБД (да, необходимо открыть MSSQL наружу) с помощью ssh:
ssh -L 1433:db_ip:1433 localhost
6. А вот теперь стартуем. Если все сделано правильно, должно взлететь. Следующий шаг – Поднимаем postgreSQL либо тут же, либо на отдельном сервере. Я выбрал отдельный. Создаем базу, пользователя. Если сервер другой, не забываем править настройки на доступ извне.
7. Последний шаг – миграция СУБД. Делается средствами самого Atlassian Bitbucket. В режиме администратора в разделе Database есть соответствующий раздел. 10 минут на копирование базы и все 🙂
Теперь про КПД. 2 инстанста с Ubuntu 16.04 это порядка 10Гб, дополнительный диск на 10Гб для /opt на первом сервере. Получаем 20Гб на HDD сервера. Ну а как будет работать – посмотрим, я думаю хорошо 🙂
UPD. Поймали 1ю багу : https://confluence.atlassian.com/stashkb/git-hook-scripts-are-not-executing-693896547.html Проблема в том что часть скриптов должна быть исполняемой. Чиним легко.
cd /opt/atlassian/application-data/bitbucket/shared/data/repositories
find . -iname "pre-receive" -exec chmod +x {} \;
find . -iname "20_stash_callback" -exec chmod +x {} \;