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のセキュリティを強化するためのものです。
以下が、この設定ファイルの詳細な説明です。
<VirtualHost *:80>
: このディレクティブは、ポート80でリクエストを受け取ることを定義します。これは、HTTP接続を使用してリクエストを受信するためのものです。DocumentRoot /var/www/html/gitlab
: このディレクティブは、リクエストされたファイルが存在する場所を定義します。ここでは、GitLabのインストールディレクトリが指定されています。ServerName gitlab.{domain}
: このディレクティブは、サーバーの名前を定義します。ここでは、GitLabのドメイン名が指定されています。ServerAdmin webmaster@n{domain}
: このディレクティブは、サーバー管理者のメールアドレスを定義します。このアドレスは、Apacheからのエラーメッセージを送信するために使用されます。ErrorLog logs/gitlab.{domain}-error_log
: このディレクティブは、Apacheのエラーメッセージのログファイルのパスを定義します。CustomLog logs/gitlab.{domain}-access_log combined
: このディレクティブは、Apacheのアクセスログのファイルのパスを定義します。RewriteEngine on
: このディレクティブは、ApacheのURLリライト機能を有効にします。RewriteCond %{SERVER_NAME} =gitlab.{domain}
: このディレクティブは、リクエストがgitlab.{domain}に対して行われた場合に、リライトルールが適用されるように設定します。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の証明書を取得することができます。以下に手順を示します。
- まず、certbotをインストールします。ターミナルで以下のコマンドを実行します。
sudo apt-get update
sudo apt-get install certbot
- 次に、certbotを使用して証明書を取得します。以下のコマンドを実行します。
sudo certbot certonly --webroot --webroot-path /var/www/html -d example.com
上記のコマンドでは、/var/www/htmlに設置されたexample.comのドメインに対して証明書を取得することを指示しています。実行後、いくつかの質問が表示されますので、回答する必要があります。
- certbotが証明書を取得するために、example.comのウェブルートフォルダ内にいくつかのファイルを配置する必要があります。以下のコマンドを実行して、フォルダを作成します。
sudo mkdir -p /var/www/html/.well-known/acme-challenge
- 最後に、取得した証明書を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の証明書を簡単に取得できます。
コメント