こんにちは、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