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 mariadb-client 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; }

バッドをするには、ログインかつ
こちらの条件を満たす必要があります。