PR

Apache on Nextcloud + Gitlab

ApacheはWebサーバーであり、NextcloudやGitLabのようなWebアプリケーションをホスティングするために使用することができます。以下は、Apacheを使用してNextcloudとGitLabを同じサーバー上で実行する手順の概要です。

Webサーバー:2.4.x
Nextcloud : LastVersion(最新)
Gitlab : LastVersion

手順

apacheの設定

<VirtualHost *:80>
DocumentRoot /var/www/html/gitlab
ServerName gitlab.{domain}
ServerAdmin webmaster@n{domain}
ErrorLog logs/gitlab.{domain}-error_log
CustomLog logs/gitlab.{domain}-access_log combined
RewriteEngine on
RewriteCond %{SERVER_NAME} =gitlab.{domain}
RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]
</VirtualHost>

このApacheの設定は、HTTPリクエストを受信した場合に、リクエストをHTTPSにリダイレクトすることで、GitLabのセキュリティを強化するためのものです。

以下が、この設定ファイルの詳細な説明です。

  1. <VirtualHost *:80>: このディレクティブは、ポート80でリクエストを受け取ることを定義します。これは、HTTP接続を使用してリクエストを受信するためのものです。
  2. DocumentRoot /var/www/html/gitlab: このディレクティブは、リクエストされたファイルが存在する場所を定義します。ここでは、GitLabのインストールディレクトリが指定されています。
  3. ServerName gitlab.{domain}: このディレクティブは、サーバーの名前を定義します。ここでは、GitLabのドメイン名が指定されています。
  4. ServerAdmin webmaster@n{domain}: このディレクティブは、サーバー管理者のメールアドレスを定義します。このアドレスは、Apacheからのエラーメッセージを送信するために使用されます。
  5. ErrorLog logs/gitlab.{domain}-error_log: このディレクティブは、Apacheのエラーメッセージのログファイルのパスを定義します。
  6. CustomLog logs/gitlab.{domain}-access_log combined: このディレクティブは、Apacheのアクセスログのファイルのパスを定義します。
  7. RewriteEngine on: このディレクティブは、ApacheのURLリライト機能を有効にします。
  8. RewriteCond %{SERVER_NAME} =gitlab.{domain}: このディレクティブは、リクエストがgitlab.{domain}に対して行われた場合に、リライトルールが適用されるように設定します。
  9. RewriteRule ^ https://%{SERVER_NAME}%{REQUEST_URI} [END,NE,R=permanent]: このディレクティブは、リクエストをHTTPSにリダイレクトするルールを定義します。[END]は、リライトルールを終了することを示し、[NE]は、クエリストリングをエスケープしないことを示します。[R=permanent]は、リダイレクトを301永続的なリダイレクトとして設定することを示します。

これらの設定を適用するためには、Apacheを再起動する必要があります。sudo service apache2 restartコマンドを実行して、Apacheを再起動することができます。

<IfModule mod_ssl.c>
<VirtualHost *:443>
    DocumentRoot /var/www/html/gitlab
    ServerName gitlab.{domain}
    ServerAdmin webmaster@{domain}
    ErrorLog logs/{domain}-error_log
    CustomLog logs/{domain}-access_log combined
    
    ServerSignature Off
    ProxyPreserveHost On
    AllowEncodedSlashes NoDecode

    <Location />
        # Apache 2.4以降の新しい認証コマンド
        Require all granted

        # gitlab-workhorseへの転送を許可
        ProxyPassReverse http://127.0.0.1:8181
        ProxyPassReverse http://YOUR_SERVER_FQDN/
    </Location>

    RewriteEngine on
    RewriteCond %{REQUEST_URI} ^/api/v\d+/.* [OR]
    RewriteCond %{REQUEST_URI} .*-/refs/.*/logs_tree/.* [OR]
    RewriteCond %{REQUEST_URI} .*-/tree/.*
    RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA,NE]
    RewriteCond %{DOCUMENT_ROOT}/%{REQUEST_FILENAME} !-f [OR]
    RewriteCond %{REQUEST_URI} ^/uploads/.*
    RewriteRule .* http://127.0.0.1:8181%{REQUEST_URI} [P,QSA]

    RequestHeader set X_FORWARDED_PROTO 'https'
    RequestHeader set X-Forwarded-Ssl on
    DocumentRoot /opt/gitlab/embedded/service/gitlab-rails/public

    # バックエンドがダウンした場合のエラードキュメントの設定
    ErrorDocument 404 /404.html
    ErrorDocument 422 /422.html
    ErrorDocument 500 /500.html
    ErrorDocument 502 /502.html
    ErrorDocument 503 /503.html

    # Let's Encryptの証明書を使用するための設定
    SSLCertificateFile /etc/letsencrypt/live/{domain}/fullchain.pem
    SSLCertificateKeyFile /etc/letsencrypt/live/{domain}/privkey.pem
    SSLCACertificateFile /etc/letsencrypt/live/{domain}/chain.pem
    Include /etc/letsencrypt/options-ssl-apache.conf
</VirtualHost>
</IfModule>

このコードは、Apacheを使用してGitLabをホストするための設定を定義しています。

以下はコードの各部分の説明です。

1行目: Apacheがmod_sslを使用してロードされていることを確認します。

2行目: このVirtualHostがHTTPSポートで動作することを指定します。

3行目: GitLabがインストールされたディレクトリを指定します。

4行目: サイトの名前を指定します。

5行目: サイトの管理者のメールアドレスを指定します。

6行目: エラーログの場所を指定します。

7行目: アクセスログの場所を指定します。

9-11行目: サーバーシグネチャを非表示にし、プロキシの設定を行います。

13-17行目: /(ルート)ディレクトリの認証設定を行います。Require all grantedは、Apache 2.4以降で新しい認証コマンドです。

19-22行目: URLが指定された場合に、リクエストをgitlab-workhorseに転送する設定を行います。

24-29行目: URLのリライト設定を行います。

31-32行目: バックエンドがダウンした場合のエラードキュメントの設定を行います。

34-38行目: Let’s Encryptの証明書を使用するための設定を行います。

このコードは、GitLabをApacheでホストするための基本的な設定を提供しています。ただし、特定の環境によっては、より細かい設定が必要になる場合があります。

UbuntuでのLet’s Encryptの証明書取得方法

Let’s Encryptは、無料で利用できるSSL/TLS証明書の提供を行っている認証局です。Ubuntuにおいては、certbotを使用して簡単にLet’s Encryptの証明書を取得することができます。以下に手順を示します。

  1. まず、certbotをインストールします。ターミナルで以下のコマンドを実行します。
sudo apt-get update
sudo apt-get install certbot
  1. 次に、certbotを使用して証明書を取得します。以下のコマンドを実行します。
sudo certbot certonly --webroot --webroot-path /var/www/html -d example.com

上記のコマンドでは、/var/www/htmlに設置されたexample.comのドメインに対して証明書を取得することを指示しています。実行後、いくつかの質問が表示されますので、回答する必要があります。

  1. certbotが証明書を取得するために、example.comのウェブルートフォルダ内にいくつかのファイルを配置する必要があります。以下のコマンドを実行して、フォルダを作成します。
sudo mkdir -p /var/www/html/.well-known/acme-challenge
  1. 最後に、取得した証明書をApacheに適用する必要があります。これには、以下のような設定をApacheのVirtualHostに追加する必要があります。
SSLEngine on
SSLCertificateFile /etc/letsencrypt/live/example.com/fullchain.pem
SSLCertificateKeyFile /etc/letsencrypt/live/example.com/privkey.pem

上記の例では、example.comの証明書を適用することを指定しています。

これらの手順を実行することで、UbuntuでLet’s Encryptの証明書を簡単に取得できます。

コメント

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