Docker上でLaravelが動かない【Docker × Nuxt × Laravel × nginx】
Q&A
Closed
解決したいこと
Docker上でNuxt × Laravelのプロジェクトを作成し、nginxサーバーを用い、
localhost(:3000)でNuxtを表示し、localhost/api(:8000)でLaravelを表示したいです。
フロントはうまく動作しているのですが、バックエンドがうまくいきません。
具体的には、docker compose up -dを叩くとNuxtが立ち上がり、localhostでも3000番でも表示されます。
しかしLaravelは立ち上がらず、ローカルのLaravelディレクトリに降りてphp artisan serveすると立ち上がります。(cd ./services/backend php artisan serve)
コンテナ内で立ち上げるにはどうすれば良いですか?
ディレクトリ構成
.
├── docker
│ ├── backend
│ │ ├── Dockerfile
│ │ └── php.ini
│ ├── frontend
│ │ └── Dockerfile
│ └── web
│ ├── Dockerfile
│ └── default.conf
│
├── services
│ ├── backend
│ │ └── Laravelファイル群
│ └── frontend
│ └── Nuxtファイル群
│
└── docker-compose.yml
具体的なコード
docker-compose.yml
version: "3.9"
services:
backend:
build: ./docker/backend
container_name: nl-backend
volumes:
- ./services/backend:/backend
command: sh -c 'composer install && php artisan serve'
ports:
- "8000:8000"
tty: true
environment:
- DB_HOST=db
- DB_DATABASE=laravel
- DB_USERNAME=root
- DB_PASSWORD=password
frontend:
build: ./docker/frontend
container_name: nl-frontend
volumes:
- ./services/frontend:/frontend
command: sh -c 'npm install && npm run dev'
ports:
- "3000:3000"
tty: true
environment:
- NODE_ENV=development
- HOST=0.0.0.0
- CHOKIDAR_USEPOLLING=true
web:
build: ./docker/web
container_name: nl-web
volumes:
- ./services/backend:/backend
- ./services/frontend:/frontend
ports:
- "80:80"
depends_on:
- frontend
- backend
db:
image: mysql:latest
container_name: nl-db
ports:
- "3306:3306"
volumes:
- mysql-volume:/var/lib/mysql
environment:
MYSQL_DATABASE: shukatsu
MYSQL_USER: shukatsu
MYSQL_PASSWORD: shukatsu
MYSQL_ROOT_PASSWORD: local
phpmyadmin:
image: phpmyadmin/phpmyadmin:latest
container_name: nl-phpmyadmin
ports:
- "8888:80"
depends_on:
- db
volumes:
mysql-volume:
docker/backend/Dockerfile
FROM php:8.3.0-fpm
WORKDIR /backend
RUN apt update \
&& apt install -y zlib1g-dev vim libzip-dev \
&& docker-php-ext-install zip pdo_mysql \
&& apt install -y git \
&& pecl install xdebug \
&& docker-php-ext-enable xdebug
RUN apt install -y npm \
&& npm install n -g \
&& n stable
COPY --from=composer:2.4 /usr/bin/composer /usr/bin/composer
COPY php.ini /usr/local/etc/php/
docker/backend/php.ini
[Date]
date.timezone = "Asia/Tokyo"
[mbstring]
mbstring.internal_encoding = "UTF-8"
mbstring.language = "Japanese"
[PHP]
display_errors = On
memory_limit = 500M
upload_max_filesize = 500M
post_max_size = 500M
[xdebug]
xdebug.mode = debug
xdebug.start_with_request = yes
xdebug.client_host = "host.docker.internal"
xdebug.client_port = 9012
xdebug.log = "/var/log/xdebug.log"
docker/web/Dockerfile
FROM nginx:1.21.3
COPY default.conf /etc/nginx/conf.d/default.conf
docker/web/default.conf
server {
listen 80;
root /app/public;
location / {
proxy_pass http://frontend:3000;
}
location /api {
proxy_pass http://backend:8000;
proxy_set_header X-Real-IP $remote_addr;
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
proxy_set_header Host $http_host;
add_header X-Server-Hostname $hostname;
add_header X-Server-Address $server_addr;
}
client_max_body_size 100m;
keepalive_timeout 5;
}