AWSで簡単サーバ構築

PHP学習トップ

AWSで勉強用のサーバを構築します。セキュリティ部分のみ難しいですが、それ以外は可能な限り簡単な方法にしているので頑張りましょう。 自分のサーバを持つ事は自分の家を建てるようなものです。たぶん。

※この情報は2020/3/20時点の情報ですので注意してご利用ください。

※秘密鍵と公開鍵が必要です。まだ作成していない人は秘密鍵の作成を参照して作成してください。

AWS

https://aws.amazon.com/jp/にアクセスし、ログインもしくはアカウント作成

仮想マシン(EC2)を起動するをクリック。Lightsailも良いのですが1年間無料のEC2で行きます。

Classmethod Canada様が作ってくれたパッケージのようなものを利用します。感謝しながらクリック。次の料金の画面は飛ばして大丈夫です。

躊躇なく無料利用枠を選択して「確認と作成」をクリック。1年後から課金(月1,500円程度)されるので気をつけてください。既に使っている方は1番安いインスタンスタイプを選択。

起動をクリック

キーペア名を入力してダウンロード。EC2向けの秘密鍵です。これも誰にも渡さないように。そしてインスタンス作成。完了後に右下の「インスタンスの表示」を押すか、上部のサービス>EC2を選択。

もう出来ました!分かりやすい名前でもつけてあげましょう。「テスト用」「初めてのサーバ」など。そしていよいよ右下のIPアドレスでサーバにログインします。インスタンスを再起動する事はあまりありませんが、再起動するとIPアドレスが変わるので注意してください。変えたくない場合はEIPを導入すれば良いですが有料です。

# ターミナル
ssh ec2-user@(IPアドレス) -i .ssh/(ダウンロードしたキーペア.pem) (Enter)

The authenticity of host '13.xxx.xxx.111 (13.xxx.xxx.111)' can't be established.
ECDSA key fingerprint is SHA256:oT9QMwa3Ls1KPh1ExfG2LU.
Are you sure you want to continue connecting (yes/no)? yes (Enter)
# 初めてサーバに接続する時に上記が出ます。

おめでとうございます!これであなたのサーバにログインする事が出来ました。あとは面倒ですが最低限のセキュリティの設定です。これをしないとひたすら悪い人(プログラム)にアタックされ続けるのでやっておきましょう。

timezoneを日本時間にします。

sudo timedatectl set-timezone Asia/Tokyo

ユーザを作成します。今はec2-userというユーザですが今後はこのユーザでログインする事になります。まずはrootユーザという1番偉いユーザになります。

sudo su

※ここにを入力すると下がコピペで使えます。

useradd xxxxx
usermod -G wheel xxxxx

rootユーザになるためのパスワードを設定します。秘密鍵のパスワードとは異なるものにしましょう。

passwd xxxxx

呪文だと思ってコピペ

su xxxxx
mkdir .ssh
touch .ssh/authorized_keys
chmod 700 .ssh
chmod 600 .ssh/authorized_keys

ローカルPCにあるid_rsa.pub(公開鍵)の中身をコピペします。MACであれば Command+n でターミナルをもう1つ開き、cat .ssh/id_rsa.pub でssh-rsaから始まる暗号的な文字が表示されるので全て選択して Command+c でコピーします。

vi .ssh/authorized_keys
# aを1回押して入力モードに変更させ、Command+v でペースト
# esc(エスケープ)を押した後、「:wq」と入力してエンターでファイルが上書き保存されます。

終わったらrootユーザに戻ります。

exit

サーバにログインできるポートという穴をデフォルトの22番から変更し、同時にパスワードでログイン出来なくします。難しいけどもう少しです。viの詳しい使い方は検索して調べてください。

vi /etc/ssh/sshd_config

# aかiを押して入力モードにした後、下記の行を探してバックスペースなどで編集してください。
ーー
Port 11122(好きな番号でも可。ただし別サービスが利用していたりするので注意。)
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
ーー
# esc(エスケープ)を押した後、「:wq」と入力してエンターでファイルが上書き保存されます。

# ログインを司るサービスを再起動し、上記の設定を反映させます。
service sshd restart

ここでAWSの管理コンソールに戻ります。EC2を開いたままだと思います。

セキュリティグループをクリックし、右上から「LAMPー」にチェックを入れ、右下の「Inbound rules」を選択し「Edit Inbound rules」をクリックします。

2個目にSSHのポート22番があるので、Typeを「Custom TCP」に変更して、Portに先ほど設定した番号(例では11122)を入れて「Save rules」を押します。これでデフォルトの22番ポートからサーバにログインしてこようとする悪者をブロックできます。

最後にターミナルをもう一つ開き、先ほど作ったユーザでログイン出来るか確認します。

ssh (ユーザ名)@(IPアドレス) -p (ポート番号) (Enter)

これで終わりです!ChromeなどのブラウザにIPアドレスをコピペして下記画面が出れば完了です。

サーバ上の/var/www/html/フォルダ以下に置いたHTMLやPHPが動くようになるので、開発ツールでアップロードして開発や勉強を進めてください。開発ツールの使い方はたくさんの人が公開しているので検索してください。

末筆にはなりますが、こんな便利なAMIを無償提供してくれているclassmethod様に感謝します。もちろんLinux、PHP、apache、MySQLなどオープンソフト全般に常日頃から感謝しています。少しでも恩返しが出来るよう頑張ります。