yii2 docker-compose.yml

На старте уже должны стоять docker, docker-compose, php и php-composer.

Создаем папку с проектом и в ней папку docker.


mkdir lk_site

cd lk_site && mkdir docker

cd docker


В папке docker создаем файл docker-compose.yml для поднятия окружения разработки.


vim docker-compose.yml

 

start____________________________________________________________

# Последняя версия docker-compose

version: '3'


# Создаем общую сеть deafult для всех контейнеров

networks:

  default:

    driver: bridge

services:

  web:

    build: ./web

    # Подключаем к общей сети с другими контейнерами

    networks: 

       - default

    # Запускаем только после db

    depends_on: 

      - db    

    # Линкуем внешнюю папку с исходниками внутрь

    volumes:

      - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}

      - "../conf/apache2:/etc/apache2/sites-available"

    ports:

      - 8085:80

    working_dir: ${APP_PATH_CONTAINER}

  db:

    image: mariadb

    # Подключаем к общей сети с другими контейнерами

    networks: 

      - default

    restart: always

    environment:

      MARIADB_ROOT_PASSWORD: example

      MARIADB_DATABASE: yii2db

      MARIADB_USER: userdb

      MARIADB_PASSWORD: secret

    volumes:

      - ${DB_PATH_HOST}:/var/lib/mysql

  adminer:

    image: adminer

    restart: always

    ports:

      - 8088:8080 

  composer:

    image: composer:2.0.8

    volumes:

      - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}

    working_dir: ${APP_PATH_CONTAINER}

    command: composer install

  nvim:

    build: ./nvim

    tty: true

    volumes:

      - ${APP_PATH_HOST}:${APP_PATH_CONTAINER}

    working_dir: ${APP_PATH_CONTAINER}


end____________________________________________________________

    

В папке docker создаем файл .ENV

vim .ENV


start____________________________________________________________

#PATHS

DB_PATH_HOST= ../databases

APP_PATH_HOST= ../www

APP_PATH_CONTAINER= /var/www/html/

end____________________________________________________________


В папке web создаем файл конфигурации нашего контейнера Dockerfile.

    

mkdir web

cd web


vim Dockerfile


start____________________________________________________________

FROM php:7.4-apache


# Install system dependencies

RUN apt-get update && apt-get install -y \

    curl \

    libpng-dev \

    libonig-dev \

    libxml2-dev \

    zip \

    unzip


# Clear cache

RUN apt-get clean && rm -rf /var/lib/apt/lists/*


# Install PHP extensions

RUN docker-php-ext-install pdo_mysql mbstring exif pcntl bcmath gd

# gd with-freetype требуется для капчи в yii2. После для проверки "php -r 'var_dump(gd_info());'"

RUN docker-php-ext-configure gd --with-freetype   && docker-php-ext-install gd


WORKDIR /var/www/html/

end____________________________________________________________


В папке nvim создаем файл конфигурации нашего контейнера Dockerfile astronvim.

    

cd .. && mkdir nvim

cd nvim


vim Dockerfile


start____________________________________________________________

FROM alpine:edge


# Install system dependencies

RUN apk add bash git lua nodejs npm lazygit bottom python3 go neovim ripgrep alpine-sdk --update


RUN git clone https://github.com/AstroNvim/AstroNvim ~/.config/nvim


RUN nvim --headless -c "autocmd User PackerComplete quitall"


WORKDIR /var/www/html/

end____________________________________________________________



Для apache2 создаем папку lk_site/conf/apache2 и файл 000-default.conf в ней. Файлик может изменяться, в зависимости от того, как вы хотите настроить apache2 на своем проекте. Его можно менять локально, т.к. он подключается через volume. Но надо не забывать внутри контейнера перезагружать apache2: service apache2 reload


cd ../.. && mkdir conf

cd conf && mkdir apache2

cd apache2


vim 000-default.conf


start____________________________________________________________

<VirtualHost *:80>                                                                              

        ServerName lk.site.ru


        ServerAdmin webmaster@localhost

        DocumentRoot /var/www/html


        ErrorLog ${APACHE_LOG_DIR}/error.log

        CustomLog ${APACHE_LOG_DIR}/access.log combined

        #Include conf-available/serve-cgi-bin.conf

</VirtualHost>

end____________________________________________________________


Все команды выполняются из корневой папки.


cd ..


Выполняем команду создания проекта:

composer create-project --prefer-dist yiisoft/yii2-app-advanced:2.0.47 www


В файле composer.json меняем это

    "repositories": [

        {

            "type": "composer",

            "url": "https://asset-packagist.org"

        }

    ]

на это

    "repositories": [

        {

            "type": "composer",

            "url": "https://asset-packagist.org",

            "options": {

            "ssl": {

          "verify_peer": false

            }

            }

        }

    ]


Запускаем окружение:

docker-compose -f docker/docker-compose.yml up -d --build


Инициализируем проект:

www/init --env=Development --overwrite=All


Открываем в редакторе файл www/common/config/main-local.php и заполняем его данными для подключения к БД.


Подключаемся к контейнеру:

docker exec -it docker_web_1 bash


Выполняем команду миграции БД:

php /var/www/html/yii migrate


Создаем папку для логов mkdir /var/www/html/log


И выходим exit



Тормозим сервис:

docker-compose -f docker/docker-compose.yml down


Запускаем его заново:

docker-compose -f docker/docker-compose.yml up -d


Открываем localhost:8085 в браузере и смотрим на новый сайт.


Шпаргалка:

Из папки doker

docker-compose ps - вывести список контенеров в папке docker

docker-compose stop web

docker-compose stop db

docker-compose rm web - удуалить



Применение

Основные команды для Docker:


docker-compose up -d

чтобы запустить все службы в вашем стеке в фоновом режиме


docker-compose ps

вывести список запущенных сервисов


docker-compose logs -f

просматривать журналы для всех служб, непрерывно


docker-compose stop

чтобы изящно остановить все службы в вашем стеке


docker-compose kill

немедленно остановить все службы в вашем стеке


docker-compose down -v

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


Для запуска команд в контейнере


docker-compose run --rm web composer install

запускает установку композитора в новом контейнере


docker-compose exec web bash

выполняет bash в запущенной php службе

Комментариев нет :

Отправить комментарий

Поиск по этому блогу