DebianでApache・gitサーバー構築

前で立てた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

コメント

タイトルとURLをコピーしました