Docker: Yii2-advanced

В этот раз попробуем собрать близкий к рабочему конфиг для связки php+nginx+mariadb и создадим новый проект на фреймворке Yii2 с шаблоном advanced и его последующей настройкой для работы в режиме разработки(development).

Структура папок будет примерно(опять же в будущем будет меняться в зависимости от требований):

Папки www/project, logs/, db/ пустые.

docker-compose.yml

version: '3'
services:
    nginx:
        image: nginx:latest
        ports:
            - "80:80"
            - "443:443"
        volumes:
            - ./images/nginx:/etc/nginx/conf.d
            - ./www:/var/www
            - ./logs:/var/log/nginx
    php:
        build: ./images/php
        volumes:
            - ./www:/var/www
    db:
        image: mariadb
        ports:
            - "3306:3306"
        volumes:
            - ./db:/var/lib/mysql
        environment:
            MYSQL_ROOT_PASSWORD: dbpass
    adminer:
        image: adminer
        restart: always
        ports:
            - "8080:8080"

images/nginx/project.conf

server {
    index index.php;
    server_name project;
    error_log  /var/log/nginx/error.log;
    access_log /var/log/nginx/access.log;

    set $base_root /var/www/project;
    root $base_root;

     location / {
        root $base_root/frontend/web;
        try_files $uri $uri/ /frontend/web/index.php$is_args$args;

        location ~ ^/.+\.(css|js|ico|png|jpe?g|gif|svg|ttf|mp4|mov|swf|pdf|zip|rar)$ {
            log_not_found off;
            access_log off;
            try_files $uri =404;
        }

        location ~ ^/assets/.+\.php(/|$) {
            deny all;
        }
    }

    location /admin {
        alias $base_root/backend/web/;

        location = /admin {
            try_files $uri /backend/web/index.php$is_args$args;
        }

        try_files $uri $uri/ /backend/web/index.php$is_args$args;

        location ~ ^/admin/.+\.(css|js|ico|png|jpe?g|gif|svg|ttf|mp4|mov|swf|pdf|zip|rar)$ {
            log_not_found off;
            access_log off;
            try_files $uri =404;
        }

        location ~ ^/admin/assets/.+\.php(/|$) {
            deny all;
        }
    }

    location ~ ^/.+\.php(/|$) {
        rewrite (?!^/((frontend|backend)/web|admin))^ /frontend/web$uri break;
        rewrite (?!^/backend/web)^/admin(/.+)$ /backend/web$1 break;

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

images/php/Dockerfile

# Main image
FROM php:7.2-fpm
# Author
MAINTAINER my <my@my.my>

# Update and install modules for php and other
RUN apt-get update &amp;&amp; apt-get install -y \		
		libfreetype6-dev \
		libjpeg62-turbo-dev \
		libpng-dev \
	&amp;&amp; apt-get install -y wget zip unzip \
	&amp;&amp; docker-php-ext-configure gd --with-freetype-dir=/usr/include/ --with-jpeg-dir=/usr/include/ \
	&amp;&amp; docker-php-ext-install -j$(nproc) gd pdo pdo_mysql
    
# Install composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer

# Install git
RUN apt-get install -y git

# Install phpunit
RUN wget https://phar.phpunit.de/phpunit-6.5.phar &amp;&amp; \
        chmod +x phpunit-6.5.phar &amp;&amp; \
        mv phpunit-6.5.phar /usr/local/bin/phpunit


# Install codecept
RUN wget http://codeception.com/codecept.phar &amp;&amp; \
        chmod +x codecept.phar &amp;&amp; \
        mv codecept.phar /usr/local/bin/codecept
 

# Add custom php.ini
ADD php.ini /usr/local/etc/php/conf.d/40-custom.ini

# Workdir for php
WORKDIR /var/www

# Run container
# The main purpose of a CMD is to provide defaults for an executing container. These defaults can include an executable, 
# or they can omit the executable, in which case you must specify an ENTRYPOINT instruction as well.
CMD ["php-fpm"]

Пишем sudo docker-compose up -d —build и ждем пока все установится. После смотрим какие контейнеры у нас запущены.

Заходим sudo docker exec -t -i work_php_1 /bin/bash и в папку проекта /var/www/ и выполняем установку Yii2 с зависимостями composer create-project —prefer-dist yiisoft/yii2-app-advanced project

Переходим в созданную папку project/ и выполняем php init

Идем в adminer http://127.0.0.1:8080 с данными root/dbpass и создаем новую базу данных(у меня для примера yii2advanced), запоминаем ее.

project/common/config/main-local.php указываем данные для подключения к БД.(самый простой способ apt-get install nano затем nano common/config/main-local.php). не забудьте указать host:db !

Меняем конфиг приложения yii2

project/frontend/config/main.php

'request' => ['baseUrl' => ''],        
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
		'' => 'site/index',
                '<controller:\w+>/<action:\w+>/' => '<controller>/<action>',
            ],
        ],

project/backend/config/main.php

'request' => [
            'baseUrl' => '/admin',
        ],
        'urlManager' => [
            'enablePrettyUrl' => true,
            'showScriptName' => false,
            'rules' => [
                '' => 'site/index',
            ],
        ],

Идем на http://127.0.0.1 админка http://127.0.0.1/admin/

Просмотров: 859