#はじめに
題名の通り環境構築の続きになります。
PHPのインストールからです。
①はこちら↓
#流れ
- EC2を起動設定
- Windowsサーバーにリモートデスクトップで接続する
- 日本語設定と時計合わせ
- Visual Studio Codeをインストール
- ApacheとVisual C++ ランタイムのインストール
- Apacheの起動
↑①ではここまで
- PHPインストールし、Web上で確認
- RDSの起動
- composerとlaravelインストール
- プロジェクトを作成し、laravelページをWeb上で確認
- phpmyadminインストールし、Web上で確認
↑②ではここまで
- 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
ファイル等がないため、インストールしないようにしましょう。
解凍した中身を任意の場所に配置します。
今回は C ドライブ直下に php8
フォルダを作成し、中身をすべて移動します。
次に PHP の設定ファイルであるphp.iniを編集します。
php8フォルダ配下にphp.ini-development
などのファイルがあるので、これをコピーして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 # タイムゾーンの設定
mysqli
と mbstring
と openssl
は composerやlaravel で必要なため、拡張必須です。
必須というわけではありませんが、実行環境によっては設定変更が必要なパラメータをいくつか挙げてみます。
必要に応じて編集してください。
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を編集します。
# 編集
<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を作成します。
<?php
phpinfo();
?>
Apache を再起動します。
ここまでの設定で、PHP のスクリプトが動作する状態になっているかと思います。
windowsサーバーのIPアドレスをブラウザのURL欄に入れてアクセスすると、以下のようにphp情報ページが表示されます。
##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ですので、パラメータグループファミリーも同様に設定します。
以下の記事を参考に、タイムゾーンを東京に変更します。
そして、auroraを起動設定しましょう。
バージョンは、Aurora MySQL 3.01.0 (Compatible with MySQL 8.0.23)
を設定します。
セキュリティーグループは、EC2に対して、ポートを開けるのを忘れずに。
データベースを一つ作ります。今回はblog
というDB名としてます。
パラメータグループは、先程作成したものを設定します。
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
ファイルを修正します。
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修正します。
#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が表示されました。
#エラー対応
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バージョンでした。
ダウンロード後、ドキュメントルートであるC:/Apache24/htdocs/blog/public
内でphpmyadminディレクトリとして、展開します。
###php.iniファイルの修正
php.iniの中の891行目辺りを次のようにコメントが外れているか確認します。
なければ、追記します。
C:\php8\ext
配下にphp_mysqli.dll
ファイルがあることも確認しましょう。
;extension=php_mysqli.dll
extension=php_mysqli.dll
また、PHP ではエラーを出力するレベル(error_reporting)を設定することができます。
設定したエラー出力レベルによって、そのレベルのエラーや警告のメッセージが出力されます。
今回は、注意通知と非推奨の警告
以外のエラーを表示するようにします。
詳しくはこちら
php.ini
もしくは、httpd.conf
ファイルに書き込みましょう。
error_reporting = E_ALL & ~E_NOTICE & ~E_DEPRECATED
# 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
を修正します。
/* Server parameters */
$cfg['Servers'][$i]['host'] = 'localhost';
↓
/* Server parameters */
$cfg['Servers'][$i]['host'] = '【RDSエンドポイント(auroraの場合、ライターインスタンス)】';
http://サーバーIP/phpmyadmin/
にアクセスすると、ログイン画面がでます。
RDSのユーザー名とパスワードを入力すると、ログイン成功します!
補足ですが、phpmyadminは、ip制限やBasic認証をかけ、セキュアな状態でアクセスを行えるようにしましょう。
##phpmyadminパスフレーズ設定
設定ファイルに、暗号化 (blowfish_secret) 用の非公開パスフレーズの設定を必要とするようになりました。
というエラーが出ました。
config.inc.php
内に長さは 32 文字以上パスフレーズ
を設定します。
指定したパスフレーズは内部で使用されるだけです。あとでこのフレーズを入力するような画面が出てくるわけではありませんので、適当で良いです。
/**
* 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! */
↓
/**
* 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 環境保管領域が完全に設定されていないため、いくつかの拡張機能が無効になっています。理由についてはこちらをご覧ください。 代わりにデータベースの操作タブを使って設定することもできます。
これは、下記の記事通り設定すると、環境保管領域が設定され、表示が消えます。
#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
ファイルを修正します。
#/**
# * このアプリケーションで信用するプロキシ
# *
# * @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を用いたファイル転送する設定を行います。
こちらの記事です↓。