Мигриране на gitlab сървър към omnibus пакет.
Имам инсталиран гитлаб сървър от едно време, като самата инсталация съм я правил по старомодния начин – https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/install/installation.md
Обновяването му става доста сложно, като всеки път е нужно да правя 100 (пише ги в https://gitlab.com/gitlab-org/gitlab-ce/tree/master/doc/update). Обаче когато обнових до версия 8.1.4 се натъкнах на проблеми:
1. Неможех да push-вам към репотата си.
2. Неможех да pull-вам от репотата си.
error: Cannot access URL http://git.root.bg/root/fosnginx.git/, return code 22
fatal: git-http-push failed
error: failed to push some refs to 'http://git.root.bg/root/fosnginx.git'
Реших да обновя до версия 8.2 но нещата не се оправиха – остана си същата каша. Така реших да мигрирам стария си gitlab сървър към omnibus пакета от gitlab.
За целта пробвах да направя цялата схема на същата виртуалка където живее git-a ми, обаче нещата не се получиха, и затова си направих нова и направих самата миграция по следният начин :
1. На стария gitlab сървър направих бекъп на базата (там е MySQL, а при omnibus се ползва postgres) :
cd /home/git/gitlab
bundle exec rake gitlab:backup:create RAILS_ENV=production
2. Dump-нах базата на gitlab-a (в случая се казваше gitlabhq_production) :
mysqldump --compatible=postgresql --default-character-set=utf8 -r current_install.mysql -u root gitlabhq_production -p
3. Създадох си работна папка в която копирах бекъпа на базата и бекъпа на gitlab-a :
mkdir ˜/gitlab-bkp
cp /home/git/gitlab/tmp/1449128605_gitlab_backup.tar ˜/gitlab-bkp
cp current_install.mysql ˜/gitlab-bkp
Разархивирах архива :
tar xvf ˜/gitlab-bkp/1449128605_gitlab_backup.tar
Изтеглих mysql-postgresql-converter
git clone https://github.com/gitlabhq/mysql-postgresql-converter.git
и мигрирах MySQL базата ми към Postgres такава.
cd ~/mysql-postgresql-converter
python db_converter.py ~/current_install.mysql ~/database.psql
След това копирах database.psql в директория ˜/gitlab-bkp/db/ , като изтрих файла ˜/gitlab-bkp/db/database.sql.gz и направих нов архив :
mv ~/database.psql db/database.sql
gzip database.sql
Накрая създадох бекъп архива на gitlab-a на ново със същото име :
cd ~/gitlab-bkp && tar -zcvf ~/1449128605_gitlab_backup.tar .
4. На новата виртуалка която вече бях създал (чист debian 7) дръпнах версията на omnibus пакета за която е и моя бекъп. Това е важно, защото иначе дава грешка при restore , като изписва че версиите несъответстват. В моят случай версията беше 8.1.3 и изпълних следните команди :
curl -s https://packages.gitlab.com/install/repositories/gitlab/gitlab-ce/script.deb.sh | sudo bash
sudo apt-get install gitlab-ce=8.1.3-ce.0
Изчаках да се изтегли и инсталира gitlab-ce , и след това изпълних :
sudo gitlab-ctl reconfigure
Уверих се че всичко минава по план и няма грешки :
Chef Client finished, 204/228 resources updated in 93.796473261 seconds
gitlab Reconfigured!
.. и след като приключи процеса с преконфигурирането, спрях следните процеси : unicorn и sidekiq , и копирах архива от старата машина в директория /var/opt/gitlab/backups и пуснах да възтановявам от него :
root@git:~# gitlab-ctl stop unicorn
ok: down: unicorn: 1s, normally up
root@git:~# gitlab-ctl stop sidekiq
ok: down: sidekiq: 0s, normally up
root@git:~# mv 1449128605_gitlab_backup.tar /var/opt/gitlab/backups/
root@git:~# gitlab-rake gitlab:backup:restore BACKUP=1449128605
Възтановяването отне няколко минути , и след като приключи рестартирах всички gitlab процеси :
gitlab-ctl restart
Вече имах работещ gitlab сървър посредством omnibus пакет. Така вече лесно можеш да обновявам gitlab само чрез командата :
apt-get update && apt-get -u dist-upgrade -y
Това и направих и обнових до версия 8.2.2
Накрая спрях старата машина и сложих айпито и на новата. По този начин успях процеса с миграцията и обновяването приключи и gitlab сървъра продължи да работи коректно, без грешки и бъгове!
Това е