自宅のラズパイをWEBサーバーとして扱う

## はじめに
ぴよぴよな僕ですが、WEBサーバーについて理解を深めたいな〜と思い、
自宅に放置されていたRaspberryPiちゃんでWEBサーバーを構築してみることにしました。
個人の備忘録的な感じなので誤字脱字や間違いなどあったら申し訳ありません…！

#### 環境
- RaspberryPi 4 Model B Rev 1.5
    - OS: Raspbian GNU/Linux 10
    - Apache 2.4.38

#### 手順
流れとしては、
- Apacheのインストール
- ファイアウォールの設定
- ポート開放
- HTML配置
- 確認

と上記の流れで進めたいと思います！

## 1. Apacheをインストール
まずはラズパイに最新パッケージをいれましょう！
```
sudo apt-get update
```
Apacheのインストール
```
sudo apt-get install apache2
```
動作しているか確認
```
sudo systemctl status apache2
```
```
apache2.service - The Apache HTTP Server
   Loaded: loaded (/lib/systemd/system/apache2.service; enabled; vendor preset: enabled)
   Active: active (running) since Sat 2023-02-04 04:45:31 GMT; 3h 8min ago
```
activeとなっているので動いてそうですね！
ではブラウザで動作しているのか確認してみましょう〜
ラズパイちゃんのローカルIPアドレスを知る必要があるので…
```
hostname -I
```
とするとラズパイちゃんのローカルIPがわかります。
```
192.168.1.44 ********* #このIPアドレスをブラウザに打ち込む
```
するとこんな画面が表示されます
![apache-img.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821082/4fbb4c54-1ce1-a6c5-5060-09c3d4ab0c53.png)

ここまででApacheのインストールは終了なのですが、
どういった設定ファイルがあるか確認しておきましょう。
```
#ここには設定ファイルが入っている
/etc/apache2/
    ├─apache2.conf        メインの設定ファイル
    ├─conf-available/     グローバル構成フラグメントの設定フォルダ(すべての設定ファイル)
    ├─conf-enabled/       グローバル構成フラグメントの設定フォルダ(有効済み)
    ├─envvars             apacheの環境変数
    ├─magic
    ├─mods-available/     モジュールの設定フォルダ（すべての設定ファイル）
    ├─mods-enabled/       モジュールの設定フォルダ（有効済み）
    ├─ports.conf          portに関する設定
    ├─sites-available/    仮想ホスト構成の設定フォルダ(すべての設定ファイル)
    └─sites-enabled/      仮想ホスト構成の設定フォルダ(有効済み)
```
ずいぶん細かく別れているんですね…！
他にも”/lib/apache2/modules/”にはモジュールなどが。
”var/log/apache2/”にはログが入ってます。
基本設定ファイルの```apache2.conf```を覗いてみましょう。
```
less /etc/apache2/apache2.conf
```
するとこんな感じで表示されました。
```
# HostnameLookups: Log the names of clients or just their IP addresses
# e.g., www.apache.org (on) or 204.62.129.132 (off).
# The default is off because it'd be overall better for the net if people
# had to knowingly turn this feature on, since enabling it means that
# each client request will result in AT LEAST one lookup request to the
# nameserver.
# DNS名ルックアップの設定
HostnameLookups Off

# ErrorLog: The location of the error log file.
# If you do not specify an ErrorLog directive within a <VirtualHost>
# container, error messages relating to that virtual host will be
# logged here.  If you *do* define an error logfile for a <VirtualHost>
# container, that host's errors will be logged there and not here.
# エラーログファイルの場所
ErrorLog ${APACHE_LOG_DIR}/error.log

# error_logに記録されるメッセージの重要度をコントロールします。
# LogLevel: Control the severity of messages logged to the error_log.
# Available values: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the log level for particular modules, e.g.
# "LogLevel info ssl:warn"
#
LogLevel warn

# モジュールの設定をインクルードします。
# Include module configuration:
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf

# Include list of ports to listen on
Include ports.conf


# Sets the default security model of the Apache2 HTTPD server. It does
# not allow access to the root filesystem outside of /usr/share and /var/www.
# The former is used by web applications packaged in Debian,
# the latter may be used for local directories served by the web server. If
# your system is serving content from a sub-directory in /srv you must allow
# access here, or in any related virtual host.
# --日本語訳--
# Apache2 HTTPDサーバのデフォルトセキュリティモデルを設定します。これは
# /usr/share と /var/www 以外のルートファイルシステムへのアクセスを許可しません。
# 前者はDebianに同梱されているWebアプリケーションで利用されています,
# 後者は, Webサーバが提供するローカルディレクトリに利用されるかもしれません. もし
# システムが/srvのサブディレクトリからコンテンツを提供している場合, ここへのアクセスを許可する必要があります.
# ここで, もしくは関連するバーチャルホストでアクセスを許可する必要があります.
<Directory />
        Options FollowSymLinks
        AllowOverride None
        Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

#<Directory /srv/>
#       Options Indexes FollowSymLinks
#       AllowOverride None
#       Require all granted
#</Directory>
```
ふむふむ。よくわかりませんね。笑
こんどは"/var/www/"に移動してみます。
```
cd /var/www/
```
どうやらここに先程表示されたHTMLが配置されているようです。
```
/var/www/html
    ├─index.html        さっきブラウザで見たHTMLファイル
```
他、詳しくは公式を読みこもうと思います！

https://httpd.apache.org/docs/2.4/

## 2.ファイアーウォールとポートの開放
では早速インストールから初めます。
```
#ファイアーウォールをインストール
sudo apt install ufw

#有効化
sudo ufw enable

#使用するポートを開く(http)
sudo ufw allow 80/tcp

#ssh用
sudo ufw allow 22/tcp

# 確認
sudo ufw status
```
つぎにラズパイのIPアドレスを固定にします。
```
#設定ファイル開く
sudo vim /etc/dhcpcd.conf
```
下記の箇所を編集します。
```
# ここのセクションを編集
# Example static IP configuration:
interface <インターフェース名>
static ip_address=<好きなIPアドレス (例) 192.168.1.200/24 とか>
#static ip6_address=<既定値あればそのまま。IPv6は今回使わない>
static routers=<デフォルトゲートウェイのIPアドレス>
static domain_name_servers=<DNSサーバーのIPアドレス> 
```
ラズパイのインターフェース名やIPアドレスは、
```
ifconfig
```
自宅のネットワークのデフォルトゲートウェイは、Windowsの場合だと
```
ipconfig /all
```
Macの場合はシステム環境設定などから確認します。
完了したら、ラズパイを再起動させましょう。
```
#再度IPアドレスを確認
hostname -I
```
で、先程の好きなIPアドレスに変更されていればOKです。
次にポート開放です。
筆者の場合は、SGP200Wという機器ですが、”<機器名> ポート開放”などと検索すれば設定方法はすぐに検索できると思います。因みにSGP200Wについてはこちらを参考にしました。

https://www.akakagemaru.info/port/sgp200w-portfw.html

## 3.HTMLファイルを配置する
最後に"var/www/html/"の配下に適当なhtmlを配置してみましょう。
```
cd /var/www/html/

sudo vim home.html
```
home.htmlに適当に書き込む
```
<h1>Hello My home!</h1>
```
![imge.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2821082/7d333ff4-f04d-287c-618d-36878b0231f4.png)

パブリックなIPアドレスにアクセスして問題無く表示されることを確認して終了です！

今回は、Apacheをまずは触ってみる良い機会になりました。
この先も試行錯誤しながら理解を深めていこうと思います！
いろいろ応用して自宅のオリジナル監視カメラとか作っても面白そうですね！
(このところカラス被害に悩まされているので、そういった撃退カメラシステムなんかやってみようかな…)