皆さま、いかがお過ごしでしょうか?歌乃です。
前回(すぐ忘れる自分のためのweb開発環境準備手順)からの続きでございます。
前回は
あるぇ?箇条書きにしたら大して作業してないみたいな感じが…(;・∀・)
いやいや、wslの設定とか、ubuntu インストール後のパッケージ更新とか、それなりにやることあったんですよ(たぶん)!
Windowsで作業しているとはあまり意識しませんが、Linuxではユーザーの権限、特にファイルの所有権に関する設計思想に従わなければいけない場面が多々あります。
Ubuntu 上の Apache2 では webサーバーの公開ディレクトリはデフォルトで var/www/html になっていますが、前述のような問題もあって別のディレクトリに変更して運用するのが無難です。
またlinuxはマルチユーザーでの運用を前提に考えられているので、各ユーザーごとにページを公開するといった使い方もできるようになっています。
apache サーバーの動きを決める設定ファイル httpd.conf(apache.conf) にはいろいろな設定が記述されていますが、ubuntuのapache2にはユーザーディレクトリ配下にファイルを置いて公開するための設定がすでに用意されています。
「/etc/apache2/mods-available/userdir.conf」がそれです。
ファイルの中を覗くと
<IfModule mod_userdir.c>
UserDir public_html
UserDir disabled root
<Directory /home/*/public_html>
AllowOverride FileInfo AuthConfig Limit Indexes
Options MultiViews Indexes SymLinksIfOwnerMatch IncludesNoExec
Require method GET POST OPTIONS
</Directory>
</IfModule>
ユーザーディレクトリの配下に「public_html」というディレクトリを作ってそこを利用すればいいようです。
ただし、このユーザーディレクトリモジュールはデフォルトでは読み込まれていません。なので読み込まれるように設定します。
以下のコマンドを実行します。
$ sudo a2enmod userdir
このコマンドの実行で userdir 関連のファイルが「/etc/apache2/mods-enabled/」配下にシンボリックリンクされてapacheの起動時に読み込まれるようになります。
設定を変更したので、忘れずにサービスを再起動しておきましょう。
$ sudo systemctl restart apache2
ユーザーディレクトリ配下に公開用ディレクトリを作成します。confの設定に合わせて「public_html」で作成します。
$ cd /home/utano/
$ mkdir public_html
utanoの部分は自分のユーザー名に置き換えてください。
apache にはさまざまな設定ファイルがありますが、公開ディレクトリの設定は virtual host の設定情報の中に記述されています。
virtual host はwebサーバーにアクセス(リクエスト)があった場合に、host名(大抵はサイト名≒ドメインorサブドメイン)ごとにアクセス先(webサーバー上のディレクトリ)を切り替えることで、webサーバーへのアクセス(リクエスト)が host へのアクセスのように見せかけるための仕様です。
virtual host を利用することで一台のwebサーバーで複数のhost(サイトやドメイン)の運用が可能になります。
ubuntuのapache2の場合 VirtualHost の記述は「/etc/apache2/sites-available/000-default.conf」にあります。vi や nano を使ってターミナル上からファイルを編集します。
$ sudo vi /etc/apache2/sites-available/000-default.conf
conf内で変更する箇所は2つ。
「DocumentRoot」と「Directory ディレクティブ」です。
DocumentRoot ディレクティブに関しては
~~
DocumentRoot /var/www/html
~~
となっている箇所を
~~
# DocumentRoot /var/www/html *コメントアウトする
DocumentRoot /home/utano/public_html
~~
新しく設定したい公開ディレクトリに変更します。ディレクトリ末尾のスラッシュの有無に関してはapacheのドキュメントに「末尾にスラッシュ付けないでね」と書いてあるのでそれに従います。
Directory ディレクティブも
~~
<Directory /var/www/html>
Require all granted
~~
となっているところを
~~
<Directory /home/utano/public_html>
Require all granted
~~
新しく設定したい公開ディレクトリに変更しておきます。
ユーザーディレクトリ配下のpublic_htmlに関しては、前述した「userdir.conf」内に記述があるので、ぶっちゃけVirtualHostディレクティブ内に記述が無くても動作します。
Linuxというかapacheの設定ファイルは細分化されているためかなり大量にあります。
管理者や開発者ですら「迷走しているのでは?」と思わせるようなファイルのとっちらかりようです。
良くあるのは http.conf、httpd.conf、apache.conf あたりですが、conf ファイルの中で別の conf ファイルを読み込んだりしているので、苦労して見つけた後は「ユリーカ!」と叫んでしまうくらいです。
さてそんな conf ファイルの探し方ですが、まずは「systemctl list-units --type=service」コマンドでサービスの一覧を表示して、サーバー上で動いているhttpサービスを探します。
$ systemctl list-units --type=service
UNIT LOAD ACTIVE SUB DESCRIPTION >
apache2.service loaded active running The Apache HTTP Server
apport.service loaded active exited LSB: automatic crash report generation
console-getty.service loaded active running Console Getty
~~
HTTP サーバーとしてapache2 が動いていることが判ります。
apache2 の情報を確認します。
$ apache2 -V
Server version: Apache/2.4.52 (Ubuntu)
Server built: 2024-07-17T18:57:26
~~
-D HTTPD_ROOT="/etc/apache2"
-D SUEXEC_BIN="/usr/lib/apache2/suexec"
-D DEFAULT_PIDLOG="/var/run/apache2.pid"
-D DEFAULT_SCOREBOARD="logs/apache_runtime_status"
-D DEFAULT_ERRORLOG="logs/error_log"
-D AP_TYPES_CONFIG_FILE="mime.types"
-D SERVER_CONFIG_FILE="apache2.conf"
確認した情報から、apacheのルートディレクトリが「/etc/apache2」であることとサーバー設定ファイルが「apache2.conf」であることが判ります。
「/etc/apache2/apache2.conf」を確認します。
~~
# It is split into several files forming the configuration hierarchy outlined
# below, all located in the /etc/apache2/ directory:
#
# /etc/apache2/
# |-- apache2.conf
# | `-- ports.conf
# |-- mods-enabled
# | |-- *.load
# | `-- *.conf
# |-- conf-enabled
# | `-- *.conf
# `-- sites-enabled
# `-- *.conf
#
~~
# Include the virtual host configurations:
IncludeOptional sites-enabled/*.conf
コメントでconf ファイルの配置概要が示されており、目的のvirtual host 関連ディレクティブが「sites-enabled/*.conf」という形で追加で読み込まれているのではあるまいか、ということが推察できます。
「/etc/apache2/sites-enabled」配下を確認します。
$ ls -l /etc/apache2/sites-enabled/
total 0
lrwxrwxrwx 1 root root 35 Jul 27 21:16 000-default.conf -> ../sites-available/000-default.conf
ファイルの実体は存在せず、シンボリックリンクとして「/sites-available/000-default.conf」がリンクされているのが判ります。
この時点でやっと前述の設定ファイル「/etc/apache2/sites-available/000-default.conf」にたどり着きます。
public_html 配下に適当なファイルをつくって動作確認をおこないます。
echo "hogehoge" > index.html
ファイルにアクセス(表示)可能かどうかが判別できればいいので、ファイル内容は適当で(htmlタグなどでなくても)OKです。
linuxで新規ファイルを作るにはいくつか方法があります。よくあるのは $ touch new.txt といった touch コマンドを使う方法です。touch はファイルのタイムスタンプを更新する目的で使用されますが、存在しないファイルにアクセスするとファイルを作成(タイムスタンプを更新)します。もし同一のファイル名があったとしても内容は書き換わらず、タイムスタンプが更新されるだけなので安全な手法といえます。
echo コマンドをリダイレクトすることでもファイルを作成することができます。この場合echo した内容がファイルの内容になるため、既存のファイル名を指定した場合はそのファイルの中身が書き換わるので注意が必要です。
その他にはエディターであるvi を使う手もあります。vi で存在しないファイルを指定して編集し、保存することでファイルが作成されます。
localhost(http://localhost)にアクセスしてファイル内容が表示されれば成功です。
何らかの問題でサイトが見れない場合は以下の項目を確認してみてください。
<Directory /home/hoge/public_html>
~~
Order allow,deny
Allow from all
</Directory>
上のような記述があれば
<Directory /home/hoge/public_html>
~~
Require all granted
</Directory>
のように書き直す。
それでも改善しない場合は根本的に調査するしかありません。apache のエラーログを確認しましょう。
エラーログは(ubuntuのapache2の場合は)以下の場所にあります。
$ cat -n /var/log/apache2/error.log
error.log を確認してどこでなにが問題を起こしているかを突き止めてください。
まだ続くかも。(`・ω・´)
続きです。すぐ忘れる自分のためのweb開発環境準備手順その3 - wsl -