アーキテクト:
lara-docker/
|----docker-compose.yml
|----nginx/
| |-----Dockerfile
| |-----default.conf
|
|------laravel/
| |-----Dockerfile
|
|------.ebextensions(beanstalkの環境設定)
|------Dockerrun.aws.json(beantalkのECS用のデプロイファイル)
1)docker-compose.ymlを作成する。
①nginxの作成
②laravelの作成
--------------------docker-compose.yml--------------------------------------------
version: '2'
services:
nginx:
image: nginx
ports:
- "80:80"
laravel:
image: laravel
-----------------------------------------------------------------------------------------
2)nginxの初期設定ファイルの記載を行う
①laravelのドキュメント先を指定する。
②PHP-fpm関連で、fastcgiの記述を行う。
vi docker/nginx/default.conf
----------------------default.conf------------------------------------------------------
server {
listen 80;
server_name localhost;
location / {
# Laravelのドキュメントルート設定
root /var/www/laravel/public;
fastcgi_split_path_info ^(.+\.(?:php|phar))(/.*)$;
fastcgi_intercept_errors on;
fastcgi_index index.php;
include fastcgi_params;
# FastCGIの向き先をLaravelコンテナに設定
fastcgi_pass laravel:9000;
# FastCGI サーバに渡されるべきパラメータを設定(一般的な設定)
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param PATH_INFO $fastcgi_path_info;
fastcgi_param PATH_TRANSLATED $document_root$fastcgi_path_info;
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
root /usr/share/nginx/html;
}
}
----------------------------------------------------------------------------------------
3)nginxのDockerfileの作成を行う
①nginxとalfinelinuxを指定する
②上記で、作成したdefault.confを導入先のdockerにコピーを行う。
vi docker/nginx/Dockerfile
------------------ Dockerfile ---------------------------------------------------------
FROM nginx:1.17-alpine
# ローカルから設定ファイルをコピー
COPY default.conf /etc/nginx/conf.d/default.conf
-----------------------------------------------------------------------------------------
4)laravelのDockerfile作成を行う
①amazonlinuxを導入する
②php-pecl-zip:zipを使えるようにするファイル。
③php7.3をインストール
④php-dom:phpとMySQLを接続するプラグイン
⑤composerのインストール
⑥Laravelをインストールする。
⑦Laravelのプロジェクトの作成する。
⑧php-fpmのインストールを行う
-----------------------Dockerfile-----------------------------------------------------------
FROM amazonlinux:2 as vender
# PHPインストール
RUN amazon-linux-extras install -y php7.3
RUN yum install -y php-pecl-zip php-mbstring php-dom
# Composerインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php -r "if (hash_file('sha384', 'composer-setup.php') === 'a5c698ffe4b8e849a443b120cd5ba38043260d5c4023dbf93e1558871f1f07f58274fc6f4c93bcfd858c6bd0775cd8d1') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
RUN php composer-setup.php
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
# 環境変数設定
# root でのインストールを許可する設定
ENV COMPOSER_ALLOW_SUPERUSER 1
#
ENV COMPOSER_HOME "/opt/composer"
ENV PATH "$PATH:/opt/composer/vendor/bin"
# Laravelインストール
RUN composer global require "laravel/installer"
# Laravelプロジェクト作成
WORKDIR /var/www
RUN composer create-project laravel/laravel laravel
FROM php:7.3-fpm-alpine
# ビルド用コンテナから必要なコンテンツをコピー
COPY --from=vender --chown=www-data:www-data /var/www/ /var/www/
--------------------------------------------------------------------------------------------------
5)Nginxのコンテナのビルドを行う
docker build nginx/. -t nginx
6)Laravelのコンテナのビルドを行う
docker build laravel/. -t laravel
7)docker-composeを起動する。
docker-compose up
8).ebextensionsの作成を行う
mkdir .ebextensions
9)00permission.configの作成
(Laravelのパブリックディスクの権限設定)
vi 00permission.config
---------------00permission.config-------------------------------------
container_commands:
01chmod_storage:
command: "chmod -R 777 ./storage"
----------------------------------------------------------------------------
②composer.configの作成
(Laeravelのドキュメントルート用)
vi composer.config
------------- composer.config -------------------------------------------
option_settings:
aws:elasticbeanstalk:container:php:phpini:
document_root: /public
-----------------------------------------------------------------------------
Beanststalk:
1)beanstalkのデプロイ用のファイルの作成を行う。
------------------------------------------------------------------------------
{
"AWSEBDockerrunVersion": 2,
"volumes": [
{
"name": "laravel-app",
"host": {
"sourcePath": "/var/app/current/"
}
},
{
"name": "laravel-storage",
"host": {
"sourcePath": "/var/app/current/storage/"
}
}
],
"containerDefinitions": [
{
"name": "laravel-app",
"image": "XXXXXXXXXXXXXXX.dkr.ecr.ap-northeast-1.amazonaws.com/laravel-php:latest",
"environment": [
{
"name": "Container",
"value": "PHP"
}
],
"essential": true,
"memory": 128,
"mountPoints": [
{
"sourceVolume": "laravel-app",
"containerPath": "/var/www/laravel",
"readOnly":"true"
},
{
"sourceVolume": "laravel-storage",
"containerPath": "/var/www/laravel/storage"
}
],
"portMappings": [
{
"hostPort": 80,
"containerPort": 80
}
]
}
]
}
---------------------------------------------------------------------------
0 件のコメント:
コメントを投稿