Git
Apache
centos7

レガシーな開発環境から脱したい人の記録-2.Gitサーバ立てる

この記事の範疇

・OSはインストール済み ~ ローカルネットワーク内にGitサーバ立ててPUSHまで終える
・参考
(https://git-scm.com/book/ja/v2 )
(http://www.torutk.com/projects/swe/wiki/CentOS_7%E3%81%A7apache%E7%B5%8C%E7%94%B1%E3%81%AEgit%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%82%92%E6%A7%8B%E7%AF%89 )
(https://ameblo.jp/dmmaf/entry-12247392059.html )

環境・前提

【サーバ】
・CentOS7.5.1804 (minimal)
・プロトコルはsmartHTTP使用

【クライアント】
・Windows10
・gitそのものをここから(https://git-scm.com/ ) インストールしておく
・tortoiseGit使用(gitのGUIクライアントのうちの一つ)(https://tortoisegit.org/ )

手順

サーバ

・まずはgitそのものをインストール
# yum install git

・とりあえずベアリポジトリ作ろう
/opt/git/ディレクトリを作り、それ以下にプロジェクト毎にproject1.git, project2.git, ...
とリポジトリを立てていくのがいいと思います。
# mkdir -p /opt/git/sample.git/
# cd /opt/git/sample.git/
# git init --bare --shared
ベアリポジトリができました。
ここに各作業者のPCからアクセスしてPUSHやPULLやらをしたいので、
smartHTTPでアクセスする環境を整備します。

・Apacheインストール
# yum install httpd
Apacheの設定ファイルを/etc/httpd/conf.d/以下に置きます。

git.conf
SetEnv GIT_PROJECT_ROOT /opt/git
SetEnv GIT_HTTP_EXPORT_ALL
SetEnv REMOTE_USER $REDIRECT_REMOTE_USER

ScriptAlias /git/ /usr/libexec/git-core/git-http-backend/

<LocationMatch "^/git/">
  Require all granted
</LocationMatch>

・ファイアウォール穴あけ
# firewall-cmd --permanent --add-service=http
# firewall-cmd --reload

・SELinux無効化
# setenforce 0

・httpd起動/サービス有効化
# systemctl start httpd
# systemctl enable httpd

・/opt/git/ にApacheがアクセスできるようにする
chgrp -R apache /opt/git

・httpdの設定変更再び
以下を追加

/etc/httpd/conf.d/git.conf
RewriteEngine On
RewriteCond %{QUERY_STRING} service=git-receive-pack [OR]
RewriteCond %{REQUEST_URI} /git-receive-pack$
RewriteRule ^/git/ - [E=AUTHREQUIRED]

<Files "git-http-backend">
    AuthType Basic
    AuthName "Git Access"
    AuthUserFile /opt/git/.htpasswd
    Require valid-user
    Order deny,allow
    Deny from env=AUTHREQUIRED
    Satisfy any
</Files>

# systemctl restart httpd

・Apacheの認証設定
# htpasswd -c /opt/git/.htpasswd username
でパスワード設定

クライアント

・適当なところにGitフォルダなどを作り、何もないところで右クリック->Gitクローン(複製)
URL: http://192.168.11.6/git/sample.git
としOK
クローン出来た!(あれ?パスワード求められてない…)

・PUSHしてみる
適当なファイルを作成->右クリックでtortoiseGit->追加
また適当なところで右クリック->Gitコミット "master"
コメント書いてコミット実行, からのPUSH実行
PUSH出来た!(あれ?パスワーd(ry )

おわり

疑問が残る状態ですが一旦公開します。。。
今後たびたび追記、修正しつつ手順書として成り立つ記事にできたらいいなと思うので、
ご指摘よろしくお願いいたします。