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を参考に、必要なモジュールをインストールと、ローカル環境での使用なんで、環境構築時の問題切り分けとしても、iptablesとSELinuxを止めるという。。。
(まぁ、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 = 1 を0に変更
んでインストール
yum --enablerepo=rpmforge-extras install git
完璧!!ワーイヽ(゚∀゚)メ(゚∀゚)メ(゚∀゚)ノワーイ
最初ちょっとハマったのは、リポジトリ作成画面で、
「ADD NEW REPOSITORY」画面で「clone from:」って絶対入れないとイケないとか思い込んでた自分が恥ずかしい。。。
cloneして作成しなければ、何もいれずに作成すればいいという。。。当たり前体操〜☆(*´ω`*)
gitlabよりマニュアルそれってますし、運用も楽ですね。
個人的には圧倒的にこちらの方が使いやすいです。
誰かマニュアルを日本語訳にしていたような。。。|д゚)チラッ
少人数だったらbitbucket使っとけよとか言わないように。。。( ̄ b ̄) シーーッ!!
気が向いたら画面貼ります。終わり。