Rhythm & Biology

Engineering, Science, et al.

GitLabのインストール

さくらVPS(CentOS)にGitLabをインストールした際のメモ。

参考:https://github.com/gitlabhq/gitlabhq/blob/stable/doc/installation.md

yum

今回はDBにsqlite3を利用するため、あらかじめyumでインストールしておきます。
その他、gitは当たり前として、wgetcurlもインストールしておくこと。
また、後でcharlock_holmesをインストールするときにlibicu-develも必要となるので、これもインストール。
さらに、redisもインストールして走らせておきます。

$ su -
% yum install sqlite-devel libicu-devel redis
% /etc/init.d/redis start

ユーザ作成

まずgitユーザとgitlabユーザを作成。
gitlabユーザはgitグループに入れます。
また、gitlabユーザが/home/gitにアクセスできるようにパーミッションを変更します。

$ sudo useradd git
$ sudo passwd git
$ sudo useradd gitlab
$ sudo passwd gitlab
$ sudo usermod -G git gitlab
$ sudo chmod g+rx /home/git

また、後で必要になるため、一時的にgitlabユーザをsudoersに入れておきます。
(gitlabの動作を確認できたらsudoersから外しておく)

$ sudo vim /etc/sudoers
gitlab  ALL=(ALL)  ALL

ruby(1.9.2-p320)のインストール

環境を汚さないよう、gitlabユーザのホームディレクトリ以下にインストールします。
gemのアップデートもやっておきます。

$ su - gitlab
$ mkdir -p local/src
$ cd local/src
$ wget ftp://ftp.iij.ad.jp/pub/lang/ruby/1.9/ruby-1.9.2-p320.tar.gz
$ tar xvfz ruby-1.9.2-p320.tar.gz
$ cd ruby-1.9.2-p320
$ ./configure --prefix=$HOME/local/ruby-1.9.2-p320
$ make
$ make install
$ vim ~/.bashrc
export PATH=$HOME/local/ruby-1.9.2-p320/bin:$PATH
$ source ~/.bashrc
$ gem i rubygems-update
$ update_rubygems

python(2.7.3)のインストール

rubyと同様、環境を汚さないようにgitlabユーザのホームディレクトリ以下にインストールします。
後で必要になるため、libpythonへのパスも通しておきます。

$ su - gitlab
$ cd local/src
$ wget http://www.python.org/ftp/python/2.7.3/Python-2.7.3.tgz
$ tar xvfz Python-2.7.3.tgz
$ cd Python-2.7.3
$ ./configure --enable-shared --prefix=$HOME/local/python-2.7.3
$ make
$ make install
$ vim ~/.bashrc
export PATH=$HOME/local/python-2.7.3/bin:$HOME/local/ruby-1.9.2-p320/bin:$PATH
export LD_LIBRARY_PATH=$HOME/local/python-2.7.3/lib:$LD_LIBRARY_PATH

easy_install、pipのインストール

$ su - gitlab
$ cd local/src
$ wget http://peak.telecommunity.com/dist/ez_setup.py
$ python ez_setup.py
$ easy_install pip

gitoliteのインストール

gitlabユーザのssh鍵を作成し、公開鍵をgitユーザのホームディレクトリに置いておきます。

$ su - gitlab
$ mkdir .ssh
$ ssh-keygen -t rsa -P "" -f .ssh/id_rsa
$ sudo cp .ssh/id_rsa.pub /home/git/gitlab.pub
$ sudo chmod 0444 /home/git/gitlab.pub

gitユーザのホームディレクトリ以下にインストールします。

$ su - git
$ git clone -b gl-v304 git://github.com/gitlabhq/gitolite.git /home/git/gitolite
$ ./gitolite/install -ln /home/git/bin
$ PATH=$PATH:$HOME/bin
$ gitolite setup -pk /home/git/gitlab.pub
$ sed -i 's/0077/0007/g' /home/git/.gitolite.rc
$ exit
$ sudo chmod -R g+rwX /home/git/repositories/
$ sudo chown -R git:git /home/git/repositories/

リポジトリにアクセスできるかを確認します。
下の通りに表示され、/tmp/gitolite-adminが作成されていればOK(確認できたら削除)。

$ su - gitlab
$ git clone git@localhost:gitolite-admin.git /tmp/gitolite-admin
Initialized empty Git repository in /tmp/gitolite-admin/.git/
remote: Counting objects: 6, done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 6 (delta 0), reused 0 (delta 0)
Receiving objects: 100% (6/6), done.
$ rm -rf /tmp/gitolite-admin

gitlabのインストール

まず必要となるライブラリを先にインストールし、。

$ su - gitlab
$ gem i charlock_holmes --version '0.6.8'
$ pip install pygments
$ gem i bundler

gitlabをダウンロードしてきます。

$ git clone -b stable git://github.com/gitlabhq/gitlabhq.git gitlab

設定ファイルを設置します。
DBに関しては、今回はsqliteを利用します。

$ cd gitlab
$ cp config/gitlab.yml.example config/gitlab.yml
$ cp config/database.yml.sqlite config/database.yml

次にgemをインストールするのですが、その前にGemfileに書かれている'https://'の部分を'git://'に書き換えます。また、今回はDBにmysqlを利用しないため、mysql2のインストールも行わないようにします。

$ vim Gemfile
(https://をgit://に書き換え、gem "mysql2"をコメントアウト)
$ bundle install --without development test --no-deployment

gemのインストールを行いますが、下のコマンドは失敗します。

$ bundle install --without development test --deployment
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

この原因は、先ほどGemfileをいじったことのようです。
解決策はいまいち理解していないのですが、stackoverflowに書かれていた方法でうまく動いています。
参考:http://stackoverflow.com/questions/6785626/unable-to-update-gems-on-production-server

$ bundle install --without development test --no-deployment
$ bundle update
$ bundle install --without development test --deployment

gitの設定をしておきます。

$ git config --global user.name 'gitlab'
$ git config --global user.email 'gitlab@example.com'

データベースのセットアップをします。
最後にadminのユーザ名・パスワードが表示されますので、これをメモっておきます。

/home/gitlab/gitlab/vendor/bundle/ruby/1.9.1/gems/blankslate-3.1.2/lib/blankslate.rb:51: warning: undefining `object_id' may cause serious problems

というエラーがでますが、とりあえず無視しておいて大丈夫そうです。
原因・解決策をお分かりになる方がいたら教えていただきたいです。

$ bundle exec rake gitlab:app:setup RAILS_ENV=production
.....
Administrator account created:

login.........admin@local.host
password......5iveL!fe
.....

フックのセットアップをします。

$ sudo cp ./lib/hooks/post-receive /home/git/.gitolite/hooks/common/post-receive
$ sudo chown git:git /home/git/.gitolite/hooks/common/post-receive

最後に、正しくインストールが行われているかを確認します。
"NO"が出ていなければ問題ありません。

$ bundle exec rake gitlab:app:status RAILS_ENV=production

gitlab動作確認

まずgitlabを起動します。
デフォルトでは3000番ポートで起動しますので、必要に応じてiptablesの設定を行って下さい。

$ su - gitlab
$ cd gitlab
$ bundle exec rails s -e production

3000番ポートにアクセスして表示されたら、先ほどメモしておいたadminアカウントでログインします。
初回アクセス時には表示されるまでかなり時間がかかりますが、気長に待っていれば大丈夫です。
ログインが確認できたら動作確認完了ですが、adminのパスワードはすぐに変えておきましょう。もしくは、新たな管理者を作成して、adminアカウントを消しておきましょう。

設定変更

リポジトリを1つ作ってみると分かるのですが、httpアクセスのポート番号が80になっており、このままでは正しくアクセスできません。
正しいポート番号(デフォルトなら3000)を、config/gitlab.ymlに設定する必要があります。
その他、必要に応じてconfig以下のファイルを修正します。

auto mergeの有効化

gitlabはブランチ間でmerge requestを送ることができます。
手作業でマージしてもいいのですが、gitlabにはauto merge機能があり、この作業を楽にしてくれます。
ただし、デフォルトでは有効になっていないため、以下のコマンドを実行し、gitlabを再起動します。

$ bundle exec rake gitlab:app:enable_automerge RAILS_ENV=production

まとめ

以上でgitlabの全インストール工程が完了しました。
ここからさらにunicornで動かしたりといった作業があったりもしますが、これに関しては後日。

FuelPHP入門を読んだ

今月はじめに発売されたばかりのFuelPHP入門を読みました。
といっても、前半の半分を読んで、残りはまだざっと目を通した程度です。


まだ情報も少ない中で、これだけまとまった情報が得られるのは非常に貴重だと思います。
1.1をベースに書かれていますが、1.2RCに関する補足もあります(現在FuelPHPの最新版は1.2になっています)。


話の流れとしては、

  1. 概要
  2. インストール
  3. ディレクトリ構成
  4. コントローラ
  5. ビュー
  6. モデル
  7. フォーム処理
  8. 認証とセッション管理
  9. Email
  10. コアクラス
  11. コーディング規約
  12. コマンドラインツール
  13. 統合開発環境

となっています。
コーディング規約に数ページ割いているのは、「どんどん開発コミュニティに参加してよ」というメッセージでしょうか。


本を読みつつFuelPHPを触ってみた感想としては、特別すごい機能があるわけではないですが、とても気が利いてて、使いやすいフレームワークだなと感じました。
autoloaderのおかげでいちいちrequireを書く必要がありませんし、認証機能も標準で入っていています。Paginationも簡単に書けますし、キャッシュを利用したい場合にはmemcachedやredisを使えます。
PHP歴は2ヶ月もなく、CakePHPSymfonyといった有名フレームワークもまだ使ったことがありませんが、最初に触るフレームワークとしてFuelPHPはとても良いのではないかと思っています。


他のフレームワークを知らないので「比べてみてこうだ」といったことが書けないのが残念ですが、非常にいいフレームワークであることは間違いないと思います。
しばらく使い倒しつつ、coreのコードも読んでいこうと思います。

FuelPHP入門

FuelPHP入門

FuelPHPを動かす

インストール

FuelPHPをインストールする方法は2種類あるようで、1つはoilコマンドというものを使う方法。2つ目はzipでダウンロードしてくる、もしくはgit cloneする方法。
oilコマンドを使ってインストールするには、

$ curl get.fuelphp.com/oil | sh
$ cd <document_root>
$ oil create <project_name>

とします。一方、フレームワークをダウンロードしてきた場合には、

$ mkdir <project_name> && cd <project_name>
$ unzip fuelphp.zip
$ php oil refine install

とします。
これは公式サイトにのっている方法なのですが、oilを使うときにはsudoが必要になるため、sudoが入っていない環境ではcurlのとこで失敗します。ですので、

$ curl get.fuelphp.com/oil > install_oil.sh

としておいて、sudoを削除し、

$ su
# sh install_oil.sh

としなければいけません。

動作確認

oil createした後、localhost//publicにアクセスすると"Welcome!"が表示されます。
このままでは、localhost/にアクセスしてもダメです(.htaccessが無い)ので、

<IfModule mod_rewrite.c>
    RewriteEngine on
    RewriteBase /<project_name>
    RewriteRule ^(/)?$ public/index.php/$1 [L] 
    RewriteCond %{REQUEST_FILENAME} !-f 
    RewriteCond %{REQUEST_FILENAME} !-d                                                                                   
    RewriteRule ^(.*)$ public/index.php/$1 [L] 
</IfModule>

のように.htacessを書いて、に設置しておく必要があります。
(補足:テスト時にはこのようにしておくのもいいですが、publicディレクトリをDocumentRootにするようapacheの設定を変えた方が安全ですし、.htaccessを書く必要もありません)

まとめ

以上で、とりあえずFuelPHPを動かすところまでです。
次はドキュメント読みながらmvc書いていってみます。