コマンドで様々なOSにHTTPサーバをインストール

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

# 初めに
ロードバランサーを作成した後、HTTPサーバをバックエンドとしてセットアップし、ヘルスチェックを行うことは、一般的な作業です。このブログは、様々なOSにおいてHTTPサーバ（IISまたはApache）をインストールする手順をまとめたものです。少しお役立てれば幸いです。

**動作確認済環境**
<font color=blue>OCI</font> (Oracle Cloud Infrastructure)のプラットフォームイメージで作成されたVMインスタンス。

**目次**
- [1.「Windows Server 2019」にIISをインストール](#1windows-server-2019にiisをインストール)
- [2.「Oracle Linux 7,8,9」にApache HTTPサーバをインストール](#2oracle-linux-789にapache-httpサーバをインストール)
- [3.「CentOS 8」にApache HTTPサーバをインストール](#3centos-8にapache-httpサーバをインストール)
- [4.「Ubuntu 20」にApache HTTPサーバをインストール](#4ubuntu-20にapache-httpサーバをインストール)
- [付録 - 初期化スクリプト](#付録---初期化スクリプト)
  - [Windows Server](#windows-server)
  - [Oracle Linux](#oracle-linux)
  - [CentOS](#centos)
  - [Ubuntu](#ubuntu)

# 1.「Windows Server 2019」にIISをインストール
一行のPowerShellスクリプトで、マイクロソフトのIIS（インターネットインフォメーションサービス）をインストールできます。

管理者ユーザーとしてPowerShellを起動し、次のコマンドを実行します。
<strong>Command</strong>: `Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature  -IncludeManagementTools`

```powershell
PS C:\Windows\system32> Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature  -IncludeManagementTools

Success Restart Needed Exit Code      Feature Result
------- -------------- ---------      --------------
True    No             Success        {ASP.NET 4.7, .NET Framework 3.5 (includes...


PS C:\Windows\system32>
```
次のようなウェルカムページが表示されます。 （PCの再起動は不要です。）
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/8611d033-1e1b-7335-5876-8043120f367b.png" width="600">


# 2.「Oracle Linux 7,8,9」にApache HTTPサーバをインストール

次は「Oracle Linux」にApache HTTPサーバ(httpd)をインストールする方法の例です。

デフォルトでは、HTTPポート（80/443）がファイアウォールレベルで閉じられています。ポートを開くには、firewall-cmdを使用します。念のため、firewalldが<font color=blue>実行中</font>の状態にあることを確認してください。(OCIインスタンスが作成された後、firewalldはデフォルトで実行中の状態になります。)
<strong>コマンド</strong>: `sudo systemctl status firewalld`

```bash
[opc@linux7 ~]$ sudo systemctl status firewalld
● firewalld.service - firewalld - dynamic firewall daemon
   Loaded: loaded (/usr/lib/systemd/system/firewalld.service; enabled; vendor preset: enabled)
   Active: active (running) since Mon 2021-10-25 12:36:46 GMT; 9min ago
     Docs: man:firewalld(1)
 Main PID: 1297 (firewalld)
   Memory: 4.1M
   CGroup: /system.slice/firewalld.service
           mq1297 /usr/bin/python2 -Es /usr/sbin/firewalld --nofork --nopid

Oct 25 12:36:45 localhost.localdomain systemd[1]: Starting firewalld - dynamic firewall daemon...
Oct 25 12:36:46 localhost.localdomain systemd[1]: Started firewalld - dynamic firewall daemon.
Oct 25 12:36:46 localhost.localdomain firewalld[1297]: WARNING: AllowZoneDrifting is enabled. This is considered an insec... now.
Hint: Some lines were ellipsized, use -l to show in full.
[opc@linux7 ~]$
```

firewalldが停止している場合は、次のコマンドを使用して起動します。
<strong>コマンド</strong>: `sudo systemctl start firewalld`

次のコマンドを使用してApacheをインストールし、HTTPポートを開きます。

```bash
sudo yum -y install httpd
sudo firewall-cmd --permanent --add-port=80/tcp
sudo firewall-cmd --reload
sudo systemctl start httpd
```

コマンド `sudo firewall-cmd --list-ports`を使用してHTTPポートが開いていることを確認できます。

```bash
[opc@linux7 ~]$ sudo firewall-cmd --list-ports
80/tcp
[opc@linux7 ~]$
```

httpdがアクティブ状態になったら、ブラウザを開いてサーバのIPアドレスまたはDNS名を入力すると、次のようなテストページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/80a44226-5237-34fe-c351-79cf309fe151.png)

新しいインデックスページを作成したい場合は、index.htmlを編集してください。

```bash
sudo su
echo 'AP-Server1' >> /var/www/html/index.html
exit
```

# 3.「CentOS 8」にApache HTTPサーバをインストール

インストールと起動のコマンドは「Oracle Linux」と同じです。
```bash
[opc@centos8 ~]$ sudo yum -y install httpd
......
Complete!
[opc@centos8 ~]$ sudo systemctl start httpd
[opc@centos8 ~]$ sudo systemctl status httpd
œ httpd.service - The Apache HTTP Server
   Loaded: loaded (/usr/lib/systemd/system/httpd.service; disabled; vendor preset: disabled)
   Active: active (running) since Fri 2022-11-04 12:51:14 GMT; 4s ago
......
[opc@centos8 ~]$ 
```
__HTTPポートを許可__
コマンド例：`sudo iptables -I INPUT -p TCP --dport 80 -j ACCEPT`
```bash
[opc@centos ~]$ sudo iptables -I INPUT -p TCP --dport 80 -j ACCEPT
[opc@centos ~]$ sudo iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
2    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
3    ACCEPT     icmp --  anywhere             anywhere
4    ACCEPT     all  --  anywhere             anywhere
5    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
6    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
[opc@centos ~]$
```
ブラウザで確認したら、次のようなテストページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/f9cbe194-9efd-5842-97f1-d2b0a118f0c0.png)


# 4.「Ubuntu 20」にApache HTTPサーバをインストール
`iptables`コマンドを使用して、入力のチェーン・ルールを作成します。 （上記のCentOSと同じです。）

```bash
ubuntu@ubuntu:~$ sudo iptables -I INPUT -p TCP --dport 80 -j ACCEPT
ubuntu@ubuntu:~$ sudo iptables -L INPUT --line-numbers
Chain INPUT (policy ACCEPT)
num  target     prot opt source               destination
1    ACCEPT     tcp  --  anywhere             anywhere             tcp dpt:http
2    ACCEPT     all  --  anywhere             anywhere             state RELATED,ESTABLISHED
3    ACCEPT     icmp --  anywhere             anywhere
4    ACCEPT     all  --  anywhere             anywhere
5    ACCEPT     udp  --  anywhere             anywhere             udp spt:ntp
6    ACCEPT     tcp  --  anywhere             anywhere             state NEW tcp dpt:ssh
7    REJECT     all  --  anywhere             anywhere             reject-with icmp-host-prohibited
ubuntu@ubuntu:~$
```

aptを使用してApache HTTPサーバをインストールします。
<strong>コマンド</strong>: `sudo apt install apache2`

この時点では、デフォルトのウェルカムページが表示できますけど、インスタンス作成直後、ufwは有効になっていないことをご注意ください。有効化するには、次のコマンドをご利用ください。
<strong>コマンド</strong>: `sudo ufw enable`

以下のように、Apacheのファイアウォール情報を確認できます。 （HTTPポートが開いていることを確認）
<strong>コマンド</strong>: `sudo ufw app info Apache`

```ruby
ubuntu@ubuntu:~$ sudo ufw status
Status: inactive
ubuntu@ubuntu:~$ sudo ufw enable
Command may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startup
ubuntu@ubuntu:~$ sudo ufw status
Status: active
ubuntu@ubuntu:~$ sudo ufw app list
Available applications:
  Apache
  Apache Full
  Apache Secure
  OpenSSH
ubuntu@ubuntu:~$ sudo ufw app info Apache
Profile: Apache
Title: Web Server
Description: Apache v2 is the next generation of the omnipresent Apache web
server.

Port:
  80/tcp
ubuntu@ubuntu:~$
```

ブラウザで確認したら、次のようなデフォルトのウェルカムページが表示されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/33d5af9c-b672-0618-fd58-ccbfd3147281.png)

# 付録 - 初期化スクリプト
クラウドでVMを作成する際に、上記のコマンドをcloud-initスクリプトに配置すると、インスタンスの起動後にHTTPサーバが自動的にインストールされます。
<img src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/c8c71f67-fed1-6816-b0f0-63a72083c388.png", width="600">
## Windows Server
__Cloud-init Script__
```bash
#ps1_sysnative
Install-WindowsFeature -Name Web-Server -IncludeAllSubFeature -IncludeManagementTools
```

## Oracle Linux
__Cloud-init Script__
```bash
#!/bin/bash
yum update -y
yum install httpd -y
firewall-cmd --permanent --add-port=80/tcp
firewall-cmd --reload
systemctl start httpd
```

## CentOS 
__Cloud-init Script__
```bash
#!/bin/bash
yum update -y
yum install httpd -y
systemctl start httpd
iptables -I INPUT -p TCP --dport 80 -j ACCEPT
```

## Ubuntu
__Cloud-init Script__
```bash
#!/bin/bash
apt update -y
apt install apache2 -y
iptables -I INPUT -p TCP --dport 80 -j ACCEPT
```

以上です。

----
__関連記事__
[OCI Cloud-initスクリプト](https://qiita.com/letian/items/10152a4fec813c1b7d98#11-cloud-init%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88)