【目的】
amazonlinux(サーバーOS)のLaravel(Laravel7系)の開発環境を作りたい。
まずは完成版のDockerfileをどぞ!
※コードの解説もあるよ^^
【前提】
『Docker hub』で"amazonlinux"のimageを取得しているものとする。
↓のコマンドで簡単取得できるぞ
docker pull amazonlinux
###ディレクトリ構造はこんな感じ。
laravel_docker
|__Dockerfile
|__nginx.conf
|__php.ini
|__run.sh
//Dockerfileでimage制作の時に必要になるファイルを"Dockerfileと同じ階層に入れてる
##↓Dockerfileはこちら↓
FROM amazonlinux:2
//解説①
#install packeges
RUN yum -y update
RUN amazon-linux-extras install -y nginx1.12 php7.4
RUN yum install -y php-pecl-zip php-mbstring php-xml php-curl php-bcmatch php-gd install vim zip unzip curl less procps
RUN yum -y update
//解説②
#Composerインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php --version=1.10.23
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
//解説③
#php.iniのmemory_limitを無制限に変更
COPY ./php.ini /etc/php.ini
//解説④
#nginxのデフォルトrootの変更
COPY ./nginx.conf /etc/nginx/nginx.conf
//解説⑤
#LaravelProject作成
WORKDIR /var/www/
RUN composer create-project --prefer-dist "laravel/laravel=7.3" {Laravelプロジェクトのディレクトリ名} //{}は不要だよ^^
RUN chmod -R 777 /var/www/Laravelプロジェクトのディレクトリ名/storage/
//解説⑥
#node.js npm install(本番環境とver違う・・・まぁいっか)
RUN curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -
RUN yum install -y nodejs
//解説⑦
#nginx起動 + php-fpm起動
COPY run.sh /root/
WORKDIR /root
CMD ["/root/run.sh"]
#解説していく!!
##解説①
#install packeges
RUN yum -y update
RUN amazon-linux-extras install -y nginx1.12 php7.4
RUN yum install -y php-pecl-zip php-mbstring php-xml php-curl php-bcmatch php-gd install vim zip unzip curl less procps
RUN yum -y update
パッケージ関連をモロっとインストールしている。
※この段階で、nginxとphpのインストールを済ませてる。
RUN amazon-linux-extras install -y nginx1.12 php7.4
※amazonlinuxはこの記述でnginxやらphpやらをインストール(使用可能に)できる
##解説②
#Composerインストール
RUN php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
RUN php composer-setup.php --version=1.10.23
RUN php -r "unlink('composer-setup.php');"
RUN mv composer.phar /usr/local/bin/composer
深い解説は無いです。
単純にLaravelをインストールするのにComposerが必要だからLaravelを入れる前にComposerをインストールしています。
※諸事情により、今回はVersion指定してインストールしてます。(既にある開発環境と揃えたかった)
##解説③
#php.iniのmemory_limitを無制限に変更
COPY ./php.ini /etc/php.ini
初期設定ではLaravelをインストールする際に"memory_limit"制限でインストールできないため設定を変更する。
COPY ./php.ini /etc/php.ini
※COPY ローカルのファイル名 内容を反映させたいコンテナのファイル名
※この記事ではファイルの変更部分だけを記述(変更を加えたファイルは自分で作ってね。)
;memory_limit = 128M →デフォルトはこれなのでコメントアウトしとく
memory_limit = -1 →これに変更
##解説④
//解説④
#nginxのデフォルトrootの変更
COPY ./nginx.conf /etc/nginx/nginx.conf
『/』でアクセスした時のページ(デフォルトページ)の設定
例:http://localhost:8000/
にアクセスしたら映る画面を設定していく。
少し変更が多いので、設定した後のファイルをそのまま載っけますw
# For more information on configuration, see:
# * Official English Documentation: http://nginx.org/en/docs/
# * Official Russian Documentation: http://nginx.org/ru/docs/
user nginx;
worker_processes auto;
error_log /var/log/nginx/error.log;
pid /run/nginx.pid;
# Load dynamic modules. See /usr/share/nginx/README.dynamic.
include /usr/share/nginx/modules/*.conf;
events {
worker_connections 1024;
}
http {
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
access_log /var/log/nginx/access.log main;
sendfile on;
tcp_nopush on;
tcp_nodelay on;
keepalive_timeout 65;
types_hash_max_size 2048;
include /etc/nginx/mime.types;
default_type application/octet-stream;
# Load modular configuration files from the /etc/nginx/conf.d directory.
# See http://nginx.org/en/docs/ngx_core_module.html#include
# for more information.
include /etc/nginx/conf.d/*.conf;
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/Laravelのプロジェクト名/public; →ここの変更が一番大事
※Laravelのプロジェクトはこの後作るよ!
client_max_body_size 30M;
# Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
location ~* .(html|css|js|jpe?g|png|gif|svg|mpg|flv|swf)$ {
expires 10d;
access_log off;
break;
}
location / {
#if (!-e $request_filename){
# rewrite ^(.*)$ /%1 redirect;
#}
#if (!-e $request_filename){
# rewrite ^(.*)$ /index.php break;
#}
index index.php index.htm index.html;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/paylove/public$fastcgi_script_name;
include fastcgi_params;
}
error_page 404 /404.html;
location = /40x.html {
}
error_page 500 502 503 504 /50x.html;
location = /50x.html {
}
}
# Settings for a TLS enabled server.
#
# server {
# listen 443 ssl http2 default_server;
# listen [::]:443 ssl http2 default_server;
# server_name _;
# root /usr/share/nginx/html;
#
# ssl_certificate "/etc/pki/nginx/server.crt";
# ssl_certificate_key "/etc/pki/nginx/private/server.key";
# ssl_session_cache shared:SSL:1m;
# ssl_session_timeout 10m;
# ssl_ciphers HIGH:!aNULL:!MD5;
# ssl_prefer_server_ciphers on;
#
# # Load configuration files for the default server block.
# include /etc/nginx/default.d/*.conf;
#
# location / {
# }
#
# error_page 404 /404.html;
# location = /40x.html {
# }
#
# error_page 500 502 503 504 /50x.html;
# location = /50x.html {
# }
# }
}
##解説⑤
#LaravelProject作成
WORKDIR /var/www/
RUN composer create-project --prefer-dist "laravel/laravel=7.3" {Laravelプロジェクトのディレクトリ名} //{}は不要だよ^^
RUN chmod -R 777 /var/www/Laravelプロジェクトのディレクトリ名/storage/
WORKDIR /var/www/
ここでLaravelプロジェクトをつくりたいディレクトリに移動する。
RUN composer create-project --prefer-dist "laravel/laravel=7.3" {Laravelプロジェクトのディレクトリ名} //{}は不要だよ^^
ComposerにLaravelのインストールとプロジェクトを作成を同時に行ってもろてます。
RUN chmod -R 777 /var/www/Laravelプロジェクトのディレクトリ名/storage/
storageの権限を緩くする。
※最適では無い。
※サーバーでユーザーを作ってそのユーザーにディレクトリ権限を明け渡してしまうのがいいのかと、、、
ここは定かではないのでそのうち更新します。
##解説⑥
#node.js npm install(本番環境とver違う・・・まぁいっか)
RUN curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -
RUN yum install -y nodejs
Laravelではnpmでライブラリを利用するので、
Node.jsとnpmを事前にサーバーにインストールしておく。
##解説⑦
#nginx起動 + php-fpm起動
COPY run.sh /root/
WORKDIR /root
CMD ["/root/run.sh"]
nginx起動 + php-fpm起動を行う。
これらは、サーバーが立ち上がった後にコマンド入力をするので、
CMD ["/root/run.sh"]
この記述が必要になる。
run.shの中身はこちら。
#!/bin/sh
/usr\/sbin\/php-fpm
nginx -g 'daemon off;'
echo 'lounch'
#!/bin/sh
これを記述していれば、シェルでファイルを指定したコマンドを入力すると、
その指定したファイル内のコマンドが実行される。
/usr\/sbin\/php-fpm
php-fpmの起動
nginx -g 'daemon off;'
nginxの起動
##終わり
いかがでしょうか、Dockerを触ってからまだ、3日くらいなので便利さはわかるのだが、
実装がなかなかしんどいですww
また、サーバーに関しての知識がカスカスということも露呈したのでいい機会でした。
これを機にサーバーの知識も増やさなければなーとなりました・
以上。。。。