こんにちは。小宮です。先輩から要望されていそうな気がしたのでgitlab導入時のメモです。。
やたらめったら長いし手順が複雑でこのとおりやって再現できるかはお使いの環境に依存する可能性があり保障できかねます。
この手順で再現した環境はOSはCentOS6.5でした。
postgresを許容できるのであれば自動的に入れられるオムニバス版があるのでそちらをお使いいただくのがよろしいかと。
個人的にpostgresの運用の知見が心もとなかったのと、RDSに逃げられなくなるのがアレだったのでmysqlで頑張りました。
自分で自動化する時は、passengerとgitlab:setup時の対話処理をなんとか自動化するオプションを付けるとこがキモかと思いました。
この手順自体は部分的にchefがでてきますがほぼ手動です。自動化オプションは最後のほうにちょろっと書いときます。
1.このへんからmysqlをなんとかして入れとく
1 2 |
$ wget http://ftp.jaist.ac.jp/pub/mysql/Downloads/MySQL-5.6/MySQL-5.6.17-1.linux_glibc2.5.x86_64.rpm-bundle.tar -P site-cookbooks/mysqld/files/default/usr/local/src/ |
2.rbenv等でrubyをなんとかして入れておく
(chefでなにもせずにやるとchefgemに寄るので注意がひつよう)
rubyのバージョンが低いとGemfileのシンタックスチェックでエラー出てmysql2とかが入らないことも。
3.Gitのインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 |
# yum -y install libcurl-devel libxslt-devel libxml2-devel expat-devel gettext openssl-devel zlib-devel Installed: libcurl-devel.x86_64 0:7.19.7-37.el6_4 libxml2-devel.x86_64 0:2.7.6-14.el6 libxslt-devel.x86_64 0:1.1.26-2.el6_3.1 Dependency Installed: libgcrypt-devel.x86_64 0:1.4.5-11.el6_4 libgpg-error-devel.x86_64 0:1.7-4.el6 # su - chef;cd infra-chef-repo/ $ knife cookbook create git -o site-cookbooks $ knife cookbook create redis -o site-cookbooks $ vi site-cookbooks/git/recipes/default.rb # # Cookbook Name:: git # Recipe:: default # # Copyright 2014, YOUR_COMPANY_NAME # # All rights reserved - Do Not Redistribute # %W{libcurl-devel libxslt-devel libxml2-devel expat-devel gettext openssl-devel zlib-devel libgcrypt-devel libgpg-error-devel}.each do |pkg| package pkg do not_if "rpm -qa|grep #{pkg}" action :install end end bash "bash-install-git" do not_if "ls -d /usr/local/src/git-1.9.0" code <<-EOC wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz -P /usr/local/src cd /usr/local/src/ tar zxf git-1.9.0.tar.gz cd /usr/local/src/git-1.9.0 ./configure --prefix=/usr/local/git make all make install ln -sf /usr/local/git/bin/git* /usr/local/bin/ EOC end $ knife solo cook localhost -o git # wget https://git-core.googlecode.com/files/git-1.9.0.tar.gz -P /usr/local/src # cd /usr/local/src/ # tar zxf git-1.9.0.tar.gz # cd /usr/local/src/git-1.9.0 # ./configure --prefix=/usr/local/git # make all # make install # ln -s /usr/local/git/bin/git* /usr/local/bin/ # which git /usr/local/bin/git # git --version git version 1.9.0 |
4.redisのインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 |
# yum install -y --enablerepo=remi redis Installed: redis.x86_64 0:2.8.9-1.el6.remi Dependency Installed: gperftools-libs.x86_64 0:2.0-11.el6.3 libunwind.x86_64 0:1.1-2.el6 # /etc/init.d/redis start # chkconfig redis on # redis-cli ping PONG $ vi site-cookbooks/redis/recipes/default.rb bash "yum-install-redis-from-remi" do not_if "which redis-cli" code <<-EOC yum install -y --enablerepo=remi redis EOC end service "redis" do supports :status => true, :restart => true action [ :enable, :start ] end $ knife cookbook test redis $ knife solo cook localhost -o redis |
5.ユーザ作成
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# useradd -c 'GitLab' git # chmod 755 /home/git # su - git -s /bin/bash $ mkdir .ssh $ touch .ssh/authorized_keys $ chmod 600 .ssh/authorized_keys $ chmod 700 .ssh $ git config --global user.name "GitLab" $ git config --global user.email "gitlab@localhost" ##### 6.gitlab-shellのインストール $ git clone https://github.com/gitlabhq/gitlab-shell.git -b v1.9.4 $ cp -a /home/git/gitlab-shell/config.yml{.example,} $ /home/git/gitlab-shell/bin/install install失敗する場合は、gitユーザの.bashrcか/etc/profile.d/の下あたりに環境変数を追加し読み込みしてから再実行 export PATH=/path-to-ruby:$PATH |
8.gitlabインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
$ git clone https://gitlab.com/gitlab-org/gitlab-ce.git -b 6-8-stable gitlab $ cp -a /home/git/gitlab/config/gitlab.yml{.example,} 不要っぽい -------------------------- $ chmod -R u+rwX /home/git/gitlab/log/ $ chmod -R u+rwX /home/git/gitlab/tmp/ $ mkdir /home/git/gitlab/tmp/pids/ $ mkdir /home/git/gitlab/tmp/sockets/ $ chmod -R u+rwX /home/git/gitlab/tmp/pids/ $ chmod -R u+rwX /home/git/gitlab/tmp/sockets/ $ mkdir /home/git/gitlab/public/uploads $ chmod -R u+rwX /home/git/gitlab/public/uploads -------------------------- $ mkdir /home/git/gitlab-satellites $ ll -d /home/git/gitlab-satellites drwxrwxr-x 2 git git 4096 5月 19 12:20 2014 /home/git/gitlab-satellites $ $ ll -d /home/git/gitlab-satellites drwxr-x--- 2 git git 4096 5月 19 12:20 2014 /home/git/gitlab-satellites $ cp -a /home/git/gitlab/config/unicorn.rb{.example,} $ cp -a /home/git/gitlab/config/initializers/rack_attack.rb{.example,} $ cd /home/git/gitlab $ git config --global user.name "GitLab" $ git config --global user.email "gitlab@localhost" $ git config --global core.autocrlf input |
9.DB設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 |
$ cp -a /home/git/gitlab/config/database.yml{.mysql,} $ vi /home/git/gitlab/config/database.yml $ diff /home/git/gitlab/config/database.yml{.mysql,} 10,12c10,12 < username: git < password: "secure password" < # host: localhost --- > username: gitxxxxx > password: "xxxxxxxx" > host: localhost $ ls -al /home/git/gitlab/config/database.yml -rw-rw-r-- 1 git git 777 5月 19 12:32 2014 /home/git/gitlab/config/database.yml $ chmod o-rwx /home/git/gitlab/config/database.yml $ ls -al /home/git/gitlab/config/database.yml -rw-rw---- 1 git git 777 5月 19 12:32 2014 /home/git/gitlab/config/database.yml $ vi /home/git/gitlab/config/gitlab.yml $ diff /home/git/gitlab/config/gitlab.yml{,.example} 227c227 < bin_path: /usr/local/bin/git --- > bin_path: /usr/bin/git |
ローカル等てきとうなところ(database.ymlに指定したところ)にDBをなんとかしていれる
1 2 |
# rpm -ivh /usr/local/src/MySQL-shared-5.6.17-1.linux_glibc2.5.x86_64.rpm |
MySQL-develとshared-compatもひつようかもしれない
rubyのバージョンが1.8とか1.9とかだとGemfileのシンタックスがどうとかで入らなくて直にmysql2をいれてたけどたぶんbundleで普通にはいるはず
# gem install mysql2 -v '0.3.11'
10.Gemパッケージインストール
1 2 3 4 5 6 7 8 9 10 11 12 13 |
$ exit # yum -y install libicu-devel.x86_64 Installed: libicu-devel.x86_64 0:4.2.1-9.1.el6_2 Dependency Installed: libicu.x86_64 0:4.2.1-9.1.el6_2 ※引っかかる場合は、MySQL-develが足りない # su - git -s /bin/bash $ cd /home/git/gitlab $ bundle install --deployment --without development test postgres aws |
11.データベース初期化&セットアップ
ここはdbのテーブルが新規に作成される処理なので、間違って既存のデータ消さないように対話になってたりします。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
$ bundle exec rake gitlab:setup RAILS_ENV=production This will create the necessary database tables and seed the database. You will lose any previous data stored in the database. Do you want to continue (yes/no)? yes Administrator account created: login.........admin@local.host password......xxxxxxxxx $ bundle exec rake assets:precompile RAILS_ENV=production $ exit |
12.起動スクリプト、ログローテ設定コピー
1 2 3 4 5 6 7 8 9 |
# cp -a /home/git/gitlab/lib/support/init.d/gitlab /etc/rc.d/init.d/ # cp -a /home/git/gitlab/lib/support/logrotate/gitlab /etc/logrotate.d/ # chkconfig gitlab on # chkconfig --list gitlab gitlab 0:off 1:off 2:on 3:on 4:on 5:on 6:off # /etc/init.d/gitlab start |
13.Passengerのインストール&Proxy設定
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 |
# yum -y install httpd-devel Installed: httpd-devel.x86_64 0:2.2.15-30.el6.centos Dependency Installed: apr-devel.x86_64 0:1.3.9-5.el6_2 apr-util-devel.x86_64 0:1.3.9-3.el6_0.1 apr-util-ldap.x86_64 0:1.3.9-3.el6_0.1 httpd.x86_64 0:2.2.15-30.el6.centos httpd-tools.x86_64 0:2.2.15-30.el6.centos Complete! Specが低いとcompileに失敗するので、Swapを1GB作成 # dd if=/dev/zero of=/swap bs=1M count=1024 # mkswap /swap # swapon /swap # gem install passenger --no-rdoc --no-ri # passenger-install-apache2-module Config作成(rubyのバージョンごとに違うので要注意) # cat <<EOF >/etc/httpd/conf.d/passenger.conf > LoadModule passenger_module /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/passenger-4.0.42/buildout/apache2/mod_passenger.so > <IfModule mod_passenger.c> > PassengerRoot /opt/chef/embedded/lib/ruby/gems/1.9.1/gems/passenger-4.0.42 > PassengerDefaultRuby /opt/chef/embedded/bin/ruby > </IfModule> > EOF Vhostは必要ないので、defaultに書込み # cat <<EOF >>/etc/httpd/conf/httpd.conf > ProxyPass / http://localhost:8080/ > ProxyPassReverse / http://localhost:8080/ > EOF # /etc/init.d/httpd start # chkconfig httpd on # su - git -s /bin/bash $ cd /home/git/gitlab $ bundle exec rake gitlab:env:info RAILS_ENV=production RAILS_ENV=production System information System: Current User: git Using RVM: no ~略~ Redis version >= 2.0.0? ... yes Your git bin path is "/usr/local/bin/git" Git version >= 1.7.10 ? ... yes (1.9.0) Checking GitLab ... Finished |
ブラウザからログインしてパスワードを変更
http://123.123.123.123/users/sign_in
admin@local.host
xxxxxxxx
プロジェクトを作成などなど
http://123.123.123.123/root/test
自動化オプションについて
正直、自動化したい処理にchefとかdockerとか適当(ほどよくという意味)につけてググれば
だいたいやってる人がいてわかるとは思いますが念の為書いておきます。
・passenger
1 2 3 4 5 6 7 |
bash "passenger-install-apache2-module" do not_if "find /opt/chef/embedded/lib -print|grep mod_passenger.so" code <<-EOC passenger-install-apache2-module install --auto EOC end |
・gitlab
1 2 3 4 5 6 7 8 9 10 11 12 |
bash "db_initialize,precompile" do user "git" not_if "mysql -u #{dbuser} -p#{rootpass} -h #{dbhost} -e 'use gitlabhq_production;show tables;'|grep users_projects" code <<-EOC cd /home/git/gitlab export PATH=/opt/chef/embedded/bin:$PATH /opt/chef/embedded/bin/bundle install --deployment --without development test postgres aws /opt/chef/embedded/bin/bundle exec rake gitlab:setup force=yes RAILS_ENV=production /opt/chef/embedded/bin/bundle exec rake assets:precompile RAILS_ENV=production EOC end |
自動化するにあたり他にも色々地雷があったわけですが、、
mysql2を入れるにあたり、公式のmysqlだとmysql_libは消してsharedとshared-compatとdevelいれないといけない等々。
あとはssl化したりdbを外出ししたり色々やったような記憶はありますが長くなるので省略します。
あとchefgemに寄ってるレシピは適宜変えたほうがよさそうです。
14.バックアップとリストアについて
mysqlの場合はDBサーバに以下のようなgrantをしないとダメです(user@host等固有の値は適宜ご指定ください)
1 2 3 4 |
mysql> GRANT LOCK TABLES ON `gitlabhq_production`.* TO 'gitlab'@'localhost'; mysql> FLUSH PRIVILEGES; mysql> show grants for 'gitlab'@'localhost' ; |
バックアップはユーザはgitで場所は$HOME/gitlabでやらないとだめみたいな感じです。(cron登録しとくのが良いかと思います)
1 2 3 4 5 6 7 8 9 |
#!/bin/bash export PATH=/opt/chef/embedded/bin:$PATH export LD_LIBRARY_PATH=/opt/chef/embedded/lib:$LD_LIBRARY_PATH cd /home/git/gitlab bundle exec rake gitlab:backup:create RAILS_ENV=production w echo "rake backup end." |
リストアする場合、
gitlab.ymlでbackupディレクトリとして指定してる(ext:$HOME/gitlab/tmp/backups)場所にtarアーカイブを設置
1 2 |
bundle exec rake RAILS_ENV=production gitlab:backup:restore BACKUP=tmp/backups/1425914208 --trace |
こんなかんじでtarアーカイブの先頭に自動でついてる数値文字列をbackupのpathの後ろに指定。
とりあえずこんなところで失礼します。長々みていただいた方はありがとうございました。