4
4

More than 1 year has passed since last update.

EC2のWindowsサーバーで、PHP (Laravel ) + Apache + RDS(MySQL) + SFTP の環境構築 ②

Last updated at Posted at 2021-12-05

はじめに

題名の通り環境構築の続きになります。
PHPのインストールからです。
①はこちら↓

流れ

  1. EC2を起動設定
  2. Windowsサーバーにリモートデスクトップで接続する
  3. 日本語設定と時計合わせ
  4. Visual Studio Codeをインストール
  5. ApacheとVisual C++ ランタイムのインストール
  6. Apacheの起動↑①ではここまで
  7. PHPインストールし、Web上で確認
  8. RDSの起動
  9. composerとlaravelインストール
  10. プロジェクトを作成し、laravelページをWeb上で確認
  11. phpmyadminインストールし、Web上で確認↑②ではここまで
  12. OpenSSH を使用して Windows に SFTP サーバーをセットアップ

PHPインストール

以下の URL より PHP をダウンロードします。

https://windows.php.net/download/
PHP 8.1 の VS16 x64 Thread Safe版をZIPでインストールします。
Non Threatは、apacheを動かすphp8apache2_4.dllファイル等がないため、インストールしないようにしましょう。
スクリーンショット 2021-12-05 11.44.08.png

解凍した中身を任意の場所に配置します。
今回は C ドライブ直下に php8 フォルダを作成し、中身をすべて移動します。
スクリーンショット 2021-12-05 11.49.53.png

次に PHP の設定ファイルであるphp.iniを編集します。
php8フォルダ配下にphp.ini-developmentなどのファイルがあるので、これをコピーしてphp.iniを作成します。
プログラムの内容にもよりますが、おおむね以下の部分を編集すれば良いかと思います。

php.ini
# 拡張モジュールのロード(コメント外す)
extension=curl
extension=fileinfo
extension=gd2
extension=mbstring
extension=mysqli
extension=openssl
extension=pdo_mysql

# 追記
extension_dir = "c:\php8\ext" # 拡張モジュールの場所
date.timezone = Asia/Tokyo # タイムゾーンの設定

mysqlimbstringopensslは composerやlaravel で必要なため、拡張必須です。

必須というわけではありませんが、実行環境によっては設定変更が必要なパラメータをいくつか挙げてみます。
必要に応じて編集してください。

php.ini
max_execution_time = 30 # 最大実行時間 [秒]、30秒過ぎると強制終了します
max_input_time = 60 # リクエストを受け付ける最大時間 [秒]、受信に60秒以上かかると強制終了します
memory_limit = 128M # スクリプトが確保できる最大メモリサイズ [byte]
error_reporting = E_ALL # エラー出力レベル、お勧めは"E_ALL & ~E_NOTICE & ~E_DEPRECATED & ~E_STRICT"
display_errors = On # エラーを画面に出力(Offで出力しない)
log_errors = On # エラーをerror_logに出力(Offで出力しない)
post_max_size = 8M # POSTデータの最大サイズ [byte]
upload_max_filesize =2M # アップロードファイルの最大サイズ [byte]
session.gc_maxlifetime = 1440 # セッションデータが最短で破棄される時間 [秒]、お勧めは86400

php.iniのパラメータ詳細はこちら

apacheのhttpd.confファイルの修正

Apache 側の設定も PHP の実行環境に合わせて編集が必要となります。
c:\Apache24\conf\httpd.confを編集します。

\Apache24\conf\httpd.conf
# 編集
<IfModule dir_module>
    DirectoryIndex index.html index.php # index.phpを追加
</IfModule>

# 追記
LoadModule php_module "C:/php8/php8apache2_4.dll"
AddHandler application/x-httpd-php .php
PHPIniDir "C:/php8"

・IfModule

当該モジュールが存在するときに処理されるディレクティブを指定するために利用します。

・DirectoryIndex

リクエストがファイル名を指定しなかった場合に表示するファイルを設定します。
デフォルトではindex.htmlのみ設定されているので、index.phpを追加します。

・AddHandler

拡張子とハンドラを紐づけます。
この記述により拡張子 “.php” のファイルは PHP プログラムとして扱われます。

C:/php8/php8apache2_4.dllの確認

C:/php8/php8apache2_4.dllファイルがあることを確認しましょう。
なければ、インストールしたzipファイルがNon Threatのものになっている可能性があります。

参考記事

index.phpファイルを作成し、Web上で確認

c:\Apache24\htdocs配下にあるindex.htmlを削除し、index.phpを作成します。

index.php
<?php
phpinfo();
?>

Apache を再起動します。
ここまでの設定で、PHP のスクリプトが動作する状態になっているかと思います。
windowsサーバーのIPアドレスをブラウザのURL欄に入れてアクセスすると、以下のようにphp情報ページが表示されます。
スクリーンショット 2021-12-05 14.19.34.png

PHPの環境変数設定

こちらの記事通りすると、コマンドプロンプトでphpコマンドが使用できます。
記事内で指定するパスはC:\php8とし、コマンドプロンプトは再起動しましょう。

C:\Users\Administrator> php --ini

Configuration File (php.ini) Path:
Loaded Configuration File:         C:\php8\php.ini
Scan for additional .ini files in: (none)
Additional .ini files parsed:      (none)

phpコマンドが使え、自身で修正したphp.iniファイルが参照されていることが分かりました。

RDSの起動

RDSのタイムゾーンを東京にしたいので、まず、クラスターパラメータグループを作成します。
RDSで指定するバージョンは、mysql8.0ですので、パラメータグループファミリーも同様に設定します。
スクリーンショット 2021-12-05 15.17.04.png

以下の記事を参考に、タイムゾーンを東京に変更します。

そして、auroraを起動設定しましょう。
バージョンは、Aurora MySQL 3.01.0 (Compatible with MySQL 8.0.23)を設定します。
セキュリティーグループは、EC2に対して、ポートを開けるのを忘れずに。
データベースを一つ作ります。今回はblogというDB名としてます。
パラメータグループは、先程作成したものを設定します。
スクリーンショット 2021-12-05 15.32.08.png

auroraのクラスターのエンドポイント、ユーザ名、パスワードがlaravelの.envファイルで必要になりますので、メモしておきましょう。

composerとlaravelインストール

以下の記事通りにすると、インストールできます。
パスは、C:\php8\php.exeになっていることを確認しましょう。
composerインストール完了後は、コマンドプロンプトを再起動してから、composerと入力すると、インストールできていることが確認できると思います。

プロジェクトを作成し、laravelページをWeb上で確認

コマンドプロンプトでhtdocsフォルダに移動して

cd c:\Apache24\htdocs

laravelコマンドで新規プロジェクトを作成します。

C:\Apache24\htdocs> laravel new blog

プロジェクト作成後、laravelのバージョンを確認してみます。
php artisanは、必ずプロジェクトディレクトリ内で行ってください。

C:\Apache24\htdocs>cd blog

C:\Apache24\htdocs\blog> php artisan -v
Laravel Framework 8.74.0

laravelの.envファイル修正

C:\Apache24\htdocs\blog\.envファイルを修正します。

.env
APP_URL=http://IPアドレス ←サーバーのIPにする

DB_CONNECTION=mysql
DB_HOST=←RDSのエンドポイント(auroraの場合、ライターインスタンス)
DB_DATABASE=データベース名
DB_USERNAME=RDS作成時のユーザ名
DB_PASSWORD=設定したパスワード

laravelのindex.phpをWeb上で確認

apacheのhttpd.conf修正します。

Apache24\conf\httpd.conf
#DocumentRoot "${SRVROOT}/htdocs"
DocumentRoot "${SRVROOT}/htdocs/blog/public"

#<Directory "${SRVROOT}/htdocs">
#    AllowOverride All
#</Directory>
<Directory "${SRVROOT}/htdocs/blog/public">
    AllowOverride All
</Directory>

httpdファイルを編集後、apacheを再起動します。

そして、configのキャッシュを作成し、アプリのキャッシュを削除します。

C:\Apache24\htdocs\automeasure>php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

C:\Apache24\htdocs\automeasure>php artisan cache:clear
Application cache cleared!

php artisan config:cacheを実行しないと、エラーになります。理由はわかりませんでした。。
しっかり、php artisan cache:clearでキャッシュは削除しておきましょう。

キャッシュコマンドのまとめ記事になります。

WindowsサーバーのIPアドレスをブラウザのURL欄に入れて、アクセスすると、laravelのindex.phpが表示されました。

スクリーンショット 2021-12-05 15.57.03.png

エラー対応

apacheが再起動できない場合、コマンドでapacheを起動すると、エラー内容を教えてくれます。

C:\Apache24\bin>httpd.exe -k start
AH00526: Syntax error on line 236 of C:/Apache24/conf/httpd.conf:
Require not allowed here

phpmyadminインストール

下記サイトからphpmyadminをダウンロードします。現在の最新は5.1.1バージョンでした。

スクリーンショット 2021-12-05 20.29.59.png

ダウンロード後、ドキュメントルートであるC:/Apache24/htdocs/blog/public内でphpmyadminディレクトリとして、展開します。
スクリーンショット 2021-12-05 20.36.37.png

php.iniファイルの修正

php.iniの中の891行目辺りを次のようにコメントが外れているか確認します。
なければ、追記します。
C:\php8\ext配下にphp_mysqli.dllファイルがあることも確認しましょう。

php.ini
;extension=php_mysqli.dll
extension=php_mysqli.dll

また、PHP ではエラーを出力するレベル(error_reporting)を設定することができます。
設定したエラー出力レベルによって、そのレベルのエラーや警告のメッセージが出力されます。
今回は、注意通知と非推奨の警告以外のエラーを表示するようにします。

詳しくはこちら

php.iniもしくは、httpd.confファイルに書き込みましょう。

php.ini
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
httpd.conf
# E_ALL 等はPHPの定数で .htaccess では使えないため数字に変換する
# E_ALL & ~E_NOTICE & ~E_DEPRECATED は10進数で 6135
php_value "error_reporting" 6135

php.iniを保存してApacheを再起動します。

phpmyadminのconfig.inc.phpファイル修正

phpMyAdminフォルダの中にconfig.sample.inc.phpファイルがありますので、それをコピーして名前をconfig.inc.phpに変更します。
config.inc.phpを修正します。

C\Apache24\htdocs\blog\public\phpmyadmin\config.inc.php
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';

C\Apache24\htdocs\blog\public\phpmyadmin\config.inc.php
/* Server parameters */
$cfg['Servers'][$i]['host'] = '【RDSエンドポイント(auroraの場合、ライターインスタンス)】';

http://サーバーIP/phpmyadmin/にアクセスすると、ログイン画面がでます。
RDSのユーザー名とパスワードを入力すると、ログイン成功します!

補足ですが、phpmyadminは、ip制限やBasic認証をかけ、セキュアな状態でアクセスを行えるようにしましょう。
スクリーンショット 2021-12-05 20.44.50.png

phpmyadminパスフレーズ設定

設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。というエラーが出ました。

スクリーンショット 2021-12-05 20.48.15.png

config.inc.php内に長さは 32 文字以上パスフレーズを設定します。
指定したパスフレーズは内部で使用されるだけです。あとでこのフレーズを入力するような画面が出てくるわけではありませんので、適当で良いです。

C\Apache24\htdocs\blog\public\phpmyadmin\config.inc.php
/**
 * This is needed for cookie based authentication to encrypt password in
 * cookie. Needs to be 32 chars long.
 */
$cfg['blowfish_secret'] = ''; /* YOU MUST FILL IN THIS FOR COOKIE AUTH! */

C\Apache24\htdocs\blog\public\phpmyadmin\config.inc.php
/**
 * This is needed for cookie based authentication to encrypt password in
 * cookie. Needs to be 32 chars long.
 */
$cfg['blowfish_secret'] = 'hogehogehogehogehogehogehogehogehogehogehogehogehogehogehogehoge';

phpmyadminページを更新すると、表示されなくなりました。

phpmyadmin環境保管領域設定

また、以下のような表示が出ています。
phpMyAdmin 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。 代わりにデータベースの操作タブを使って設定することもできます。

スクリーンショット 2021-12-05 20.57.13.png

これは、下記の記事通り設定すると、環境保管領域が設定され、表示が消えます。

DB管理ツールがadminerの場合

今回は、phpmyadmin使用しましたが、adminerでもよいです。
下記のサイトから、adminerファイルをダウンロードし、ファイル名をadminer.phpとします。
そのファイルを C:/Apache24/htdocs/blog/publicに設置するだけです。

http://サーバーIP/adminer.phpでアクセスできます。

phpmyadminに比べ、1つのファイルだけよいので、軽量です。

logファイル関連

  • apacheのログファイル:C:\Apache24\logs配下
  • laravelのログファイル:C:\Apache24\htdocs\blog\storage\logs/laravel.log

Laravel 502エラー

502エラーになった際、この記事通りにすると、解決できました

エラー:PHP Warning: PHP Startup: Unable to load dynamic library 'curl'

下記の通りに対処するとよいです。

apiが使用できないエラー

App\Http\Middleware\TrustProxiesファイルを修正します。

app\Http\Middleware\TrustProxies.php
#/**
# * このアプリケーションで信用するプロキシ
# *
# * @var string|array
# */
protected $proxies;

protected $headers = [
    Request::HEADER_FORWARDED => 'FORWARDED',
    Request::HEADER_X_FORWARDED_FOR => 'X_FORWARDED_FOR',
    Request::HEADER_X_FORWARDED_HOST => 'X_FORWARDED_HOST',
    Request::HEADER_X_FORWARDED_PORT => 'X_FORWARDED_PORT',
    Request::HEADER_X_FORWARDED_PROTO => 'X_FORWARDED_PROTO',
    ];

↓↓

#/**
# * このアプリケーションで信用するプロキシ
# *
# * @var string|array
# */
protected $proxies = '*';

protected $headers = Request::HEADER_X_FORWARDED_ALL;

TLS/SSL証明書が入っているロードバランサ-を使用している場合、アプリケーションがときどきHTTPSリンクを生成しない場合があります。理由は、トラフィックがロードバランサにより80番ポートへフォワーディングされるため、セキュアなリンクを生成すべきだと判断できないからです。

TrustProxies.phpファイルによって、ロードバランサやプロキシを簡単にカスタマイズできます

AWS ELBや他の「クラウド」ロードバランサプロバイダを使用している場合は、実際のバランサのIPアドレスは分かりません。このような場合、全プロキシを信用するために、*を使います。

次回、OpenSSH を使用して ローカルPCからWindowsサーバーにSFTPを用いたファイル転送する設定を行います。
こちらの記事です↓。

参考記事

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4