2022.11.16 Web制作
システム開発 - AWS DBサーバーへの接続(RDS)とphpMyAdminの設定
前回のphp-cliとphp-fpmの違いについてまでは、主にWebサーバーの設定を行ってきました。今回はDBサーバーへの接続とphpMyAdminの設定を行っていきます。
環境
[ec2-user@ip-10-0-10-127 ~]$ cat /etc/os-release
NAME="Amazon Linux"
VERSION="2"
ID="amzn"
ID_LIKE="centos rhel fedora"
VERSION_ID="2"
PRETTY_NAME="Amazon Linux 2"
ANSI_COLOR="0;33"
CPE_NAME="cpe:2.3:o:amazon:amazon_linux:2"
HOME_URL="https://amazonlinux.com/"
DBサーバーへの接続
現在の構成は、下記のような設定となっています。
今まで設定してきたWebサーバーは、パブリックサブネットに配置され、パブリックサブネットとはインターネットに接続していたので、SSHで直接アクセスすることができました。
しかし、RDSサービスで構築したDBサーバーは、プライベートサブネットに配置しており、インターネットに接続はしておらず、パブリックサブネットからの接続のみを許可している状態です。
従って、Webサーバーに接続してから、DBサーバーへ接続します。
mysqlコマンドの確認
いままでの手順で行ってきていれば、mysqlコマンドは使用できないはずですが、一応確認します。
[ec2-user@ip-10-0-10-127 ~]$ mysql -v
-bash: mysql: コマンドが見つかりません
では、mysqlコマンドが実行できるようにライブラリをインストールします。
[ec2-user@ip-10-0-10-127 ~]$ sudo yum install mariadb
・・・
完了しました!
[ec2-user@ip-10-0-10-127 ~]$ mysql --version
mysql Ver 15.1 Distrib 5.5.68-MariaDB, for Linux (x86_64) using readline 5.1
エンドポイントの確認
- 「サービス」→「RDS」をクリック
- 左メニューの「データベース」をクリック
- 一覧の「DB識別子」の中の該当のDBをクリック
下段の「接続とセキュリティ」タブの「エンドポイントとポート」を確認します。
エンドポイントは、「xxxxxx.xxxxxxxx.ap-northeast-1.rds.amazonaws.com」となっており、ポートは「3306」となっています。
このエンドポイントは、のちほどphpMyAdminの設定にも必要ですので、控えておいてください。
DB接続用のIDとパスワードの確認
引き続いて、タブ「設定」をクリックします。
真ん中辺りに「マスタ―ユーザー名」とあり、変更していなければ「admin」となっています。
また、パスワードは、RDSを設定した際にご自身で入力したパスワードとなります(他の認証方法を選んだ場合には、そちらに従ってください)。
パスワードを忘れた場合
- 左メニューの「データベース」をクリック
- 一覧の「DB識別子」の左にあるラジオボタンをチェック
- 上のメニューの「変更」をクリック
- 「設定」の「新しいマスターパスワード」にパスワードを入力
- 直下に現れる「パスワードを確認」に同じパスワードを設定
- 下までスクロールし 続行をクリック
- 変更のスケジューリングで「すぐ適用」をクリック
- DB インスタンスを変更をクリック
DBに接続
mysqlコマンドで接続します。
-h オプションで、ホスト名、つまり先ほど確認したエンドポイントを指定します。
-u オプションで、ログインするユーザー、ここではadminを設定し、-pオプションでパスワードによるログインを行う旨を設定します。
[ec2-user@ip-10-0-10-127 ~]$ mysql -h xxxxxx.xxxxxxxx.ap-northeast-1.rds.amazonaws.com -u admin -p
Enter password:
Welcome to the MariaDB monitor. Commands end with ; or \g.
Your MySQL connection id is 3350
Server version: 8.0.28 Source distribution
Copyright (c) 2000, 2018, Oracle, MariaDB Corporation Ab and others.
Type 'help;' or '\h' for help. Type '\c' to clear the current input statement.
MySQL [(none)]>
コマンド実行後、パスワードを聞かれますので、パスワードを入力します。
成功すれば、MySQLに接続します。
現在あるDBの一覧を確認するには、下記のSQL文を実行します。
MySQL [(none)]> show databases;
+--------------------+
| Database |
+--------------------+
| information_schema |
| mysql |
| performance_schema |
| sys |
+--------------------+
4 rows in set (0.01 sec)
また、MySqlの接続を終了するには、下記コマンドを実行します。
MySQL [(none)]> exit
Bye
[ec2-user@ip-10-0-10-127 log]$
これでDBへの接続の確認は完了です。
LaravelでDBに接続する場合のenvファイルの書き方
ここで念のため、Laravlの環境設定ファイルへの記述する場合の設定を下記に表示します。
DB_CONNECTION=mysql
DB_HOST=xxxxxx.xxxxxxxx.ap-northeast-1.rds.amazonaws.com
DB_PORT=3306
DB_DATABASE=xxxxxx
DB_USERNAME=admin
DB_PASSWORD=xxxxxx
phpMyAdminのインストール
まずは、phpMyAdminのサイトに行き、最新のバージョンを下記で確認します。
https://www.phpmyadmin.net/downloads/
現在の最新バージョンは「phpMyAdmin-5.2.0-all-languages.zip」となっていました。
インストールするディレクトリに移動します。
[ec2-user@ip-10-0-10-127 ~]$ cd /var/www/html
移動したディレクトリに先ほど確認した圧縮ファイルをダウンロードしてきます。
ダウンロードするファイルのバージョンにあわせます。
/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
[ec2-user@ip-10-0-10-127 html]$ wget https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
--2022-11-18 12:30:02-- https://files.phpmyadmin.net/phpMyAdmin/5.2.0/phpMyAdmin-5.2.0-all-languages.zip
files.phpmyadmin.net (files.phpmyadmin.net) をDNSに問いあわせています... 89.187.160.27, 89.187.160.31, 89.187.160.57, ...
files.phpmyadmin.net (files.phpmyadmin.net)|89.187.160.27|:443 に接続しています... 接続しました。
HTTP による接続要求を送信しました、応答を待っています... 200 OK
長さ: 14112668 (13M) [application/zip]
`phpMyAdmin-5.2.0-all-languages.zip' に保存中
100%[===========================================================>] 14,112,668 78.0MB/s 時間 0.2s
2022-11-18 12:30:02 (78.0 MB/s) - `phpMyAdmin-5.2.0-all-languages.zip' へ保存完了 [14112668/14112668]
無事ファイルが保存されたら、今度は圧縮ファイルを解凍します。
[ec2-user@ip-10-0-10-127 html]$ unzip phpMyAdmin-5.2.0-all-languages.zip
実行すると解凍され、一覧が表示されます。
[ec2-user@ip-10-0-10-127 html]$ ll
・・・
drwxr-sr-x 12 ec2-user apache 4096 5月 11 2022 phpMyAdmin-5.2.0-all-languages
-rw-rw-r-- 1 ec2-user apache 14112668 5月 11 2022 phpMyAdmin-5.2.0-all-languages.zip
・・・
[ec2-user@ip-10-0-10-127 html]$
「phpMyAdmin-5.2.0-all-languages」というディレクトリが作成されました。解凍が無事すめば、圧縮ファイルは必要ないので、削除します。
[ec2-user@ip-10-0-10-127 html]$ rm phpMyAdmin-5.2.0-all-languages.zip
[ec2-user@ip-10-0-10-127 html]$ ll
・・・
drwxr-sr-x 12 ec2-user apache 4096 5月 11 2022 phpMyAdmin-5.2.0-all-languages
・・・
[ec2-user@ip-10-0-10-127 html]$
ディレクトリ名を変更します。
[ec2-user@ip-10-0-10-127 html]$ mv phpMyAdmin-5.2.0-all-languages _phpmyadmin
[ec2-user@ip-10-0-10-127 html]$ ll
・・・
drwxr-sr-x 12 ec2-user apache 4096 5月 11 2022 _phpmyadmin
・・・
[ec2-user@ip-10-0-10-127 html]$
今回はテストなので、「_phpmyadmin」というディレクトリ名に変更しました。
ここはセキュリティのためにも、なるべく想像のつかないディレクトリ名にすることをおすすめします。
phpMyAdminの設定の変更
設定ファイルを確認します。ディレクトリを移動して、ファイル一覧を表示します。
[ec2-user@ip-10-0-10-127 html]$ cd _phpmyadmin
[ec2-user@ip-10-0-10-127 _phpmyadmin]$ ll
・・・
-rw-r--r-- 1 ec2-user apache 4779 5月 11 2022 config.sample.inc.php
・・・
[ec2-user@ip-10-0-10-127 _phpmyadmin]$
「config.sample.inc.php」が設定ファイルのサンプルです。このファイルをコピーして、設定ファイルを作成します。
[ec2-user@ip-10-0-10-127 _phpmyadmin]$ cp config.sample.inc.php config.inc.php
[ec2-user@ip-10-0-10-127 _phpmyadmin]$ ll
・・・
-rw-r--r-- 1 ec2-user apache 4779 11月 18 12:46 config.inc.php
-rw-r--r-- 1 ec2-user apache 4779 5月 11 2022 config.sample.inc.php
・・・
[ec2-user@ip-10-0-10-127 _phpmyadmin]$
config.inc.phpを編集する前に、「blowfish_secret」で必要となる文字列を作成します。
[ec2-user@ip-10-0-10-127 _phpmyadmin]$ php -r 'echo bin2hex(random_bytes(32)) . PHP_EOL;'
xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
ca51d9d16af32cdcd4b4820dc150d23c5d5b0604f280146ccee04cf48f768fc6
[ec2-user@ip-10-0-10-127 _phpmyadmin]$
この文字列をメモ帳などにコピーして控えておいてください。では、config.inc.phpを編集します。
[ec2-user@ip-10-0-10-127 _phpmyadmin]$ vi config.inc.php
blowfish_secreの設定
先ほど作成した文字列を設定します。
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */
↓
$cfg['blowfish_secret'] = sodium_hex2bin('xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx');
DBサーバー接続設定
MySqlの接続で確認したエンドポイントを設定します。
$cfg['Servers'][$i]['host'] = 'localhost';
↓
$cfg['Servers'][$i]['host'] = 'xxxxxx.xxxxxxxx.ap-northeast-1.rds.amazonaws.com';
編集の終了
Escキーを押して、「:wq」(保存して終了)を入力します。
phpMyAdminにログイン
ブラウザで設定したphpMyAdminを開きます。
URL:ドメイン名+上記で変更したディレクトリ名
ユーザ名::MySqlの接続で使用したユーザー名
パスワード:MySqlの接続で使用したパスワード
ユーザーアカウントメニューがあり、その中に「権限を編集」メニューがありますので、全権を持ったユーザーであることが分かります。
tmpディレクトリの作成
トップページで下部に下記のようなエラーが出ていると思います。
$cfg['TempDir'] (/var/www/html/_phpmyadmin/tmp/) にアクセスできません。phpMyAdmin はテンプレートをキャッシュすることができないため、低速になります。
これはそもそもtmpディレクトリが無いためです。そこで、ディレクトリを作成します。
[ec2-user@ip-10-0-10-127 _phpmyadmin]$ mkdir tmp
[ec2-user@ip-10-0-10-127 _phpmyadmin]$ ll
・・・
drwxrwsr-x 2 ec2-user apache 6 11月 18 13:18 tmp
・・・
[ec2-user@ip-10-0-10-127 _phpmyadmin]$
再読み込みするとエラーが表示されなります。
まとめ
今回は、DBサーバーへのSSHでの接続を確認し、その後、phpMyAdminの設定を行いました。
今回は取り上げていませんが、よりセキュアにするためにも、phpmyadminディレクトリにhtaccessを使用してIP制限などを行うのも良いかもしれません。
次回は、設定してきたサーバーに実際にHTMLファイルを表示できるようしていきたいと思います。
文責:フライング・ハイ・ワークス代表 松田 治人(まつだ はるひと)
会社では、Laravelを中心としたエンジニアとして働いており、これまでに50本以上のLaravelによるWebアプリケーションの構築や東京でホームページ制作をしています。
エンジニアとして弊社で働きたい方、お仕事のご相談など、お待ちしております。
WEBサイト・ホームページの制作をご検討の方
フライング・ハイ・ワークスの紹介
フライング・ハイ・ワークスは、東京のホームページ制作・Web制作会社・システム開発会社です。東京都及びその近郊(首都圏)を中心として、SEO対策を意識したPC及びスマホのサイトをワンソース(レスポンシブ対応)で制作します。
実績
デザイナーチームは、グラフィックデザインやイラストの制作も得意としており、著作権を意識しない素材の提供が可能です。システム・コーディングチームでは、Laravelなどを使用したスクラッチからのオリジナルシステム開発を始め、WordPressのカスタマイズを得意としております。
また、SEOやランディングページ(LP)、広告向けバナーなどを他社様でやっていた作業の引継ぎでも問題ありません。制作実績は多数ございますので、お客様に合わせたご提案が可能です。
500点以上のフライング・ハイ・ワークスの制作実績ページをご覧ください。