前で立てたDebianサーバーをgitサーバーにも利用しております。その手順についてまとめます。これを執筆時はDebian 10のBusterですが、恐らくはしばらくは大きく内容に変更はなく利用できるものと思います。色々とfirewallの関係でApacheも使ってhttpsでアクセスすることを想定しております。以下のコマンドは、必要に応じてsudoを付けてください。最初にApache2のインストールから開始し、後でgitサーバーを入れます。
Apache2のインストール
インストール他
apt install apache2
で簡単に終わります。そのあと、a2enmodなどのコマンドが簡単に使えないのは不便なので、適当なデフォルトのshellで/sbinにpathを通します。ここでは、ホームディレクトリの「.bashrc」に
export PATH=$PATH:/sbin/
くらいを記述しておきました。
セキュリティ関連項目
以下はセキュリティのため「/etc/apache2/conf-enabled/security.conf」の以下の項目をいじくります。
ServerToken Prod ServerSignature Off
モジュール設定
a2enmod ssl a2enmod cgid
としてSSLモジュールとCGIモジュールを有効にします。(Smart HTTPを使ったGitのアクセスの場合、mod、rewriteも必要ですが、既に有効になっていることが多い)
デフォルトサイト設定
必要に応じて、
a2ensite default-ssl
としてSSLの設定を有効にして、それぞれ「/etc/apache2/sites-enabled」の中にある「000-default.conf」と「default-ssl.conf」を適宜編集します。
SSLの自己証明書の設定
所謂オレオレ証明書ですね。a2enmod sslを実行した際に「/usr/share/doc/apache2/README.Debian.gz」を参照してね、と言われるので、その通り「gzip -d」で解凍して中身を見てその通りに実行します。
make-ssl-cert generate-default-snakeoil --force-overwrite
あと「/etc/apache2/sites-enabled/default-ssl.conf」の中に
BrowserMatch "MSIE [2-6]" \ nokeepalive ssl-unclean-shutdown \ downgrade-1.0 force-response-1.0 BrowserMatch "MSIE [17-9]" ssl-unclean-shutdown
に追加しておきます。
Digest認証の設定
あとでgitのアクセスを認証によって制限する際にも利用しますので、ここでまとめておきます。認証ファイルは
htdigest -c /var/hoge/.htdigest 'Hoge Zone' username
として作成します。あとは「/etc/apache2/sites-enabled」の中の設定したいものの中に、
Alias /hoge/ /var/www/hoge/ <Directory "/var/www/hoge/"> AuthType Digest AuthName "Hoge Zone" AuthUserFile /var/hage/.htdigest <LimitExcept OPTIONS> Require valid-user </LimitExcept> </Directory>
くらいを記述しておきます。
a2ensite auth_digest
も忘れずに。
サービス再起動
最後に
systemctl restart apache2.service
を実行してサービスを再起動します。
gitのインストール
とてもとても、GitHubみたいに人様の見られるところに私のソースなんて晒せない、なんて場合に重宝します(笑)ここではgit-daemonとして動かすのではなく、先にインストールしたApache経由で動かすことにします。インストール自体はいつものように簡単に終わります。
apt install git
レポジトリの作成
「/var/lib」以下に作成するといたします。
cd /var/lib/ mkdir git cd git mkdir hoge.git cd hoge.git git --bare init --shared=true git update-server-info chown -R www-data.www-data /var/lib/git/hoge.git mv hooks/post-update.sample hooks/post-update
Apache2側の設定
以下のような設定を、「/etc/apache2/sites-enabled/」以下のファイル(de)に書き加えました。
SetEnv GIT_PROJECT_ROOT /var/lib/git SetEnv GIT_HTTP_EXPORT_ALL ScriptAlias /git/ /usr/lib/git-core/git-http-backend/ <Location /git/> AuthType Digest AuthName "Hoge Zone" AuthUserFile /var/hoge/.htdigest Require valid-user </Location>
最後に
上記手順ですが、かなりの試行錯誤の仮定はスキップしております。なかなかスムーズには行かないもので、必要に応じて「/var/log/apache2/error.log」などを確認する必要があると思います。私の場合、色々と順番が狂ったために、レポジトリ内のinfoにある一つのファイルがroot所有になっており、変更できなくてアクセスが通らなかった、などというエラーもありました(chownで解決)。
参考URL等
- https://server-setting.info/debian/apache-install-debian-ubuntu.html
- https://git-scm.com/book/ja/v2/Git%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC-Smart-HTTP
- https://git-scm.com/docs/git-http-backend
- http://next49.hatenadiary.jp/entry/20130415/p2
コメント