GitLab 9.0.2 ソースインストール版からGitLab CE Omnibusに移行

2017年4月5日(約7年前)の記事となっております。色々ご注意ください。

GitLab 6.8 から GitLab 8.9.0 までソースインストール版を利用してきていましたが、以前から気になっていた GitLab CE Omnibus 版に切り替えていくことにします。

GitLab CE Omnibus 版ってなに?

そもそもGitLab CE Omnibus 版ってなに?ってことですが、ひとことで言うと yum版です。

yum install gitlab みたいな感じでインストールやアップデートできるようになります。

私がGitLabを触り始めたころはソースインストール版しかなく、RubyやRailsなど自分で環境を揃えてセットアップしていました。その大変さは GitLab 6.8 をソースインストール あたりを流し読めば分かってもらえるかなと思います。

アップデートの際も、GitLabのアップデートだけで終わらずにここでまた RubyやらRailsのアップデートが事前に必要だったりで、何が悪くて動かないのかさっぱり分からないまま数時間を過ごすみたいなことばかりでした。

その後しばらくしてGitLab CE Omnibus版が登場します。

ということでは、今回の記事では、ソースインストール管理でやってきたGitLabを yum 版に切り替えるお話です。

バージョンを揃える

まず最初に行うことは、現在使っているソースコード版のバージョンを GitLab CE Omnibus 版と揃えるところからです。

  • 現在利用しているソースコード版 GitLab 8.9.0
  • GitLab CE Omnibus 版 GitLab 9.0.3

ということで、まずは今まで通りソースコード版として GitLab 9.0.2 にアップデートしてやります。

手順は▼です。

GitLab 8.9.0.rc6 > 9.0.2 にソースインストールでアップデート

さて、ここで問題が発生してしまいました。

ソースコード版のインストールって手順を見て貰ったら分かるんですが、それなりに時間が掛かるんです。のんびりやってたら1日くらい掛かっちゃいます。

で、そうこうしているうちになんと、GitLab CE Omnibus 版 GitLab 9.0.3 がリリースされちゃったんですよね。

GitLabの最新版をチェックして、最新の9.0.2にアップデート完了と思ったら、その間に 9.0.3 がリリースされてたという・・・。

ここで、また9.0.3にソースインストールするのはちょっとしんどいところです。

バックアップは取ってるので、このまま進みましょう。

ということで、ソースコード版 9.0.2 から Omnibus版 9.0.3 に移行することにします。

サーバー環境

rpm -qa | grep centos-release
centos-release-6-8.el6.centos.12.3.x86_64

のちにCentOS 7 に引っ越すことになりますが、このときはまだ CentOS 6 です。

ソースコード版を停止する

service gitlab stop

起動時設定の確認

ソースコード版は使わなくなるので、Omnibus版と競合しても面倒なので停止して削除しておきます。

chkconfig --list gitlab
chkconfig gitlab off
chkconfig --list gitlab

起動スクリプトを削除

rm /etc/init.d/gitlab

PostgreSQLのインストール

GitLabは、MySQL と PostgreSQL の両方をサポートしています。
個人的にはMySQL推しなのでソースインストール版でもMySQLを使ってきていたのですが、GitLab周辺を見ていると「MySQLもサポートするけどPostgreSQL推し」って空気が漂ってきています。

こうなると、自分の好みでMySQLを選んぶより、PostgreSQL にしておいたほうが良さそうな気がします。

(追記)その後、2019年6月の発表でGitLab 12.1 以降はMySQLのサポートを停止し、PostgreSQLのサポートだけになります。私としては予感が的中した形です。

▼の記事を参考にインストールしてください。
PostgreSQL 9.4.11 をインストール

su postgres
cd
createuser git
createdb -E UTF-8 -O git gitlabhq_production
exit
vi /var/lib/pgsql/9.4/data/pg_hba.conf
host    all             all             127.0.0.1/32            md5

GitLab CE Omnibus のインストール

https://about.gitlab.com/downloads/#centos6

公式サイトの手順に従ってインストール

gitlab-ce    x86_64    9.0.3-ce.0.el6

設定

vi /etc/gitlab/gitlab.rb
external_url 'https://git.example.com'
gitlab_rails['time_zone'] = 'Asia/Tokyo'
### Email Settings
gitlab_rails['gitlab_email_enabled'] = true
gitlab_rails['gitlab_email_from'] = 'gitlab@example.com'
gitlab_rails['gitlab_email_display_name'] = 'GitLab'
gitlab_rails['gitlab_email_reply_to'] = 'noreply@example.com'
gitlab_rails['gitlab_email_subject_suffix'] = ''
### Backup Settings
###! Docs: https://docs.gitlab.com/omnibus/settings/backups.html
gitlab_rails['manage_backup_path'] = true
gitlab_rails['backup_path'] = "/var/opt/gitlab/backups"
### GitLab Shell settings for GitLab
gitlab_rails['gitlab_shell_ssh_port'] = 22230
### GitLab database settings
###! Docs: https://docs.gitlab.com/omnibus/settings/database.html
###! **Only needed if you use an external database.**
gitlab_rails['db_adapter'] = "postgresql"
gitlab_rails['db_encoding'] = "unicode"
gitlab_rails['db_collation'] = nil
gitlab_rails['db_database'] = "gitlabhq_production"
gitlab_rails['db_pool'] = 10
gitlab_rails['db_username'] = "ユーザー"
gitlab_rails['db_password'] = "パスワード"
gitlab_rails['db_host'] = "127.0.0.1"
gitlab_rails['db_port'] = 5432
################################################################
## GitLab PostgreSQL
################################################################
postgresql['enable'] = false
# nginx['ssl_dhparam'] = nil # Path to dhparams.pem, eg. /etc/gitlab/ssl/dhparams.pem
nginx['listen_addresses'] = ['0.0.0.0', '[::]']
##! **Override only if you use a reverse proxy**
##! Docs: https://docs.gitlab.com/omnibus/settings/nginx.html#setting-the-nginx-listen-port
nginx['listen_port'] = 8081
nginx['listen_https'] = false
nginx['ssl_certificate'] = "/example/ssl/ssl-example.com.crt"
nginx['ssl_certificate_key'] = "/example/ssl/ssl-example.com-no-pass.key"
gitlab-ctl reconfigure
gitlab-ctl restart

ソースコード版のDBを変換

MySQLをバックアップしてから、PostgreSQLに変換する流れです。

参考
https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/raketasks/backup_restore.md

MySQLをバックアップ

su - git
cd /home/git/gitlab
bundle exec rake gitlab:backup:create RAILS_ENV=production

MySQLからPostgreSQLに変換

https://gitlab.com/gitlab-org/gitlab-ce/blob/master/doc/update/mysql_to_postgresql.md#converting-a-gitlab-backup-file-from-mysql-to-postgres

公式の手順で行う
「Converting a GitLab backup file from MySQL to Postgres」のほうを行う

pythonのバージョンを確認

python -V
Python 2.6.6

Python 2.7 より古ければ後述のスクリプトが動かないのでPythonのバージョンアップ

インストール方法は▼をご覧ください。
Python 2.7.13 をインストール

ソースコード版を停止する

sudo service gitlab stop

更新する

su git
# バックアップを作成する
cd /home/git/gitlab
bundle exec rake gitlab:backup:create RAILS_ENV=production

# バックアップ先のパスに注意
mkdir -p tmp/backups/postgresql
mv tmp/backups/TIMESTAMP_gitlab_backup.tar tmp/backups/postgresql/

# PostgreSQL互換のデータベースに変換する
cd tmp/backups/postgresql
mysqldump --compatible=postgresql --default-character-set=utf8 -r gitlabhq_production.mysql -u root gitlabhq_production -p

# データベースコンバータのクローンを作成
git clone https://github.com/gitlabhq/mysql-postgresql-converter.git -b gitlab

# gitlabhq_production.mysql を変換
mkdir db
python2.7 mysql-postgresql-converter/db_converter.py gitlabhq_production.mysql db/database.sql
ed -s db/database.sql < mysql-postgresql-converter/move_drop_indexes.ed

# バックアップファイルを圧縮する
# Gitlab 7.12.0 以前の場合は圧縮せずに database.sql を使う
tar rf TIMESTAMP_gitlab_backup.tar db/database.sql
gzip db/database.sql

# TIMESTAMP_gitlab_backup.tar を作成(既にファイルがあれば置換)
tar rf TIMESTAMP_gitlab_backup.tar db/database.sql.gz

データベースの変換完了

TIMESTAMP_gitlab_backup.tar を使って復元します。

バックアップを戻す

gitlab-ctl stop unicorn
gitlab-ctl stop sidekiq

gitlab-rake gitlab:backup:restore BACKUP=00000000000_0000_00_00

※「00000000000_0000_00_00」は、バックアップファイルの先頭の数字
 => 00000000000_0000_00_00_gitlab_backup.tar

起動

sudo gitlab-ctl start

チェック

sudo gitlab-rake gitlab:check
gitlab-ctl reconfigure
gitlab-ctl restart

バックアップ設定

vi /root/cron/backup_gitlab.sh
#!/bin/sh
gitlab-rake gitlab:backup:create
rm -rf /backup/gitlab/*
mv /var/opt/gitlab/backups/* /backup/gitlab
chown backup:backup /backup/gitlab/*

古い設定を削除

vi /etc/httpd/conf/httpd.conf
# LoadModule passenger_module /usr/local/lib/ruby/gems/2.4.0/gems/passenger-5.1.2/buildout/apache2/mod_passenger.so
# <IfModule mod_passenger.c>
#     PassengerRoot /usr/local/lib/ruby/gems/2.4.0/gems/passenger-5.1.2
#     PassengerDefaultRuby /usr/local/bin/ruby
# </IfModule>

その他、「Passenger」関係もコメントアウトまたは削除

余談

これで、ソースコード版からYUM版(GitLab CE Omnibus)に切り替わりました。

細かいところで言うと、ソースコード版の残骸(ファイルや設定)が残っている状態です。キレイさっぱり消してしまったら良いのですが今回の作業としてはここまでになります。

なぜなら、サーバの引越しを検討しているからです。

現段階では、社内(ローカル環境)のVMwareESXiにGitLabを構築している状況です。

当初はセキュリティ面を考えてのことだったのですが、これはこれで別の問題が出てきました。

ということで、2カ月後にはGitLabを別サーバに引っ越すことになります。
GitLab CE を別サーバに引越し

そういうわけで、ソースインストール版の残骸はOSもろとも消えてなくなることになりました。

もし、消す必要があって情報を探している方には申し訳ないですがその辺省略させて頂きます。
ソースインストールした知識があれば、削除することは容易かなと思います。
そうでなくても、残っていてトラブルになるようなことはほぼ無いですし、リスクを取ってまでキレイにしようとするよりメリットは無いと思います。

導入サポート・運用サポート

ということで宣伝です。

弊社ではPHP・MySQL・javascriptを使ったWebサイトを得意としています。
これらは2005年頃から触り続けてきていることもあり得意中の得意です。

Git については2012年頃から、GitLab は2014年頃 GitLab 6.8 のときから使い続けています。
ちなみに Github は取引先の都合で使用することはもちろんあります。

1日で完了する簡単なことから、半年・1年規模のものまで幅広く承っています。
特にプログラム開発が必要になるようなカスタマイズは遠慮なくご相談ください。

フロントの見た目に関わるところはデザイン会社が担当、裏方の技術部分を弊社が担当するケースもあり柔軟に対応することができます。

メールやSNSなどのメッセージで簡単に連絡いただいたあとで、電話していただけると確実です。(お問い合わせ