--- tags: エネワールド, robots: noindex, nofollow lang: ja-jp dir: ltr breaks: false --- # AWS/Laravel 開発環境構築マニュアル(Amazon Linux版) --- ## 要件 * Laravel/PHP, Mysqlで環境構築する * バージョンについては、Homesteadのv11.2.2と統一すること * Web サーバー Nginx * Github からソースコードのデプロイができる * S3による画像アップロード ## 開発環境 | OS | AmazonLinux | | -------------- | ----------- | | パッケージマネージャー |yum, Composer(Laravel)| | データベース| MySql | | フレームワーク |Laravel| | 言語 |PHP | | 自動デプロイ |AWSCodeDeploy| [Laravel7系 サーバ要件について](https://readouble.com/laravel/7.x/ja/installation.html) ## 主要なファイルの位置(編集コマンド) #### Apache ディレクトリ構造 * Apacheエラーログ /var/logの下のファイル * Laravel アプリケーションパス(今回の実装ではこの下に配置) * `$ cd /var/www/html/アプリケーション名` * php エラーログ * `$ sudo vim /var/log/php_errors.log` * Apache エラーログ * `sudo vim /etc/httpd/conf/httpd.conf` ## EC2 環境開発マニュアル > [color=black] ### 1. Laravel アプリケーション作成 * Gitに ファイルをアップロード 仮想環境上に**Homesteadのv11.2.2** で環境構築した アプリケーションをpushしておく --- #### ==以降AWSの設定項目== ### 2. EC2インスタンス作成 #### I. EC2インスタンス作成 ##### 参考サイト 「AWSで自動デプロイ」を基本参考にEC2インスタンスを作成する。 [AWSで自動デプロイ](https://qiita.com/nasuB7373/items/081f5974e31419a1a844#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A8github%E4%B8%8A%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A) **Ec2作成手順** 1. AMI を選択 2. 仮想サーバーの選択(無料枠は t2.microのみ) →選んだら「確認と作成」を押す 3. 確認画面がでるのでそのまま「起動」 4. キーペアの作成からキーペアを作る (既にある場合は不要) 5. 作成したキーペアをダウンロード(既にある場合は不要) [重要] DLしたキーペアファイルは保管する (~/.sshにまとめる) #### II. EIPの関連付け EC2インスタンスにEIPを関連づける ElasticIPをコンソールから選択  関連付け設定項目  #### III. EC2にSSH接続 1. キーに権限の付与 エクスプローラーから設定 2. カレントディレクトリでEC2接続コマンドを入力 $ ssh -i .ssh/設定したキーペア名.pem ubuntu@「パブリックDNS」 3. 接続するかの確認 Are you sure you want to continue connecting (yes/no)? yes #### IV. 接続後の確認  CodeDeployAgentの確認  ### 3. EC2インスタンスでgithubプロジェクトのデプロイ [PHP install参考サイト](https://qiita.com/nagahama/items/2fdc820791bee5d564ca) #### 1. Apacheのインストール # apacheのインストール $ sudo yum install httpd # apache起動 $ sudo systemctl start httpd # apacheの確認 $ sudo systemctl status httpd → Active: active (running) か確認 ここまでうまくできていれば、 「パブリック IPv4 DNS」で画像のページが表示されるはずなので確認する。  #### 2. yum経由での、PHPインストール $ sudo yum update 日付をJSTに設定する $ UTC →UTCになっていることを確認 $ sudo cp /etc/localtime /etc/localtime.default $ sudo ln -sf /usr/share/zoneinfo/Asia/Tokyo /etc/localtime $ sudo cp /etc/sysconfig/clock /etc/sysconfig/clock.default sudo vim /etc/sysconfig/clock [vim内] ZONE="Asia/Tokyo" UTC=false --- $ date →JSTになっているか確認 $ sudo vim /etc/sysconfig/i18n [vim内編集] LANG="ja_JP.UTF-8" $ sudo reboot # Amazon LinuxにデフォルトインストールされているRemi リポジトリを有効化 $ sudo yum-config-manager --enable epel $ sudo amazon-linux-extras install epel $ sudo yum install epel-release $ sudo rpm -Uvh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm # PHP のインストール $ sudo yum install --enablerepo=remi,remi-php74 php php-devel php-mbstring php-pdo php-gd php-xml php-mcrypt $ sudo amazon-linux-extras install php7.4 # そのほかに必要なパッケージをインストール $ sudo yum install --enablerepo=remi,amzn2extra-php7.4 php-xml php-mbstring # シンボリックリンクの作成 $ sudo ln -s /usr/bin/php74 /usr/bin/php $php -v →PHP 7.4.9 になるか確認 $ sudo cp /etc/opt/remi/php74/php.ini /etc/opt/remi/php74/php.ini.default # phpの設定ファイルの編集 $ sudo vim /etc/opt/remi/php74/php.ini [vim内] # HTTPヘッダにPHPのバージョンを記載しない(一応セキュリティ的にOffにしておいたほうが良い) # expose_php = On expose_php = Off # メモリ上限を引き上げる(結構デフォルトのメモリは少なめなので増やしておくことが多い) # memory_limit = 128M memory_limit = 256M # POST送信の許容サイズを引き上げる # post_max_size = 8M post_max_size = 16M # アップロードファイルの許容サイズを引き上げる(スマホの写真のサイズが大きくなっているので、2Mだとほぼ画像投稿できないので増やす) # upload_max_filesize = 2M upload_max_filesize = 16M # timezoneの設定 # date.timezone = date.timezone = Asia/Tokyo --- # php-fpmを再起動し、更新 $ sudo systemctl restart php74-php-fpm # 更新内容等でエラーがないか起動確認 $ sudo systemctl status php74-php-fpm →runningか確認 #### 3. ComposerとLaravel の導入 1. composerインストール [Composerインストール参考サイト](https://qiita.com/miriwo/items/b25f9d4d74b7103f6ff6) compsoer の公式ページDownload Composerの項目のコマンドを順に打ち込む [Composer 公式](https://getcomposer.org/download/) その後は、下のコマンドを順に実行する # composer 実行ファイルの移動 $ sudo mv composer.phar /usr/local/bin/composer # composer の実行 $ php /usr/local/bin/composer →composer と表示されるか確認 # 環境変数の設定 $echo "export PATH=/home/ユーザ名/.config/composer/vendor/bin:$PATH" >> ~/.bash_profile # 環境変数の更新 $ source ~/.bash_profile # 確認 $ composer #### 4. Laravelアプリケーションのファイル設定 [参考サイト](https://qiita.com/masataka715/items/6e46f1f5e53bdff6cd3d) $ sudo yum install git →Is this ok [y/d/N]: y $ cd /var/www/html $ git clone [リモートリポジトリurl] $ cd [プロジェクト名] # 権限の許可 $ sudo chmod -R 777 storage $ sudo chmod -R 775 bootstrap/cache $ sudo chmod 777 composer.lock # key generete $ php artisan key:generate # .envの設定 $ cp .env.example .env $ sudo vim .env [env内] APP_NAME=Laravel APP_ENV=production APP_KEY=base64:xxxxxxx(php artisan key:generateで生成される) APP_DEBUG=false APP_URL=http://[パブリックIP] #### 5. Apacheの設定 [参考サイト](https://qiita.com/ponsuke0531/items/cc07807d92ecad60a82f) #バックアップファイルの作成 $ sudo cp /etc/httpd/conf/httpd.conf /etc/httpd/conf/httpd.conf.default # 設定ファイルを開く $ sudo vi /etc/httpd/conf/httpd.conf # 以下に変更 DocumentRoot "/var/www/html/アプリケーション名/public" 最終行に以下を追記 # .htaccess 有効化 <Directory /var/www/html/アプリケーション名/public> AllowOverride All </Directory> # apache 再起動 sudo service httpd restart * Apache設定変更時は「sudo service httpd restart」をする #### 6. EC2 インスタンスの設定 * php.iniの設定 sudo vim /etc/opt/remi/php74/php.ini [vim] ;extension=mysql ↓に変更 extension=curl * swapの設定(メモリ不足対策) * 注) メモリが不足している場合のみ行う [メモリ不足対策](https://qiita.com/na0AaooQ/items/278a11ed905995bd16af) # 512MB のswapファイル作成 $ sudo dd if=/dev/zero of=/swapfile1 bs=1M count=512 $ sudo chmod 600 /swapfile1 $ mkswap /swapfile1 $ swapon /swapfile1 * composerのインストール $ cd /var/www/html/アプリケーション名 $ composer update # composer のインストール $ composer install # laravelのキャッシュ削除 $ sudo php artisan cache:clear $ sudo php artisan config:clear $ sudo php artisan route:clear # Laravelサーバー起動 $ php artisan serve ### 4. mysql 設定 #### mysql のインストール # mariadbの削除 $ sudo yum remove mariadb-libs # リポジトリインストール $ sudo yum localinstall https://dev.mysql.com/get/mysql80-community-release-el7-3.noarch.rpm # mysql-community-server(パッケージ)インストール $ sudo yum install --enablerepo=mysql80-community mysql-community-server # mysqlのインストール $ sudo yum install --enablerepo=mysql80-community mysql-community-devel # mysql ログファイルの作成 $ sudo touch /var/log/mysqld.log # インストールされたmysql の確認 $ yum list installed | grep mysql # 起動と確認 $ sudo service mysqld start $ systemctl status mysqld.service # インスタンスの起動と同時にmysqlも起動するよう設定 $ sudo chkconfig mysqld on #### mysql初期設定 * mysqlのパスワード設定 1. mysql パスワード確認 $ sudo cat /var/log/mysqld.log | grep password ↓mysqlの初期パスワードを確認する  2. mysql パスワード設定 # 初期設定 $ mysql -u root -p →1.で確認したパスワードでログイン # パスワードの制約を緩めるために、一度仮パスワードに変更する(stg環境のみ本番は複雑なパスワードにすること) mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY 'passwordPASSWORD@999'; # パスワード制約を緩める(stg環境のみ本番は複雑なパスワードにすること) mysql> SET GLOBAL validate_password.policy=LOW; # 制約の確認 mysql> HOW VARIABLES LIKE 'validate_password%'; # パスワードの設定 mysql> ALTER USER 'root'@'localhost' IDENTIFIED BY '設定したいパスワード'; mysql> exit $ mysql -u root -p →最後に設定したパスワードでログインできるか確認する。 ### 5. AWS CodeDeployからGithubへ自動デプロイ #### 参考サイト [AWSで自動デプロイ](https://qiita.com/nasuB7373/items/081f5974e31419a1a844#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A8github%E4%B8%8A%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A) #### tag の設定 Nameの他にもう一組、CodeDeploy用のキーと値を設定しておくことで、 そのタグを持つ複数のインスタンスに一斉に自動デプロイすることが可能になる * EC2インスタンス->「タグ」->「タグの管理」 * 画像「タグの追加」でこの内容で二つタグを作成する | key | 値 | | -------------------------------------- | ---------------------------- | | Name | インスタンス名 | | 任意のキー<br>(自動デプロイ先の識別用) | 任意の値<br>(インスタンス名) | インスタンス名はインスタンスコンソール一覧Nameから設定できる。  * セキュリティグループ の確認(設定されていなければしておく)  ##### CodeDeployエージェントの確認 ``` # CodeDeployエージェントの確認コマンド sudo yum info codedeploy-agent ``` 画像の様な内容がターミナルに表示されれば成功  ##### ローカルソースコードにCodeDeployの設定ファイルの追加 [Gitubリンク](https://github.com/aws-samples/aws-codedeploy-samples/tree/master/applications/SampleApp_Linux) Githubのリンクから「scripts」フォルダと 「asspec.yml」をDLし、追加 ==両方ともソース元のルートディレクトリに配置すること== また、「asspec.yml」の内容も修正し、プッシュする ``` version: 0.0 os: linux files: - source: / ←ココのみ修正 destination: /var/www/html/ hooks: BeforeInstall: - location: scripts/install_dependencies timeout: 300 runas: root - location: scripts/start_server timeout: 300 runas: root ApplicationStop: - location: scripts/stop_server timeout: 300 runas: root ``` ##### CodeDeployの設定 https://qiita.com/nasuB7373/items/081f5974e31419a1a844#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A8github%E4%B8%8A%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A * デプロイグループ作成時、AWS Systems Managerのインストールはデフォルトのまま。(使用すると料金請求がくる可能性がある) * デプロイ作成時、追加のデプロイ動作設定の項目 * このインスタンス上のライフサイクルイベントの障害で、デプロイを失敗させないのチェックを外す * コンテンツオプション - オプショナル → deployの失敗にチェック * その他は記事の内容で設定する。 ##### CodePipelineの作成 https://qiita.com/nasuB7373/items/081f5974e31419a1a844#%E3%83%AD%E3%83%BC%E3%82%AB%E3%83%AB%E7%92%B0%E5%A2%83%E3%81%A8github%E4%B8%8A%E3%81%A7%E3%81%AE%E8%A8%AD%E5%AE%9A 記事の内容で設定し、 何かしらのコミットをリモートリポジトリにプッシュ後、 自動でデプロイが成功するか確認 **成功時の画像(上二つがgitコミット自動デプロイ成功例)**  ``` ``` ## AWS 費用詳細 * S3 #### 無料利用枠について(2020/09/24 公式ページ引用) AWS 無料利用枠の一環として、Amazon S3 を無料で開始できます。 AWS の新規のお客様は、サインアップしていただくと、S3 標準ストレージクラスで 5 GB の Amazon S3 ストレージ、20,000 GET リクエスト、2,000 PUT、COPY、POST、 あるいは LIST リクエスト、データ送信 15 GB を毎月、1 年間ご利用いただけます。 [S3 費用詳細](https://aws.amazon.com/jp/s3/pricing/) * EC2 #### 無料利用枠について(2020/09/24 公式ページ引用) 無料利用枠内に抑えるには、EC2 マイクロインスタンスのみを使用してください。 [EC2費用詳細](https://aws.amazon.com/jp/ec2/pricing/) * Elastic IP #### 無料利用枠について(2020/09/24 公式ページ引用) 次の条件がすべて満たされている限り、Elastic IP アドレスに料金は発生しません。 * インスタンスのElastic IP アドレスが EC2 インスタンスに関連付けられている。 * インスタンスのElastic IP アドレスに関連付けられているインスタンスが実行中である。 * インスタンスのElastic IP アドレスしか添付されていない。 [Elastic IP 料金システム説明](https://cloud5.jp/ec2-eip/) [Elastic IP 料金(Amazon公式)](https://aws.amazon.com/jp/ec2/pricing/) * Codepipeline(自動デプロイ等に使用) 1 か月あたり 1 つ無料 その他、毎月アクティブなパイプライン*1つにつき1.00USD が課金される ## AWS 用語まとめ * キーペア * インスタンスへの接続時に身分証明に使用するセキュリティ認証情報のセットであり、プライベートキーとパブリックキーで構成 * Elastic IP * Elastic IPアドレス(EIP)とは A. 固定化されたIPアドレス * メリット * IPアドレスが固定化される * デメリット * お金がかかる可能性があり * なぜ必要か? パブリックアドレスはEC2インスタンスに固定化されず 変化することがあるため 実際最初にインスタンス停止、 再起動すると変化した * AWS Systems Manager (SSM) 主な機能 ・リソース状況の可視化 ・定型作業の実施 ・インタラクティブな操作 ・アプリケーションの設定管理 [参考サイト](https://blog.serverworks.co.jp/tech/2020/04/16/systems_manager_yattemiyou/) * remiリポジトリ [参考サイト](https://akamist.com/blog/archives/648)
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up