Как маршрутизировать мой php сервер через nginx, используя docker-compose? - PullRequest
0 голосов
/ 25 ноября 2018

Это мой первый раз, когда я разрабатываю докер-приложение.Я хочу, чтобы все мои сервисы работали из контейнера, пока я редактировал код с моего локального компьютера.

Итак, у меня есть корневая папка, которая называется test/, и я хочу следовать этому уроку https://auth0.com/blog/developing-restful-apis-with-lumen/. Так что мне нужен композитор, веб-сервер (nginx) и база данных (mysql).

У меня внутри корневой папки есть файл docker-compose следующим образом:

version: '2'

services:

  composer:
    image: composer
    container_name: composer
    volumes:
      - ./authors:/app
    restart: always
    tty: true
    command: bash

  php:
    image: php:fpm
    container_name: php
    restart: always
    tty: true
    working_dir: /var/www
    volumes:
      - ./authors:/var/www
    environment:
      - "DB_PORT=3306"
      - "DB_HOST=mysql"

  nginx:
    image: nginx
    container_name: nginx
    restart: always
    tty: true
    working_dir: /var/www
    volumes_from:
      - php
    volumes:
      - ./vhost.conf:/etc/nginx/conf.d/default.conf
    ports:
      - 8080:80

  mysql:
    image: mysql:5.7
    container_name: mysql
    restart: always
    tty: true
    ports:
      - "3306:3306"
    environment:
      MYSQL_DATABASE: hmh
      MYSQL_USER: root
      MYSQL_ROOT_PASSWORD: root
    volumes:
      - dbdata:/var/lib/mysql

#Volumes
volumes:
  dbdata:

А вот файл конфигурации, используемый для nginx:

server {
    listen 80;
    index index.php index.html;
    root /var/www/public;

    location / {
        try_files $uri /index.php?$args;
    }

    location ~ \.php$ {
        fastcgi_split_path_info ^(.+\.php)(/.+)$;
        fastcgi_pass php:8000;
        fastcgi_index index.php;
        include fastcgi_params;
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        fastcgi_param PATH_INFO $fastcgi_path_info;
    }
}

КомпозиторКонтейнер есть, так что я могу перейти в любое время, когда мне нужно, и запустить несколько команд, а также иметь возможность поднять проект из него, запустив php -S localhost:8000 -t public, это фактически регистрирует консоль, что сервер работает, НО, когда я захожу в localhost:8080 он показывает только экран приветствия nginx.

Итак, я знаю, что nginx работает, composer позволяет мне выполнять всю необходимую работу, но как мне маршрутизировать php-сервер через nginx?Я могу зайти внутрь контейнера php, и запустить сервер, но при переходе по URL он не работает.Если это не так много, я хотел бы получить объяснение, а не только решение.Спасибо.

Ответы [ 2 ]

0 голосов
/ 03 декабря 2018

Так как я не мог настроить nginx так, как я хочу, я использую вместо этого сервер Apache2.Вот мой файл композиции.

version: '3'
services:
  composer:
    build:
      context: .
      dockerfile: .docker/composer.dockerfile
    container_name: composer-php
    user: "${UID}:${GID}"
    volumes:
      - .:/app
    restart: always
    tty: true
    working_dir: /app
    command: bash
    environment:
      DB_CONNECTION: mysql
      DB_HOST: db
      DB_DATABASE: lumen
      DB_USERNAME: lumen
      DB_PASSWORD: lumen

  php:
    build:
      context: .
      dockerfile: .docker/php.dockerfile
    container_name: apache-php
    user: "${UID}:${GID}"
    depends_on:
      - db
    ports:
      - 8080:8080
    volumes:
      - .:/app
    restart: always
    tty: true
    working_dir: /app
    command: bash
    environment:
      DB_CONNECTION: mysql
      DB_HOST: db
      DB_DATABASE: lumen
      DB_USERNAME: lumen
      DB_PASSWORD: lumen

  db:
    image: mysql:5
    container_name: mysql-php
    restart: always
    tty: true
    environment:
      MYSQL_ROOT_PASSWORD: root
      MYSQL_DATABASE: lumen
      MYSQL_USER: lumen
      MYSQL_PASSWORD: lumen
    ports:
      - "3306:3306"
    volumes:
      - dbdata:/var/lib/mysql

volumes:
  dbdata:

С этой настройкой я смог выполнить этот урок https://auth0.com/blog/developing-restful-apis-with-lumen/ без проблем, чтобы проверить мои настройки.Я изменяю официальные образы просто для установки pdo pdo_mysql, это все, что входит в мои dockerfiles для этой установки.

Имея это на своем месте, я могу зайти в контейнер composer, создать проект, затем выйти из этого контейнера и перейти в контейнер php, перейти в проект cd, а затем обработать его.

0 голосов
/ 26 ноября 2018

Проблема в том, что ваш сервер работает на порту 8000, но ваш докер поддерживает только порт 80 через ports: - 8080:80

, так же как и nginx: listen 80;

...