Laravel с Docker-Compose - PullRequest
       2

Laravel с Docker-Compose

0 голосов
/ 28 февраля 2019

Я пытаюсь создать образ PHP, Apache, MySQL для приложения Laravel, используя Docker.Это мое первое приложение Docker.

При запуске docker-compose up -d в браузере появляются следующие ошибки:

enter image description here


Это мой файл docker-compose.yml:

version: "3"
services:

webserver:
    build: 
    context: ./bin/webserver
    container_name: 'webserver'
    restart: 'always'
    ports:
    - "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"
    - "${HOST_MACHINE_SECURE_HOST_PORT}:443"
    links: 
    - mysql
    volumes: 
    - ${DOCUMENT_ROOT-./www}:/var/www/html
    - ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
    - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
    - ${LOG_DIR-./logs/apache2}:/var/log/apache2
    networks:
    - app-network

mysql:
    build: ./bin/mysql
    container_name: 'mysql'
    restart: 'always'
    ports:
    - "${HOST_MACHINE_MYSQL_PORT}:3306"
    volumes: 
    - ${MYSQL_DATA_DIR-./data/mysql}:/var/lib/mysql
    - ${MYSQL_LOG_DIR-./logs/mysql}:/var/log/mysql
    environment:
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    MYSQL_DATABASE: ${MYSQL_DATABASE}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    networks:
    - app-network

phpmyadmin:
    image: phpmyadmin/phpmyadmin
    container_name: 'phpmyadmin'
    links:
    - mysql
    environment:
    PMA_HOST: mysql
    PMA_PORT: 3306
    PMA_USER: ${MYSQL_USER}
    PMA_PASSWORD: ${MYSQL_PASSWORD}
    MYSQL_ROOT_PASSWORD: ${MYSQL_ROOT_PASSWORD}
    MYSQL_USER: ${MYSQL_USER}
    MYSQL_PASSWORD: ${MYSQL_PASSWORD}
    ports:
    - '8080:80'
    volumes: 
    - /sessions
    networks:
    - app-network

networks:
    app-network:
        driver: bridge

volumes:
    dbdata:
        driver: local

Это мой файл .env:

DOCUMENT_ROOT=./vbs-master/public
VHOSTS_DIR=./config/vhosts
APACHE_LOG_DIR=./logs/apache2
PHP_INI=./config/php/php.ini
MYSQL_DATA_DIR=./data/mysql
MYSQL_LOG_DIR=./logs/mysql

HOST_MACHINE_UNSECURE_HOST_PORT=80
HOST_MACHINE_SECURE_HOST_PORT=443

HOST_MACHINE_MYSQL_PORT=3306

MYSQL_ROOT_PASSWORD=rootroot
MYSQL_USER=root
MYSQL_PASSWORD=rootroot
MYSQL_DATABASE=dockertest

Это мой бин /webserver / Dockerfile:

FROM php:5.6-apache

RUN apt-get -y update && apt-get upgrade -y

# Install tools && libraries
RUN apt-get -y install --fix-missing apt-utils nano wget dialog \
    build-essential git curl libcurl3 libcurl3-dev zip \
    libmcrypt-dev libsqlite3-dev libsqlite3-0 mysql-client \
    zlib1g-dev libicu-dev libfreetype6-dev libjpeg62-turbo-dev libpng-dev \
    && rm -rf /var/lib/apt/lists/*

# Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# PHP5 Extensions
RUN docker-php-ext-install curl \
    && docker-php-ext-install tokenizer \
    && docker-php-ext-install json \
    && docker-php-ext-install mcrypt \
    && docker-php-ext-install pdo_mysql \
    && docker-php-ext-install pdo_sqlite \
    && docker-php-ext-install mysqli \
    && docker-php-ext-install zip \
    && docker-php-ext-install -j$(nproc) intl \
    && docker-php-ext-install mbstring \
    && docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
    && docker-php-ext-install -j$(nproc) gd \
    && pecl install xdebug-2.5.5 && docker-php-ext-enable xdebug \
    && echo "xdebug.remote_enable=1" >> /usr/local/etc/php/php.ini

# Enable apache modules
RUN a2enmod rewrite headers

EXPOSE 80

ENTRYPOINT ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]

Дерево каталогов файлов:

enter image description here


Моя конфигурация / vhosts / default.conf файл:

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/html"
    ServerName localhost
    <Directory "/var/www/html/">
        AllowOverride all
    </Directory>
</VirtualHost>

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Как подсказал @thiago, вам нужно смонтировать все ваше приложение в свой контейнер, поэтому измените службу webserver следующим образом:

webserver:
    build: 
    context: ./bin/webserver
    container_name: 'webserver'
    restart: 'always'
    ports:
    - "${HOST_MACHINE_UNSECURE_HOST_PORT}:80"
    - "${HOST_MACHINE_SECURE_HOST_PORT}:443"
    links: 
    - mysql
    volumes: 
    - ${APP_ROOT-./app}:/var/www/html # Here you may mount the root project of your application
    - ${PHP_INI-./config/php/php.ini}:/usr/local/etc/php/php.ini
    - ${VHOSTS_DIR-./config/vhosts}:/etc/apache2/sites-enabled
    - ${LOG_DIR-./logs/apache2}:/var/log/apache2
    networks:
    - app-network

И добавьте это в свой .env файл

APP_ROOT=./vbs-master

И последнее, но не менее важное: укажите папку DocumentRoot на public, внесите изменения в файл config/vhosts/default.conf

<VirtualHost *:80>
    ServerAdmin webmaster@localhost
    DocumentRoot "/var/www/html/public"
    ServerName localhost
    <Directory "/var/www/html/public">
        AllowOverride all
    </Directory>
</VirtualHost>

ПРИМЕЧАНИЕ : Убедитесь, что вы выполнили composer install перед запуском приложения.

0 голосов
/ 28 февраля 2019

Вам необходимо установить значение DOCUMENT_ROOT=./vbs-master/, иначе ваш контейнер будет иметь доступ только к общедоступной папке, но проекту Laravel необходим доступ к родительскому каталогу.

Вам необходимо изменить конфигурацию Apache напоищите index.php внутри /var/www/html/public затем.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...