Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
48
Help us understand the problem. What are the problem?

More than 5 years have passed since last update.

@nobuhito

GitLabを他のマシンに載せ替える方法

遊んでるサーバーにテスト的に導入してみた GitLab が思いの外使えるので本格的に使用すべく性能が良いサーバーに格上げするためにデータ移行するという、よくあるパターンの作業メモ。

元ネタはこちらから拝借したのだけど、Debのパッケージ使ってたり内容が古かったりしたので簡単にまとめてみる。
(参考)Gitlabの移行作業

全体の流れとしては、

  1. 移行元で GitLab を最新版にあげておく
  2. 移行先で最新版の GitLab をインストールしておく
  3. 移行元の /home/git を 移行先の /home/git にコピー
  4. MySQLのデータを移行元から mysqldump で取り出し、移行先のMySQLに突っ込む

だけでいける。簡単に言うと。
移行先と移行元で「git」ユーザーが同じUIDなことが前提。

でも、ところどころハマるところがあるので、以下作業ログ。

まずはここらへんを参考にして、移行元の GitLab を最新版にアップデートさせる。

アップデート後の今回の環境は以下のとおり。基本的にインストールマニュアル通りにインストールして、アップデートマニュアル通りにアップデートさせてきた感じ。

# sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

System information
System:         Ubuntu 13.04
Current User:   git
Using RVM:      no
Ruby Version:   1.9.3p392
Gem Version:    1.8.23
Bundler Version:1.3.5
Rake Version:   10.1.0

GitLab information
Version:        6.4.3
Revision:       38397db
Directory:      /home/git/gitlab
DB Adapter:     mysql2
URL:            http://git.example.net
HTTP Clone URL: http://git.example.net/some-project.git
SSH Clone URL:  git@git.example.net:some-project.git
Using LDAP:     yes
Using Omniauth: no

GitLab Shell
Version:        1.8.0
Repositories:   /home/git/repositories/
Hooks:          /home/git/gitlab-shell/hooks/
Git:            /usr/bin/git

次にここらへんを参考にして、移行先に最新版の GitLab をインストールする。最終的には移行元のファイルで上書きするんだけど、ライブラリのインストールとかも含めて全部やっておくと安心。

これで移行元と移行先の環境が整ったので、実際のデータの移行を始める。今回は古いサーバーの方にWebDAVサーバーを立ててあったので、そこ経由でデータをやりとりすることにした。USBメモリとかあればそっちのほうが楽だと思うので、その場合は curl コマンドを無視してください。

まずは移行元サーバーでの作業。

cd /home

# gitlab-satellitesは後から再作成するしbundle/rubyは移行先の環境で入れなおすんで不要
sudo tar zPcvf git.tar.gz --exclude gitlab-satellites --exclude bundle/ruby git
sudo mysqldump -u gitlab -p -n gitlabhq_production > ~/dump

# WebDAV以外でデータをやりとりする場合は不要
curl --upload git.tar.gz http://example.net/dav/
curl --upload ~/dump http://example.net/dav/

次は移行先サーバーでの作業

# WebDAV以外でデータをやりとりする場合は不要
curl -O http://example.net/dav/git.tar.gz
curl -O http://example.net/dav/dump

cd /home

# 新しく作ったGitLabの環境に移行元の環境を上書き
sudo tar zxvfp ~/git.tar.gz
# MySQLにダンプを突っ込む
cat ~/dump | mysql -u root -p gitlabhq_production

# Rubyライブラリの入れなおし
sudo -u git -H bundle install --deployment --without development test postgres aws
# gitlab-satellitesの再作成
sudo -u git -H bundle exec rake gitlab:satellites:create RAILS_ENV=production

# インストールマニュアル通りにやってきたのだが、途中でユーザー名が「git」から「gitlab」に変わったみたい
mysql -u root -p
create user 'gitlab'@'localhost' identified by 'XXXXX';
grant select, lock tables, insert, update, delete, create, drop, index, alter on `gitlabhq_production`.* to 'gitlab'@'localhost';

# 環境確認と再起動
sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production
/etc/init.d/gitlab restart
/etc/init.d/nginx restart
sudo -u git -H bundle exec rake gitlab:check RAILS_ENV=production

うまく行けばこれで移行完了なはず。

ちなみに移行後の環境はこんな感じ。

# sudo -u git -H bundle exec rake gitlab:env:info RAILS_ENV=production

System information
System:         Debian 7.3
Current User:   git
Using RVM:      no
Ruby Version:   2.0.0p353
Gem Version:    2.0.14
Bundler Version:1.5.1
Rake Version:   10.1.0

GitLab information
Version:        6.4.3
Revision:       38397db
Directory:      /home/git/gitlab
DB Adapter:     mysql2
URL:            http://git.example.net
HTTP Clone URL: http://git.example.net/some-project.git
SSH Clone URL:  git@git.example.net:some-project.git
Using LDAP:     yes
Using Omniauth: no

GitLab Shell
Version:        1.8.0
Repositories:   /home/git/repositories/
Hooks:          /home/git/gitlab-shell/hooks/
Git:            /usr/bin/git

UbuntuからDebian、Rubyのバージョンも1.9から2.0へアップグレードで問題なく移行できた。
思ったより簡単!Gitlab素晴らしい!

オリジナルポストは こちら

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
48
Help us understand the problem. What are the problem?