githubクローンのgitlabを挫折した人が、bitbucketクローン?をRDBMSでRhodecodeを導入してみた

gitlabの環境を構築はしてみましたが、いざクライアント側からpushさせようとか思うと、
うまく行かなかったんですよねぇー。。。つД`)・゚・。・゚゚・*:.。..。.:*・゚
だいぶ調べたけど、ダメでしたw じゃあ、使わないってわけには行かないので、githubクローン?
(どっちかっていうと、bitbucketクローンじゃね?)のrhodecodeを導入してみた際のお話です。

rhodecodeさんは、gitだけじゃなくて、hgも使えます。マルチな方ですねぇーw
hgの方がbitbucketで慣れてるんで、浮気しそうになりますが、ここは、ブームに乗って何とかgitをものにしたいw

バックエンドのDBは、SQLite/PostgreSQL/MySQLで利用可能です。
SQLiteを使うともっと簡単ですが、あくまでPostgreSQLで運用します!!(゚д゚)!(gitlabもPostgreSQLで作りましたよー)

自分の中のいつもの構成で、OSはScientific Linux6.3 インストール時に開発環境のみのBasic Serverです。
ntpとかは、事前にcronで行うような設定が入ってますが、今回は記載省略。

PostgreSQLはソースコンパイルで導入するポリシーなので、

インストール:
/usr/local/pgsql/${pgsql_version}/

データベースクラスタ:
/home/postgres/${pgsql_version}/data

でインストール済みとなっております。

ちなみに、rhodecodeさんは、マニュアルが非常に充実してます!!ココ!!
これ見ながらやれば基本問題ないですが、メモとして。。。
他にも参考サイトを出します。上記のマニュアルと、その参考サイトをミックスしただけと言われるとそれまでなんですが(^_^;)
rabbitmqとceleryのメッセージ関係の処理は入れていません。( ー`дー´)キリッ
(一回やったけど、運用面倒だし、すぐに動かなかったし。。。少人数だし、必要ないw)

http://mbrownnyc.wordpress.com/technology-solutions/rhodecode-and-redmine/
http://mbrownnyc.wordpress.com/technology-solutions/rhodecode-and-redmine/part-1-prerequisites/
http://mbrownnyc.wordpress.com/technology-solutions/rhodecode-and-redmine/part-2-install-rhodecode/

まずは、上記のprerequisitesを参考に、必要なモジュールをインストールと、ローカル環境での使用なんで、環境構築時の問題切り分けとしても、iptablesSELinuxを止めるという。。。
(まぁ、disabledにしちゃってます。。。ハイ。。。)あと、epelリポジトリの導入。

yum install -y python-devel

setenforce 0
vim /etc/selinux/config 
# SELINUX=disabled

/etc/init.d/iptables stop
chkconfig iptables off

#epel6の導入
wget http://dl.fedoraproject.org/pub/epel/6/x86_64/epel-release-6-7.noarch.rpm
rpm -ivh epel-release-6-7.noarch.rpm

ユーザーの作成(上記参照にpasteって人にしてます)

useradd paste
#ユーザー切り替えて確認
su - paste
whoami 
id paste
exit

で事前準備終了〜。
次に導入フェーズです。今度は、上記のpart-2-install-rhodecodeと、マニュアルのsetupを参考に進めます。
今からだと、pipだろうということで、easy_installでは実施していませんw

# pipのインストール
yum install python-pip

# virtual environmentの導入
pip-python install virtualenv virtualenvwrapper

su - paste
mkdir /home/paste/.virtualenvs
exit
su paste
echo >> /home/paste/.bashrc
echo export WORKON_HOME=\$HOME/.virtualenvs >> /home/paste/.bashrc
echo source /usr/bin/virtualenvwrapper.sh >> /home/paste/.bashrc
source /home/paste/.bashrc
#some virtual environment should be created /home/paste/.virtualenvs
ls -l -a /home/paste/.virtualenvs/
exit
mkdir -p /var/www/rhodecode-venv /var/www/rhodecode
chown paste:paste /var/www/rhodecode-venv /var/www/rhodecode
su - paste
virtualenv --no-site-packages /var/www/rhodecode-venv #create the virtual environment for rhodecode
/var/www/rhodecode-venv/bin/pip install rhodecode #install rhodecode accessible through the virtualenv
exit

ここらでrabbitmqとceleryの手順になりますが、今回パス。(epel入ってると簡単にyum一発でイケます)
PostgreSQLとの連動の為のモジュールを導入します。どーやら、psycopg2を使う模様。

su - paste
# DBモジュールの導入
# ソースコンパイルでの導入なので、exportしてやらないと、pg_configがないって怒られます
export PG_CONFIG=/usr/local/pgsql/9.2.1/bin/pg_config
export PATH=$PATH:/usr/local/pgsql/9.2.1/bin
/var/www/rhodecode-venv/bin/pip install psycopg2
exit

# DBの作成(横着してrootから実行)
su - postgres -c "/usr/local/pgsql/9.2.1/bin/createuser rhodecode"
su - postgres -c "/usr/local/pgsql/9.2.1/bin/psql -c 'alter role rhodecode createdb;'"
su - postgres -c "/usr/local/pgsql/9.2.1/bin/createdb rhodecode -U rhodecode"

Rhodecodeの構成設定関係

su - paste
/var/www/rhodecode-venv/bin/paster make-config RhodeCode /var/www/rhodecode-venv/production.ini

構成設定は量が多いので、変更したとこを省略形式で。。。

#vim /var/www/rhodecode-venv/production.ini

[DEFAULT]
email_to = rhodecode@localhost # コメントを外して環境に合わる
error_email_from = paste_error@localhost # コメントを外して環境に合わる
app_email_from = rhodecode-noreply@localhost # コメントを外して環境に合わる

smtp_server = localhost

[server:main]
host = 0.0.0.0 # 127.0.0.1からすべて受付に変更

#########################################################
### DB CONFIGS - EACH DB WILL HAVE IT'S OWN CONFIG    ###
#########################################################

# SQLITE [default]
#sqlalchemy.db1.url = sqlite:///%(here)s/rhodecode.db # コメントにして

# POSTGRESQL
# 本来はuser:pass@ですが(ローカルだからと甘えて、trustで動かしてるので、パスワード設定なし)
sqlalchemy.db1.url = postgresql://rhodecode@localhost/rhodecode 

# MySQL
# sqlalchemy.db1.url = mysql://user:pass@localhost/rhodecode

# see sqlalchemy docs for others

・・・

MySQLな人は、コメント解除を変更して、MySQLの設定を書くといけると思います。(ほぼMySQLは詳しくないw)

リポジトリ保管用のディレクトリを作成(データ領域はhomeにしたいので、/home/reposにしました)

mkdir /home/repos
chown paste:paste /home/repos/

んで、DBを作成します。ここでは、マニュアルを参照して対応。おっと。。。エラーが。。。

/var/www/rhodecode-venv/bin/paster setup-rhodecode /var/www/rhodecode-venv/production.ini --user=admin --password=input_password --email=mail@mail.domain.gtld --repos=/home/repos
・・・
from psycopg2._psycopg import BINARY, NUMBER, STRING, DATETIME, ROWID
ImportError: libpq.so.5: cannot open shared object file: No such file or directory

えーと、libpq.so.5: cannot open shared object file: No such file or directoryですよっと。
ソースインストールなので、ライブラリの検索パスはそりゃないな。。。
こちらに詳しく書かれているので、そちらを参照。Cannot Open Shared Object Fileの対処

以下で対応

# vim /etc/ld.so.conf.d/postgresql.conf

/usr/local/pgsql/9.2.1/lib
ldconfig
ldconfig -p |grep libpq #確認

上記で通っているのが確認できたら、

su - paste
/var/www/rhodecode-venv/bin/paster setup-rhodecode /var/www/rhodecode-venv/production.ini --user=admin --password=input_password --email=mail@mail.domain.gtld --repos=/home/repos

# ずらずらSQLが流れます。
・・・
exit

もうすぐ、起動。やっぱり自動起動ですよねーってことで、initスクリプトの為のトラップとログの準備

mkdir -p /var/run/paste/
touch /var/log/pasteserve.log
chown paste:paste /var/log/pasteserver /var/run/paste/

んで、initスクリプト(まんまコピー)

# vim /etc/init.d/paste-serve-rhodecode

#!/bin/sh
#
#
#
#
# chkconfig: 345 82 03
# description:
#init script for paste serve rhodecode, which was written by
#branded on freenode
#mbrownnyc everywhere else
#

### BEGIN INIT INFO
# Provides:          paste-serve-rhodecode
# Required-Start:    $remote_fs $network
# Required-Stop:     $remote_fs $network
# Description:       Paste httpserver to serve rhodecode over http
### END INIT INFO

  start()
  {
        if [ ! -f /var/run/paste/rhodecode.pid ]; then #process isn't running probably
                echo Attempting to start paste serve rhodecode...  daemonizing
                su -c '/var/www/rhodecode-venv/bin/paster serve /var/www/rhodecode-venv/production.ini --daemon --user=paste --pid-file=/var/run/paste/rhodecode.pid --log-file=/var/log/pasteserve.log' paste
                while [ ! -f /var/run/paste/rhodecode.pid ]; do sleep 3 && echo .; done
                echo Done. PID is $(cat /var/run/paste/rhodecode.pid).
        else
                echo The paste serve rhodecode has filed a paste PID $(cat /var/run/paste/rhodecode.pid)
                echo It\'s likely started already at that PID.
        fi
  }
  stop()
  {
        if [ -f /var/run/paste/rhodecode.pid ]; then #process is running probably
                echo Telling daemonized paste httpserve process to die
                su -c '/var/www/rhodecode-venv/bin/paster serve --stop-daemon --pid-file=/var/run/paste/rhodecode.pid' paste
                echo Waiting for process to die...
                while [ -f /var/run/paste/rhodecode.pid ]; do sleep 1 && echo .; done
        else
                echo /var/run/paste/rhodecode.pid doesn\'t exist, so the paste httpserve process was not used to executed using the proper config, if paste is running.
                echo Otherwise it isn\'t running.
        fi
  }
  restart()
  {
        stop
        start
  }
  status()
  {
        if [ -f /var/run/paste/rhodecode.pid ]; then
                echo paste httpserve process is running as PID $(cat /var/run/paste/rhodecode.pid)
                su -c '/var/www/rhodecode-venv/bin/paster serve /var/www/rhodecode-venv/production.ini --status --pid-file=/var/run/paste/rhodecode.pid' paste
        else
                echo paste serve rhodecode isn\'t running.
        fi

  }

case "$1" in
    start)
                start
    ;;
    stop)
                stop
    ;;
    restart)
                stop
                start
    ;;
    status)
                status
    ;;
    *)
                echo $"Usage: $0 {start|stop|restart|status}"
        ;;
esac
exit 1
[esc]wq![enter]

もう残りわずか!!自動起動設定

chkconfig --add paste-serve-rhodecode
chkconfig --level 345 paste-serve-rhodecode on

んで、起動。

touch /var/log/pasteserve.log
chown paste:paste /var/log/pasteserve.log
service paste-serve-rhodecode start
ls -l /proc/ | grep $(cat /var/run/paste/rhodecode.pid) # the owner should be paste

ポートがデフォルトだと5000での起動なのと、使わないけどw httpsのことも考えておいて、
バースプロキシ立てますか。ということで、マニュアル参照。https-support
Nginxとかいろいろ考えたけど、無難にapacheでvhostでの運用にしました。

yum install httpd

#vim /etc/httpd/conf/httpd.conf
# 最終行に以下を追加
include /etc/httpd/conf/virtualhost_rhodecode.conf

んで、同じ内容を記載。(環境に合わせてくださいませm(_ _)m)

# vim /etc/httpd/conf/virtualhost_rhodecode.conf

<VirtualHost *:80>
        ServerName hg.myserver.com
        ServerAlias hg.myserver.com

        <Proxy *>
          Order allow,deny
          Allow from all
        </Proxy>

        #important !
        #Directive to properly generate url (clone url) for pylons
        ProxyPreserveHost On

        #rhodecode instance
        ProxyPass / http://127.0.0.1:5000/
        ProxyPassReverse / http://127.0.0.1:5000/

        #to enable https use line below
        #SetEnvIf X-Url-Scheme https HTTPS=1

</VirtualHost>
/etc/init.d/httpd start

起動したァーってこれでなります。
ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

使い方は以下を参照ください。
管理者のログインは、DB作成時の引数になります。(ノ∀`)アチャーって方は、
httpdとpaste-serve-rhodecode stopさせてやり直すか、管理者画面で修正してください。↓これです。

/var/www/rhodecode-venv/bin/paster setup-rhodecode /var/www/rhodecode-venv/production.ini --user=admin --password=input_password --email=mail@mail.domain.gtld --repos=/home/repos

使い方は、以下を参照するとまとめられてます。そして全く同じ問題に遭遇wGitとRhodecodeの罠(履歴とかコメントとか表示されない)
Rhodecodeの使い方とGitの問題と

fedoraのgit最新とか持ってきたけど、gitって依存モジュール結構あって大変でしたので、素直にrpmforgeを導入して対応。

wget http://packages.sw.be/rpmforge-release/rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm
rpm -ivh rpmforge-release-0.5.2-2.el6.rf.x86_64.rpm 

こわいんで、rpmforgeのリポジトリは標準で使わないように変更。

# vim /etc/yum.repos.d/rpmforge.repo 

[rpmforge]
name = RHEL $releasever - RPMforge.net - dag
baseurl = http://apt.sw.be/redhat/el6/en/$basearch/rpmforge
mirrorlist = http://apt.sw.be/redhat/el6/en/mirrors-rpmforge
#mirrorlist = file:///etc/yum.repos.d/mirrors-rpmforge
enabled = 0 # < enable = 10に変更

んでインストール

yum --enablerepo=rpmforge-extras install git

完璧!!ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ

最初ちょっとハマったのは、リポジトリ作成画面で、
「ADD NEW REPOSITORY」画面で「clone from:」って絶対入れないとイケないとか思い込んでた自分が恥ずかしい。。。
cloneして作成しなければ、何もいれずに作成すればいいという。。。当たり前体操〜☆(*´ω`*)

gitlabよりマニュアルそれってますし、運用も楽ですね。
個人的には圧倒的にこちらの方が使いやすいです。

誰かマニュアルを日本語訳にしていたような。。。|д゚)チラッ

少人数だったらbitbucket使っとけよとか言わないように。。。( ̄ b ̄) シーーッ!!

気が向いたら画面貼ります。終わり。