LAMP環境を構築する③ Webサイトをサーバー上に公開する

LAMP環境構築シリーズ最終記事です。

今回は、前回設定したPHPMyAdminでテーブルを作成し、
自分が書いたコードをWebサーバーに公開します。


テーブルの作成

まずは、PHPMyAdminにアクセスします。
f:id:atsukofu:20201129170603p:plain

データベース名を決め、照合順序はutf8_general_ciに設定します。

そして、「構造」タブからテーブル名と必要なカラム数を入力し、実行します。
これでテーブルが出来、カラムの設定をする画面になりますので、
カラムの名前、その他設定をしてテーブルを完成させましょう。
f:id:atsukofu:20201129171032p:plain


PHP側の設定

サーバーにあげるPHP側のコードにおいて、
データベース操作を伴う処理があるページでは、
データベースの設定を記載する箇所があると思います。

$dbs = "mysql:host=127.0.0.1;dbname=(データベース名);charset=utf8";
$db_user = "root";
$db_pass = "";
$pdo = new PDO($dbs, $db_user, $db_pass);

こんな記載のとこです。
こちらの$db_userと$db_passを、PHPMyAdminのユーザー名とパスワードと同じにします。


ファイルのアップロード

以前、/var/www/html へファイルを直接アップロードできるように設定してあります。
今回はデスクトップに保存したファイルを、/var/www/htmlへアップロードします。
scpコマンドを使用します。
$ scp -i ~/.ssh/(キーペア名) ~/Desktop/ファイル名 ec2-user@(パブリックIP):/var/www/html

これでアップロード完了!

以後は、開発用ファイルをサーバーにアップロードしたい時に上記コマンドを打てば、
サーバーにアップロードされ、ブラウザ上で確認することができます。


まとめ

AWSは苦手意識満載でしたが、記事にまとめることでかなり理解をすることができました。
何度も手順をやることで用語やコマンドに慣れていくことが大事かなと思います。
これまでherokuでのデプロイがほとんどでしたが、今度はAWSを使って自分のサイトをデプロイしたいと思います!

LAMP環境を構築する② MySQLをインストール

前回EC2インスタンスphpをインストールしました。

今回はMySQLをインストールして、データベースを使えるようにします。
また、PHPMyAdminも使えるようにし、
データベースの操作をしやすいようにもします。


MySQLをインストール

まずは、EC2インスタンスにリモート接続します。

$ ssh -i ~/.ssh/(キーペア名) ec2-user@(パブリックIP)

管理者権限に変更

$ sudo su 

MySQLをインストール

# yum install -y mysql-server

PHPからMySQLをインストールする追加プログラムをインストール

# yum install -y php-mysqlnd

次にMySQLを起動します。

# service mysqld start

次にMySQLの設定をします。

# mysql_secure_installation
このコマンドを打つと、管理者のパスワードを聞いてきますので、エンターキーを押します。
すると新しくパスワードを作るか聞いてきますので、
「y」を押します。
そしてMySQLのパスワードを入力し、エンターキーを押します。
※ここのパスワードは後で使うので、控えておきましょう。
そしてゲストユーザーを削除するか聞いてくるので、「y」を押し、
あとは全て「y」とします。

次に、MySQLで使用する文字コードの設定をします。

# vi /etc/my.cnf
このコマンドで設定ファイルを開いたら、
[mysqld_safe]の前の行に下図の通りに記載します。
f:id:atsukofu:20201129162628p:plain

「esc」を押したあと「:wq」エンターキーで保存完了。

MySQLを再起動して設定を反映させます。

# service mysqld restart


PHPMyAdminのインストール

まずはPHPMyAdminのインストール先を追加します。

# yum-config-manager --enable epel

そしてPHPMyAdminをインストールします。

# yum install -y phpmyadmin

次に、自分のローカルPCのみがPHPMyAdnminにアクセスできるように設定します。
そのために、自分のローカルPCのグローバルIPアドレスを調べて設定に記載する必要があります。

自分のIPアドレスは、確認くんというWebサイトで確認することができます。

IPアドレスが確認できたら、下記コマンドで設定ファイルを開きます。

# vi /etc/httpd/conf.d/phpMyAdmin.conf

viが開いたら、viの置換機能を使用して、元々書かれているIPアドレスを、自分のIPアドレスに書き換えます。(おそらく元々「127.0.0.1」と書かれていると思います)

:%s/127.0.0.1/(自分のIPアドレス)/g
これで全部で4カ所あるIPアドレスを書き換えることができました。
書き換えられたら、「esc」「:wq」、エンターキーで保存。

書き換えが完了したら、変更を反映するためにサーバーを再起動します。

# service httpd restart

これでPHPMyAdminの設定が完了です!

実際にPHPMyAdminにアクセスしてみましょう。
PHPMyAdminにはブラウザからアクセスします。
アドレスバーに、(パブリックIPアドレス)/phpmyadmin
を入力するとアクセスできます。
f:id:atsukofu:20201129164546p:plain

ユーザー名は「root」、パスワードは先ほどターミナル上で設定した、phpMyAdminのパスワードです。

これでPHPMySQLのインストールが完了です!!

これで、LAMP環境が整いました。

次は、DBでテーブルの作成、
PHPで書いたコードをリモートサーバー上にアップする方法を記載します。

LAMP環境を構築する① PHPをインストール

前回インストールしたapacheを使って、LAMP環境を構築し、開発していけるようにしていきたいと思います。 [:contents]

LAMP環境とは?

L ・・・linux A ・・・apache M ・・・mySQL P ・・・PHP 以上4つのツールを使って行う開発環境のことで、 web開発の基本とされています。 最近ではapacheをNginxに変更したりする手法もあるのですが、 まずは基本のキを抑えておきたいと思います。

ここまでの前提条件

- EC2でインスタンスを作成している - apacheをインストールしている - テキストファイル(index.html)をlinuxサーバー上に保存している (保存場所は/var/www/html )

PHPをインストールする

前回apacheはインストールしたので、今回はPHPをインストールします。 まずはリモートアクセスします。

$ sh -i ~/.ssh/(キーペア名) ec2-user@(パブリックIP)

そして、管理者権限に切り替えておきます。

$ sudo su

※管理者権限に切り替えると、ターミナルの「$」マークが「#」に変わります。 投稿時間や更新時間などをブラウザに表示させる設計の時は、日本時間に切り替えておくと良いです。

# ln -sf /usr/share/zoneinfo/Japan /etc/localtime

phpをインストールします。

# yum install -y php

次に、PHPの設定ファイルのバックアップをとります。

# cp /etc/php.ini /etc/php.bak

万が一の時に、上記で保存した設定ファイルのバックアップを使うためには、下記コマンドを使用します。

# cp (バックアップファイル名) (元々のファイル名)

設定ファイルにviで接続します。

# vi /etc/php.ini

このファイルは行数が多いため、行数を表示するコマンド、行を指定するコマンドを使って編集しやすくします。 「esc」キーを押して、

 :set number

これで行数が表示されます。 「esc」キーを押して

 :(飛びたい行番号)

これで飛びたい行へジャンプできます。 ここでは520行め辺りにある error_reporting = E_ALL & ~E_DEPRECATED という記述を error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE に変更します。(「i」を押してinsertモードにしてから) →PHPの余分なエラーメッセージが表示されないようにできます。 次に、537行目あたりにある display_errors = Off を display_errors = On に変更します。 「esc」を押してから「:wq」で保存+vi終了します。 そして設定を反映させるために、apacheを再起動します。

# service httpd restart

これでPHPの設定完了です。 下記コマンドでPHPの動作確認用ファイルを作成します。

# vi /var/www/html/index.php

何も記載されていないviの画面になるので、「i」を押してinsertモードにしてから、下図のようにPHPのコードを記載します。 f:id:atsukofu:20201129143446p:plain 「esc」を押して「:wq」、「enter」で保存します。 この状態で、ブラウザから「パブリックIPアドレス/index.php」にアクセスすると・・ f:id:atsukofu:20201129144704p:plain しっかり画面が表示されているので、OK!

まとめ

次はMySQLをインストールし、PHPmyAdminを使えるようにします。 AWSは最初ちんぷんかんぷんでしたが、 今はなんとなくわかってきた感があります。 苦手感が減って楽しくなってきた。 継続は力になりますね!!

LAMP環境を構築する① PHPをインストール

前回インストールしたapacheを使って、LAMP環境を構築し、開発していけるようにしていきたいと思います。


LAMP環境とは?

L ・・・linux
A ・・・apache
M ・・・mySQL
P ・・・PHP
以上4つのツールを使って行う開発環境のことで、
web開発の基本とされています。
最近ではapacheをNginxに変更したりする手法もあるのですが、
まずは基本のキを抑えておきたいと思います。


ここまでの前提条件

  • EC2でインスタンスを作成している
  • apacheをインストールしている
  • テキストファイル(index.html)をlinuxサーバー上に保存している

(保存場所は/var/www/html )


PHPをインストールする

前回apacheはインストールしたので、今回はPHPをインストールします。
まずはリモートアクセスします。

$ sh -i ~/.ssh/(キーペア名) ec2-user@(パブリックIP)

そして、管理者権限に切り替えておきます。

$ sudo su
※管理者権限に切り替えると、ターミナルの「$」マークが「#」に変わります。

投稿時間や更新時間などをブラウザに表示させる設計の時は、日本時間に切り替えておくと良いです。

# ln -sf /usr/share/zoneinfo/Japan /etc/localtime


phpをインストールします。

# yum install -y php

次に、PHPの設定ファイルのバックアップをとります。

# cp /etc/php.ini /etc/php.bak

万が一の時に、上記で保存した設定ファイルのバックアップを使うためには、下記コマンドを使用します。

# cp (バックアップファイル名) (元々のファイル名)

設定ファイルにviで接続します。

# vi /etc/php.ini

このファイルは行数が多いため、行数を表示するコマンド、行を指定するコマンドを使って編集しやすくします。
「esc」キーを押して、

 :set number
これで行数が表示されます。

「esc」キーを押して

 :(飛びたい行番号)
これで飛びたい行へジャンプできます。

ここでは520行め辺りにある
error_reporting = E_ALL & ~E_DEPRECATED
という記述を
error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTICE
に変更します。(「i」を押してinsertモードにしてから)
PHPの余分なエラーメッセージが表示されないようにできます。

次に、537行目あたりにある
display_errors = Off

display_errors = On
に変更します。

「esc」を押してから「:wq」で保存+vi終了します。

そして設定を反映させるために、apacheを再起動します。

# service httpd restart
これでPHPの設定完了です。

下記コマンドでPHPの動作確認用ファイルを作成します。

# vi /var/www/html/index.php
何も記載されていないviの画面になるので、「i」を押してinsertモードにしてから、下図のようにPHPのコードを記載します。
f:id:atsukofu:20201129143446p:plain
「esc」を押して「:wq」、「enter」で保存します。
この状態で、ブラウザから「パブリックIPアドレス/index.php」にアクセスすると・・

f:id:atsukofu:20201129144704p:plain

しっかり画面が表示されているので、OK!


まとめ

次はMySQLをインストールし、PHPmyAdminを使えるようにします。

AWSは最初ちんぷんかんぷんでしたが、
今はなんとなくわかってきた感があります。
苦手感が減って楽しくなってきた。
継続は力になりますね!!

apacheをインストール

EC2インスタンスにログインし、
今からapacheを使ってサイトを表示するための流れを書いていきます。


サーバーの準備

apachをインストールする前に、linuxをアップデートしておきます。

$ sudo yum -y update

※「-y」オプションをつけると、確認メッセージを表示せずにインストールすることができる。


apache(Webサーバ)をインストール

$ sudo yum -y install httpd


apacheを起動

$ sudo service httpd start

ここで、

Starting httpd:                                            [  OK  ]
という風に表示されない場合は接続が完了していません。
今回はEC2のコンソールのインスタンス→セキュリティグループ(launch-wizard-2)→インバウンド→編集と進むと
「ソース」の横の通常「0.0.0.0/0」となっているところの表示が変になっていたので、
「0.0.0.0/0」に直すと接続ができました!

次に以下のコマンドで、linux仮想マシンが起動するたびにapacheも同時に起動するようにしてやります。

sudo chkconfig httpd on

これで準備完了。ブラウザにパブリックIPアドレスを入力して、apacheのページが表示されたら完了です。


Webサーバー上のHTMLを表示する

簡単なwebページを表示してみます。
まず以下のコマンドでファイルがあるか調べます。

$ ls /var/www/html

何も表示されなければ、まだHTMLファイルは存在していないということになる。

viを使って簡単なhtmlファイルを作成してみる。

$ sudo vi /var/www/html/index.html
テキストエディタが起動したら「i」で文字入力モードにし、htmlタグで囲った文字列を入力する。

再度パブリックIPアドレスにアクセスすると、viに打ち込んだHTMLが表示されるはず。
→webサーバー上のHTMLファイルを表示したことになる。


ローカルで作ったファイルを転送する

linuxサーバーではなくローカルで下記のSCPコマンドを使用します。
SCPコマンドとはコンピューター間で安全にファイルのやり取りをするためのコマンド。
まずは先ほどサーバー上に作ったhtmlファイルをローカルに転送する。

$ scp -i ~/.ssh/(キーペアファイル名).pem ec2-user@(パブリックIP):/var/www/html/index.html ~/Desktop
このコマンドで、さっき作ったhtmlファイルがデスクトップに転送されます。

このhtmlファイルを編集してlinuxサーバー上に戻すのですが、
今回は「テキストエディット」で開きます。
「環境設定」から「HTMLファイルをフォーマットしたテキストではなくHTMLコードとして表示」に設定し
先ほどのファイルを開くと、タグがそのまま表示されます。
ここで編集し、保存。

$ scp -i ~/.ssh/(キーペアファイル名).pem ~/Desktop/index.html ec2-user@(パブリックIP):~
先ほどとは逆で、デスクトップの送信したいファイルの後に、送信先を記載する。

EC2にログインし、$ ls -a -l コマンドで見てみると、送信されたファイルがあるはず。

ただこれだとホームディレクトリに保存されてしまっているため、
先ほどhtmlファイルを保存した場所に移動してやりたい。

$ sudo mv ~/index.html /var/www/html

これは移動するのめんどくさい。。。
ので、権限を変更して直接希望の場所にファイルを転送できるようにする。


任意のディレクトリにファイル転送できるよう権限を変更

結構コマンドが多いけど、最初の1回だけやればOKみたいです。

$ sudo groupadd www

$ sudo usermod -a -G www ec2-user

そして一旦ログアウト→再度ログイン

これで「www」というグループの権限が有効になった状態。
自分のユーザー名が上記で作成したグループに登録されているか確認するため下記コマンドを実行。

$ groups

続いて、htmlを保存するディレクトリのグループ所有権を変更。

$ sudo chown -R root:www /var/www

次に、var/www以下のファイルに書き込み許可を与える。

$ sudo chmod 2775 /var/www

将来のサブディレクトリにグループIDを設定しておく。

$ find /var/www -type d -exec sudo chmod 2775 {} \;

/var/www以下のファイル許可を繰り返し、グループのファイル許可を追加する。

$ find /var/www -type f -exec sudo chmod 0664 {} \;

下記コマンドで転送。今回は最後に転送先ディレクトリを指定。

scp -i ~/.ssh/(キーペアファイル名).pem ~/Desktop/index.html ec2-user@(パブリックIP):/var/www/html

vi上で変更が反映されていればOK!

リモートアクセスしてみる

キーペアファイルを .ssh フォルダに移動する

 
これで.sshフォルダが見当たらなければ

$ ls -a -l


このコマンドで.sshフォルダを作成します。

$ mkdir .ssh

そして、インスタンス作成時にキーペアファイルを.sshに移動します。
(今回はデスクトップに保存していたという想定です。)

$ mv ~/Desktop/キーペアファイル名.pem ~/.ssh

このコマンドを打って、移動したいキーペアファイルのファイル名が出てきたら、移動成功です。

$ ls ~/.ssh

下記コマンドで、他のユーザーからこのファイルを使用できないように設定します。

$ chmod 400 ~/.ssh/キーペアファイル名.pem

ここまできたら、sshコマンドでLinux仮想マシンに接続ができます。

$ ssh -i ~/.ssh/キーペアファイル名.pem ec2-user@パブリックIPアドレス

確認メッセージが表示されるので、「yes」と入力します。
すると・・
f:id:atsukofu:20201004183213p:plain

接続完了!

まとめ

AWSではこの環境下で色々操作していきますので、
仕組みと接続方法はしっかりと覚えたいと思います。

PublicIPをEC2インスタンスに紐付ける

AWSを使いこなしたいと思い、基本からおさらい中です。 前回EC2インスタンスの作成方法について書いたので 前回作成したEC2インスタンスをPublicIPアドレスに紐づける方法を書き留めておきたいと思います。

新しいパブリックIPアドレスを作る

ネットワーク上のコンピューターはIPアドレスで識別することができるのですが、 AWSで元々割り当てられているIPアドレスは、起動するたびに変化してしまいます。 そのため、固定のIPアドレスを紐付けてやる必要があります。 マネジメントコンソールの左側に、「Elastic IP」の文字があるのでクリックします。 f:id:atsukofu:20201004174541p:plain 「新しいアドレスの割り当て」をクリックします。 f:id:atsukofu:20201004174648p:plain 関連づけるか聞かれるのので、「関連づける」ボタンを押しましょう。 次にLinux仮想マシンに関連づけてやります。 「アクション」と書いてあるプルダウン をクリックし、「アドレスの関連づけ」をクリックします。 f:id:atsukofu:20201004175057p:plain ポップアップが表示されるので、前回作成したLinux仮想マシンインスタンスIDを選択し、 先ほど作ったElasticIPアドレスと紐付けます。 f:id:atsukofu:20201004175211p:plain うまく結びつくと、画面左のメニューから「インスタンス」を選択すると、 インスタンスのパブリックIPアドレスが、先ほど紐づけたものに置き換わっていることが確認できます。 次にセキュリティグループを設定するので、セキュリティグループの「launch-wizard-2」をクリックします。 f:id:atsukofu:20201004175658p:plain 「アクション」のプルダウン を押し、「インバウンドルールの編集」を選択します。 f:id:atsukofu:20201004175731p:plain ポップアップが表示されます。 「ルールの追加」をクリックし、「HTTP」を選択します。 ここでHTTPを選択しないと、デフォルトでSSH接続しかできないようになっているので注意です。 f:id:atsukofu:20201004175853p:plain とりあえずこれで紐付け完了。

まとめ

前回やったの全然覚えてないな・・何回かやったら覚えられるのかな・・ とにかくまずはEC2とS3をマスターするために頑張ります!