2017-10-15 7 views
1

の静的コンテンツを「ほとんど」まったく無駄に使い果たしていないため、「少し」問題に役立ちません。たぶん私は少し間違いを見た。Docker-ContainerのNginxはsymfony3-app

私はスリムな開発環境を持つためにsymfonyの3に基づいてアプリケーションを開発したい、私はこれらの3つのコンテナにドッキングウィンドウを使用しています:

  • mysqlの(正常に動作します)
  • :これは、ドッキングウィンドウ/ nginxの/ mysqlの-構成です

  • nginxの(私のドッカ-compose.ymlで "アプリ" と定義)
  • PHP-FPM

    私のドッキングウィンドウ-compose.yml:

    version: '3.0' 
    
    services: 
        nginx: 
        image: nginx:latest 
        depends_on: 
         - app 
        ports: 
         - '8080:80' 
        volumes: 
         - ./app/config/docker/nginx.conf:/etc/nginx/conf.d/default.conf 
        app: 
        build: . 
        depends_on: 
         - mysql 
        volumes: 
         - .:/var/www/html 
         - vendor:/var/www/html/vendor 
        mysql: 
        image: mysql:5.7 
        volumes: 
         - db_data:/var/lib/mysql 
         - ./app/config/docker/mysql_character_set.cnf:/etc/mysql/conf.d/character_set.cnf 
        restart: always 
        ports: 
         - '6603:3306' 
        environment: 
         MYSQL_ROOT_PASSWORD: "root" 
         MYSQL_DATABASE: "test" 
         MYSQL_USER: "test" 
         MYSQL_PASSWORD: "test" 
    
    volumes: 
        db_data: 
        vendor: 
    

    マイnginx.conf:

    server { 
    listen 80 default_server; 
    root /var/www/html/web; 
    index app_dev.php app.php; 
    
    location/{ 
        # try to serve file directly, fallback to app.php 
        try_files $uri /app_dev.php$is_args$args; 
    } 
    # DEV 
    # This rule should only be placed on your development environment 
    # In production, don't include this and don't deploy app_dev.php or config.php 
    location ~ ^/(app_dev|config)\.php(/|$) { 
        fastcgi_split_path_info ^(.+\.php)(/.+)$; 
        fastcgi_pass app:9000; 
        fastcgi_index index.php; 
        include fastcgi_params; 
        fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; 
        fastcgi_intercept_errors off; 
        fastcgi_buffer_size 16k; 
        fastcgi_buffers 4 16k; 
    
    } 
    
    # return 404 for all other php files not matching the front controller 
    # this prevents access to other php files you don't want to be accessible. 
    location ~ \.php$ { 
        return 404; 
    } 
    
    location = /favicon.ico { access_log off; log_not_found off; } 
    location = /robots.txt { access_log off; log_not_found off; } 
    
    access_log /var/log/nginx/access.log main; 
    error_log /var/log/nginx/error.log error; 
    } 
    

    マイDockerfile:ドキュメントルートの

    FROM php:7.1-fpm 
    MAINTAINER [email protected] 
    
    ENV DEBIAN_FRONTEND=noninteractive 
    ENV PHP_DEPS="pdo pdo_mysql" 
    
    ADD . /var/www/html 
    
    # php extensions 
    RUN docker-php-ext-install $PHP_DEPS 
    
    # composer 
    RUN curl -sS https://getcomposer.org/installer | \ 
    php -- --install-dir=/usr/local/bin --filename=composer && \ 
    composer --version 
    
    # copy php-conf 
    COPY app/config/docker/fpm.conf /etc/php-fpm.d/autotrader.conf 
    
    CMD ["php-fpm"] 
    

    "のLS":

    app.php   
    apple-touch-icon.png  
    config.php  
    image.png  
    robots.txt 
    app_dev.php  
    bundles   
    favicon.ico  
    navigation.css 
    

    私のブラウザで「http://localhost:8080/」を開くと、(ほぼ)すべて正常です。PHPが実行されており、ページが表示されます(エラーは表示されません)。 しかし、何が動作していない:nginxを介して "navigation.css"のような静的ファイルの提供。 Chromeのwebdeveloper-toolbarは、Network-Tabの中で、常に「404 Not Found」 - 「navigation.css」のメッセージを取得します。

    http://localhost:8080/navigation.css私のブラウザで直接呼び出すと、Symfonyからエラーが表示されます。「GET /navigation.css」のルートが見つかりませんでした。

    これは、nginxが "navigation.css"を見つけられず、このパラメータをsymfony(app_dev.php)に渡し、フレームワークが "navigation"という名前のルートを探していることを意味します。 css "は存在しません。

    私の主な質問は、なぜnginxは静的ファイルを見ることができないのですか?つまり、静的ファイルと(提供される)phpファイルは同じディレクトリにあります。私は本当にこれを取得していない...うまくいけば、誰かが私の間違いを見ることができます。

  • 答えて

    0

    これは正しい動作です。

    あなたのNginxのコンテナは、ファイルをローカルで見つけることができません。静的ファイルをNginxのコンテナにマウントすることも、SymfonyとNginxのコンテナの間に共有ディレクトリをマウントすることもできます。

    これをテストするには、ファイル/ var/www/html/webを追加して、何が起こるかを確認してください。

    +0

    あなたは大歓迎です:それはうまくいきました。あなたは親切に答えを受け入れ、上向きの矢印をクリックしてください。 @ User5518 – Sergiu

    +0

    ありがとう! "docker-compose.yml"のnginxのこの新しい追加ボリューム構成では、動作しています: ' - 。/ web/static:/ var/www/html/web/static' – User5518

    +0

    (静的ファイルを "web/static"に移動しました) – User5518