DockerでLaravelの開発環境を構築する際にめちゃちゃつまずいたので、
新人に同じ被害に遭ってほしく無いという思いからこの記事を書す^^
【目標】
・Docker-composeでLaravelの開発環境構築
・既存のLaravelプロジェクトの開発環境をDockerに乗り換える。
【ディレクトリ構成】
Larave_docker
|__docker-compose.yml
|_src
|_LaravelプロジェクトをgitからCloneしてきたもの
|_web
|_Dockerfile
|_nginx.conf
|_php.ini
|_www.conf
####🔽制作されるコンテナは2つ🔽
①DB(mysql)コンテナ
②Nginx+phpコンテナ
##順序はこう
①amazonlinuxサーバーでLaravelが動くようにする(Dockerfile作成)
②docker-compose.ymlを作成
③docker-composeで複数コンテナ同時立ち上げ
④mysqlにデーターベースを作成
⑤Laravelの.envファイル編集
#①amazonlinuxサーバーでLaravelが動くようにする(Dockerfile作成)
FROM amazonlinux:2
#nginxとphpをインストール
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-xml php-curl php-gd php-bcmatch 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
#gitインストール
RUN yum install -y git
#php.iniのmemory_limitを無制限に変更
COPY ./php.ini /etc/php.ini
#nginxのデフォルトrootの変更
COPY ./nginx.conf /etc/nginx/nginx.conf
#php-fpmのuser groupとかの変更
COPY ./www.conf /etc/php-fpm.d/www.conf
#node.jsとnpmをインストール
RUN curl -fsSL https://rpm.nodesource.com/setup_16.x | bash -
RUN yum install -y nodejs
変更点だけここに記載します。
####php.ini
;memory_limit = 128M
memory_limit = -1
####nginx.conf
server {
listen 80 default_server;
listen [::]:80 default_server;
server_name _;
root /var/www/laravelプロジェクトディレクトリ名/public;
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 / {
index index.php index.htm index.html;
try_files $uri $uri/ /index.php?$query_string;
}
location ~ \.php$ {
fastcgi_pass unix:/var/run/php-fpm/www.sock;
fastcgi_index index.php;
fastcgi_param SCRIPT_FILENAME /var/www/laravelプロジェクトディレクトリ名/public$fastcgi_script_name;
include fastcgi_params;
}
www。conf
;user = apache
user = nginx
;group = apache
group = nginx
これでLaravelは動く。
Laravel uiなども使える。
#②docker-compose.ymlを作成
version: '3'
services:
db:
platform: linux/x86_64
image: mysql:5.7
container_name: laravel_db
environment:
MYSQL_ROOT_PASSWORD: root
command: mysqld --character-set-server=utf8mb4 --collation-server=utf8mb4_unicode_ci
volumes:
- ./src/db/mysql_data:/var/lib/mysql
ports:
- 3306:3306
web:
container_name: laravel_docker
build: ./web/ →webディレクトリ内のDockerfileからコンテナを作成
ports:
- "80:80"
volumes:
- ./src/LaravelプロジェクトをgitからCloneしてきたもの:/var/www/Laravelプロジェクト名
working_dir: /var/www/Laravelプロジェクト
command: /bin/sh -c "chmod 777 -R ./storage && composer install && npm install && npm run dev && cp .env.example .env && php artisan key:generate && php-fpm && nginx -g 'daemon off;'"
depends_on:
- db
#③docker-composeで複数コンテナ同時立ち上げ
docker-compose build up
#④mysqlにデーターベースを作成
③で制作されたmysqlコンテナに入って作業します。
docker exec -it laravel_db bash
#mysqlのbashで以下を入力
mysql -u root -p mysql
Enter password:パスワードrootを入力(docker-compose.ymlで設定したパスワード)
mysql> CREATE database laravel_db(データーベース名);
mysql> SHOW databases;→制作されたか確認
#⑤Laravelの.envファイル編集
DB_CONNECTION=mysql
DB_HOST=laravel_db(mysqlコンテナ名)
DB_PORT=3306
DB_DATABASE=laravel_db(④で制作したDB名)
DB_USERNAME=root →ユーザー制作してない場合はrootでアクセス
DB_PASSWORD=root →ユーザー制作してない場合はrootパスワードでアクセス
php artisan migrate
これでテーブルが作成されればLaravelとDBの接続成功
##最後に
筆者はDB接続をRDSにしたかったのですが、
うまく接続ができなかったのでこの方法を用いました。
EC2→RDSとEC2を踏み台にすれば接続できそうなのですが、工数かかると思って今回はこの簡単な方法にしました😄
https://qiita.com/lighttiger2505/items/ea33291639a8656d50b4
AWSポートフォワーディング SSH Mysql などで記事出てくると、、、
※RDSのセキュリティグループのインバウンドを全ipから許可、mysqlのユーザーのアクセスip制限をどこからでもする、RDSのパブリックアクセスを許可する
でアクセスもできます。
そもそもRDSに接続しようとすると、Nginxの500エラーがでてきて、このエラーがDBにあると判断するまでに2日くらいかかってマジで時間浪費しました。。
このやろう!!