
こんにちは、OPTiM Storeの開発チームの半田です。
クラウドでサーバを構築したことはあっても物理サーバを構築したことはないなとふと考え、自宅で簡単にやってみることにしました。
不要なWindows 7のPCがあるので、これをCentOS 8のWebサーバにしてみます。
今回は本当に最低限の工数を想定して、インターネット越しにアクセスして静的なHTMLを表示させることだけを目標にします。
※学習意図の内容のため、実運用に耐えるものではありません。セキュリティや、常時起動の対応を行っておりません。
※一度LinuxにしたWindowsは元には戻せない可能性があります。
※今回CentOS 8を使っていますが、2021年12月31日をもってサポートが終了します。
- 使用機器
- Linuxインストール用のブータブルUSBを準備する
- Windows 7をCentOS 8にする
- 最低限のWebサーバに仕立て上げる
- LAN内で確認する
- ルータの設定を変更して、インターネットから確認する
- まとめ
使用機器
(1) Windows 7
今回CentOS 8になってもらうマシンです。自宅の光回線にwifiで接続しています。
スペックは以下です。
プロセッサ: Intel Core i7 @2.20GHz メモリ: 8.00GB
(2) MacBookPro
作業・LAN内確認用マシンです。 Windows 7と同じ自宅の光回線にwifiで接続しています。
(3) Androidスマホ
インターネット確認用マシンです。自宅の光回線には繋がず、4G回線を使っています。
Linuxインストール用のブータブルUSBを準備する
作業用MacBookProで、以下のサイトからCentOS 8のisoデータをダウンロードします。
私はCentOS-8.4.2105-x86_64-boot.isoをデスクトップにダウンロードしました。
CentOSダウンロードページ
次にUSBを挿して、その名前を調べます。
$ ls /Volumes Macintosh HD HANDA Recovery
Macintosh HDとRecoveryは元々あるものなので、HANDAだとわかりました。
今度はこのUSBのデバイスファイル名を調べます。
$ diskutil list
/dev/disk0 (internal, physical):
#: TYPE NAME SIZE IDENTIFIER
0: GUID_partition_scheme *1.0 TB disk0
1: EFI EFI 314.6 MB disk0s1
2: Apple_APFS Container disk1 1.0 TB disk0s2
/dev/disk1 (synthesized):
#: TYPE NAME SIZE IDENTIFIER
0: APFS Container Scheme - +1.0 TB disk1
Physical Store disk0s2
1: APFS Volume Macintosh HD 11.1 GB disk1s1
2: APFS Volume Macintosh HD - Data 253.5 GB disk1s2
3: APFS Volume Preboot 83.3 MB disk1s3
4: APFS Volume Recovery 533.8 MB disk1s4
5: APFS Volume VM 1.1 GB disk1s5
/dev/disk2 (external, physical):
#: TYPE NAME SIZE IDENTIFIER
0: FDisk_partition_scheme *31.0 GB disk2
1: HANDA 31.0 GB disk2s1
下の方にありました。この場合/dev/disk2がそれです。
これを指定してディスクを初期化します。
$ diskutil eraseDisk MS-DOS UNTITLED /dev/disk2 〜省略〜 Finished erase on disk2
そしてマウントを解除します。
$ diskutil unMountDisk /dev/disk2 Unmount of all volumes on disk2 was successful
isoデータをただUSBにドラッグ&ドロップしてデータコピーしてもブータブルUSBになりません。ここではddコマンドを使います。
$ sudo dd if=./Desktop/CentOS-8.4.2105-x86_64-boot.iso of=/dev/disk2 bs=1m 723+0 records in 723+0 records out 758120448 bytes transferred in 115.320908 secs (6574007 bytes/sec)
完成です。
USBを取り出します。
$ diskutil eject /dev/disk2 Disk /dev/disk2 ejected
Windows 7をCentOS 8にする
まずはWindows 7に十分にお別れを言います。(これには中にある必要なデータを退避させたことの確認等を含みます)
覚悟と準備ができたら上記で準備したUSBをWindows 7に挿入して電源を入れます。
すぐに[F2]キーを押してBIOS画面を立ち上げます。
メーカーによって画面の様子が違うと思いますが、起動デバイスの優先順位を指定する画面を探します。
挿入したUSBが下の方の優先順位になっていることが確認できます。

これを1位にずらします。

[F10]キーで保存して、再起動すると以下のような画面になるので[Install CentOS Linux 8]を選択します。

しばらく待つと言語選択画面が出るので日本語を選択し、インストール概要に移ります。
ビックリマークの付いている項目が残っていると[インストールの開始]が非活性なので、一つずつ潰します。
特に[インストールソース]がなぜエラーになっているのかわかりませんが、先に[ネットワークとホスト名]でwifi経由でインターネットに接続をしていればダウンロードし直せます。
今回は以下をセットしました。
(http://) ftp.riken.jp/Linux/centos/8.4.2105/BaseOS/x86_64/os/
全ての入力が完了すると[インストールの開始]が活性化するので選択します。

しばらく待つとやっとCentOS 8のトップ画面がお目見えします。

最低限のWebサーバに仕立て上げる
端末を開いて、Apacheをダウンロードします。
sudo dnf -y install httpd
ドキュメントルートを設定ファイルから調べます。
$ cat /etc/httpd/conf/httpd.conf | grep "^DocumentRoot" DocumentRoot "/var/www/html"
インデックスファイル名を調べます。
$ cat /etc/httpd/conf/httpd.conf | grep "DirectoryIndex "
DirectoryIndex index.html
この/var/www/htmlにindex.htmlを作成し、以下を書き込みます。
<div>Hello!OPTiM</div>
Apacheを起動します。
sudo systemctl start httpd
現在のファイヤーウォールを確認してservices欄にhttpがないことを確認します。
$ sudo firewall-cmd --list-all --permanent public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
httpを許可します。
$ sudo firewall-cmd --add-service=http --zone=public --permanent success
firewalldを再起動します。
$ sudo firewall-cmd --reload success
httpが許可されていることを確認します。
$ sudo firewall-cmd --list-all --permanent public target: default icmp-block-inversion: no interfaces: sources: services: cockpit dhcpv6-client http ssh ports: protocols: masquerade: no forward-ports: source-ports: icmp-blocks: rich rules:
LAN内で確認する
インターフェースを調べてIPを確認します。
$ ifconfig
enp10s0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
ether 50:26:90:a0:f0:8d txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
lo: flags=73<UP,LOOPBACK,RUNNING> mtu 65536
inet 127.0.0.1 netmask 255.0.0.0
inet6 ::1 prefixlen 128 scopeid 0x10<host>
loop txqueuelen 1000 (Local Loopback)
RX packets 94 bytes 419939 (410.0 KiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 94 bytes 419939 (410.0 KiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
virbr0: flags=4099<UP,BROADCAST,MULTICAST> mtu 1500
inet 192.168.122.1 netmask 255.255.255.0 broadcast 192.168.122.255
ether 52:54:00:50:9b:d5 txqueuelen 1000 (Ethernet)
RX packets 0 bytes 0 (0.0 B)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 0 bytes 0 (0.0 B)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
wlp11s0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.3.9 netmask 255.255.255.0 broadcast 192.168.3.255
inet6 fe80::5831:fcea:689f:b007 prefixlen 64 scopeid 0x20<link>
inet6 2400:2411:8583:b800:7380:9e2e:45b1:29ee prefixlen 64 scopeid 0x0<global>
ether 74:e5:0b:bc:04:66 txqueuelen 1000 (Ethernet)
RX packets 50340 bytes 65532624 (62.4 MiB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 24338 bytes 4134984 (3.9 MiB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
RUNNINGになっているloでない方がそれでプライベートIPが192.168.3.9なので、MacBookProのブラウザから接続します。

見れました。
ルータの設定を変更して、インターネットから確認する
ルータによって設定方法が違いますが、以下のような内容に設定します。
| プロトコル | WAN側ポート番号 | LAN側ポート番号 | 転送先IPアドレス |
|---|---|---|---|
| TCP | 80-80 | 80-80 | 192.168.3.9 |
ルータからグローバルIPを確認して、Androidスマホから4G回線経由で接続します。

見れました。
ルータの開いたポートは必ず閉じてください。
まとめ
結構長い工程でしたが、これに比べればやっぱりクラウドは楽だなと思いました。
オプティムでは、一緒に働く仲間を募集しています。興味のある方は、こちらをご覧ください。
www.optim.co.jp