gitlabもCentOSとUbuntuにはパッケージが提供されるようになったので、大分インストールが簡単になりました。
とはいえ、このパッケージはgitlab専用のマシンにインストールすることを前提にしているのか、小規模プロジェクトのために軽く使いたいよう場合ではつらいデフォルト設定となっています。安いvpsとかだと確実にメモリ不足でまともに動きません。
以下はとりあえずプライベートgitリポジトリが欲しいだけのような人のためのgitlabの設定の紹介です。
https://www.gitlab.com/downloads/
ここからgitlabのパッケージをダウンロードします。 omnibus-ruby でつくられた全部入りパッケージなのでインストールでのコンフリクトは発生しないはずですが、既に稼動中のサービス(apache等)のことはあまり考慮されてないので使用するポートについては個別対応が必要です。
特に以下は注意が必要です。
ここでは、apacheが稼動しているubuntuにインストールします。
普通にインストールします。
$ sudo dpkg -i gitlab_6.6.4-omnibus-1.ubuntu.12.04_amd64.deb $ sudo gitlab-ctl reconfigure
ちなみにgitユーザが既に存在しているとこけるので消しておきます
$ sudo userdel -r git
gitlabの設定は /etc/gitlab/gitlab.rb に設定をかいて、chefで設定します。
$ cat /etc/gitlab/gitlab.rb external_url "http://gitlab.example.com:8081" unicorn["worker_processes"] = 1 postgresql["shared_buffers"] = "128MB" postgresql["effective_cache_size"] = "32MB"
とりあえずpostgresqlがメモリを大量に食うので適当に減らします。
unicornもメモリ食いがちなので1プロセスにします。
external_url
にポートも含めたURLをかきます。apacheが80番で起動してるとnginxが起動できないので適当にはずします。ちなみに8080はデフォルトだとgitlabのunicornがつかっています。
このあたりは環境に応じて適当に設定してください。
gitlab-ctl reconfigure
すると設定が反映されます。
その他の設定できる項目は /opt/gitlab/embedded/cookbooks/gitlab
以下のcookbook
をみるといいです。
80番で起動しているapacheがいる場合はnginxにproxyします。
<VirtualHost *:80> ServerName gitlab.example.com DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public CustomLog /var/log/apache2/gitlab_access.log combined ErrorLog /var/log/apache2/gitlab_error.log ErrorDocument 502 /502.html <Directory "/opt/gitlab/embedded/service/gitlab-rails/public"> Options FollowSymLinks </Directory> <Proxy *> AddDefaultCharset off Order deny,allow Allow from all </Proxy> ProxyVia On ProxyPreserveHost On ProxyRequests Off ProxyPass /assets/ ! ProxyPass /uploads/ ! ProxyPass / http://localhost:8081/ retry=1 ProxyPassReverse / http://localhost:8081/ </VirtualHost>
以上ができたらapache再起動して、 http://gitlab.example.com にアクセスしてみてうまく表示できれば完了です。
]]>chefを使いはじめるとあらゆるもののセットアップをchefレシピ書かずにやるのが気持ち悪くなってしまうけど、chefでやらないほうがいいものって結構あると思う。
この手のものは、実際に使いはじめると多少は手作業での運用が必要になるので、誰かがつくったcookbookでいれてしまうよりかは手作業でいれてある程度どこになにがあるか把握しておいたほうがやりやすい。
自前でレシピ書いてもいいけど、当面は1台あれば十分なのであれば単なる二度手間でしかないのでセットアップ手順をメモに残す程度で十分。1
ある程度運用経験があってとりあえずすぐに動く環境を作りたい、という場合のみ出来合いのcookbookをそのまま使えばいいと思う。
などということを、1ヶ月くらいかけていろいろcookbook書いたあげく心が折れたときに感じた。
まめにredmineみたいなものをアップデートしたいような人もたぶんあんまりいない ↩
apt-getコマンドにはパッケージを削除するためのコマンドが2種類ある
chefをつかっているということは設定ファイルもchefで管理しているはずなので、設定ファイルを残す必要はない。
さらに、依存で入ったパッケージも一緒に削除されるように、options "--auto-remove"
などとしてやるとよい。
ゴミは混乱の元なので早めに消すべし。
]]>公開鍵認証なホストに対してパスフレーズ入力無しでsshログインができるにもかかわらず、
$ knife solo cook myhost Running Chef on myhost... Checking Chef version... Enter the password for username@myhost: ERROR: Net::SSH::AuthenticationFailed: username
のようにいわれてchef soloの実行に失敗してしまうときがある。
パスフレーズ入力無しでsshできたということは、普通は以下のうちの少くとも1つは満たされている。
それなのにAuthenticationFailed
失敗してしまうのは、Net:SSHがデフォルトでは公開鍵認証を試行しない場合があるため。 1
これを回避するには、ssh_configでPubkeyAuthentication yes
を明示すればよい。
なお、Net::SSH
がどのような動きをしているかは以下のスニペットを試すとよい。
require 'net/ssh' Net::SSH.start("myhost", "username", :verbose => :debug) {|x| p x }
使ったのは以下のバージョン
この挙動はknife solo
コマンドに-i
オプションを渡しても変わらなかった。 ↩