Yii2 in Docker: setting up a web server, installing Yii in a container

Lesson about running Yii2 in Docker. Let's set up the configs for Docker Compose and the nginx web server. Let's split the server into frontend and backend and install Yii directly into the container. Well, a bonus to the video is a ready-made repository on github with an accessible instruction on how to run Yii2 in Docker.
Discussion and questions in the group: t.me/danilovcodechat
News channel: t.me/danilovcode
⏰ Timestamps:
00:00 What is this lesson about?
00:46 Directory structure
01:52 Setting up Docker Compose
05:14 php-fpm image
07:18 Container launch
07:37 Installing Yii2 in a container
08:30 Setting up the Nginx web server
12:49 Working on bugs
Useful links:
Project template and configs: github.com/AndrewDanilov/dock...
Detailed tutorial on Docker basics: • Докер с нуля - практич...
Docker official site: www.docker.com/

Пікірлер: 61

  • @danilovcode
    @danilovcode10 ай бұрын

    Есть еще один способ очень быстро развернуть yii2 в контейнере. Кто знает?

  • @danilovcode

    @danilovcode

    10 ай бұрын

    Вот такой простой и быстрый способ поднять приложение yii2 в докере kzread.info/dash/bejne/aX6qs7SjYJCfmZM.html

  • @samvelkarapetyan5647
    @samvelkarapetyan5647Ай бұрын

    super

  • @inna_raznaya
    @inna_raznaya4 ай бұрын

    Отличное видео, всё очень понятно и по делу. Но я по крайней мере хоть немного по теме подготовлена, а вот те кто ничего про докер не знает явно должны немного базу подтянуть прежде чем смотреть это видео. Так что большое вам спасибо!

  • @danilovcode

    @danilovcode

    4 ай бұрын

    Спасибо за отзыв! Возможно учту этот момент и запишу в будущем видео для совсем новичков

  • @inndim
    @inndim4 ай бұрын

    Очень хорошо всё паказано, спасибо! Скажите пожалуйста, в linux ведь docker можно запустить только из-под root, а у вас в видео вроде обычный пользователь, или вы его сделали рутом?

  • @danilovcode

    @danilovcode

    4 ай бұрын

    Докер по-умолчанию запускает контейнеры от рута. Но управление можно осуществлять от любого пользователя, добавленного в группу docker. Просто добавьте вашего пользователя в группу: sudo usermod -aG docker your_username

  • @inndim

    @inndim

    4 ай бұрын

    @@danilovcode Понял, спасибо большое за подробности.

  • @vova_dev
    @vova_dev8 ай бұрын

    Классное видео! docker compose почему-то не через дефис в видео.

  • @danilovcode

    @danilovcode

    8 ай бұрын

    Спасибо! Все верно - compose теперь это плагин к утилите docker, вместо прежней отдельной утилиты docker-compose. И говорят, что docker-compose теперь тоже просто напросто вызывает docker с плагином compose

  • @mixdevuz
    @mixdevuz4 ай бұрын

    Огромное спасибо вам за видео. Как по мне у вас самое лучшее объяснение установки приложения php в Docker . Единственный вопрос : В compose.yml вы не прописываете version "*", это разве не объязательно прописывать?

  • @danilovcode

    @danilovcode

    4 ай бұрын

    Спасибо за отзыв! Параметр version считается устаревшим и оставлен для обратной совместимости. При его указании он игнорируется новыми версиями композа и может использоваться в информативных целях, чтобы вы сами знали какой набор возможностей был использован в yml файле. Докер же сам теперь определяет используемый набор возможностей по спецификации, которую можно найти на оф. сайте докера

  • @alexandr9900
    @alexandr990010 ай бұрын

    а как подключится к базе данных? Раз уж контейнер с mysql подняли, так ведь надо объяснить, как его использовать. Почему в контейнере mysql не прописаны порты? Может еще надо добавить контейнер типа PhpMyAdmin, для администрирования бд?

  • @danilovcode

    @danilovcode

    10 ай бұрын

    В качестве хоста указывайте имя контейнера (параметр container_name). Порты в mysql нужно пробрасывать только если планируете использовать доступ к базе извне, то есть с хостовой машины, а так для других контейнеров у mysql открыт стандартный порт 3306. Управление таблицами и данными в yii обычно производится с помощью миграций, но можно и добавить phpmyadmin, либо пробросить порты и использовать, например, phpstorm-овский клиент для баз данных.

  • @danilovcode

    @danilovcode

    10 ай бұрын

    Подробнее про mysql в докере в этом ролике было: kzread.info/dash/bejne/g2SD2aeEpNHJgMY.html Для yii все по аналогии точно также работает.

  • @mailforigo

    @mailforigo

    4 ай бұрын

    @@danilovcode вот тут очень хотелось бьі наглядности

  • @soloveyptichka7
    @soloveyptichka710 ай бұрын

    будет видео с yii2-starter-kit?

  • @danilovcode

    @danilovcode

    10 ай бұрын

    Пока не планировал. Вроде бы там и рассказывать нечего) Просто предустановлены некоторые расширения. ничего особенного и не расскажешь. Я для себя понял, что проще поставить yii с нуля и уже к нему добавить все необходимые расширения, тем более делается это простым добавлением их в composer.json. Чем ставить стратер-киты и потом обновлять их или удалять ненужное. Но я подумаю еще, может и будет видео.

  • @user-zt3zw1pv5x
    @user-zt3zw1pv5xАй бұрын

    Так, насчёт команд RUN А если у нас не deb дистрибутив? Прописывать команды установки в зависимости от дистра? Интересно как-то. Получается мы это сможем запустить только на Убунту и подобных дистрах? Или там своя виртуалка в Докере? Тогда в чём цимес контейнеров вообще не ясно

  • @danilovcode

    @danilovcode

    Ай бұрын

    Докер устанавливается на любые linux дистрибутивы и все образы будут одинаково работать. Для винды и мака есть docker desktop с виртуалкой

  • @user-zt3zw1pv5x

    @user-zt3zw1pv5x

    Ай бұрын

    @@danilovcode Разобрался, всё поднял по вашему уроку и дополнительно пропылесосил документации. Спасибо)

  • @user-pe2ll9tb8j
    @user-pe2ll9tb8j7 ай бұрын

    После установки yii, команда php init возвращает "Could not open input file: init", я так понимаю для yii basic это норма? Потому что в advance "php init" работает

  • @danilovcode

    @danilovcode

    7 ай бұрын

    У basic-шаблона нет команды инициализации. Он идет сразу со всеми необходимыми файлами, которые в advanced-шаблоне копируются командой init отдельно в зависимости от выбранной среды (development или production) из папки environment. В advanced это файлы точек входа (web/index.php), файлы локальной конфигурации (main-local.php) и другие.

  • @vova_dev
    @vova_dev8 ай бұрын

    Появляется ошибка: Root package 'isszz/rotate-captcha' cannot require itself in its composer.json Собрал контейнеры по приведенным примером. Пробую github проект isszz/rotate-captcha. Там есть composer. Команда composer require isszz/rotate-captcha -vvv наверное должна была подкачать зависимости. Но заканчивается приведенной ошибки. Подскажите, пожалуйста, что сделать?

  • @danilovcode

    @danilovcode

    8 ай бұрын

    Похоже что вы запускаете composer require непосредственно из папки rotate-captcha, предварительно ее скачав. А нужно запускать из корневой папки вашего проекта, куда вы хотите это расширение подключить. Возможно я не прав, нужно больше контекста. Я ответил вам также в t.me/danilovcodechat - можете там продолжить беседу.

  • @kinofan_org
    @kinofan_org9 ай бұрын

    Странный немного урок, а откуда у меня php возмется на ПК (macos), получается, что уже в самом начале невозможно идти дальше по уроку

  • @danilovcode

    @danilovcode

    9 ай бұрын

    PHP у вас будет в контейнере докера. Как установить докер и что это такое, смотрите в этом уроке: kzread.info/dash/bejne/g2SD2aeEpNHJgMY.html

  • @mailforigo
    @mailforigo4 ай бұрын

    для работьі необходимо подключиться к БД. Покажите как делается. Пока получаем ошибки, хотя миграции проходят. Но иде-шку настроить или mysql-workbench не получается((

  • @danilovcode

    @danilovcode

    4 ай бұрын

    Подробнее про докер тут: kzread.info/dash/bejne/g2SD2aeEpNHJgMY.html - здесь мы phpmyadmin добавили в compose. Тут про подключение к mysql из phpstorm: kzread.info/dash/bejne/Z2pnsJieir21aJM.html

  • @user-qc2zt8eo6s
    @user-qc2zt8eo6s3 ай бұрын

    Спасибо. Урок хороший, но почему то контейнер с mysql постоянно перезапускается так что даже к терминалу контейнера не получается подключиться 🥲

  • @danilovcode

    @danilovcode

    3 ай бұрын

    Спасибо за отзыв! Смотрите логи контейнера. Наверняка какая-то ошибка там

  • @user-qc2zt8eo6s

    @user-qc2zt8eo6s

    3 ай бұрын

    @@danilovcodeСпасибо за ответ. Получилось посмотреть логи и тут такая ошибка: [InnoDB] Cannot create redo log files because data files are corrupt or the database was not shut down cleanly after creating the data files. [InnoDB] Plugin initialization aborted with error Generic error.

  • @danilovcode

    @danilovcode

    3 ай бұрын

    Скиньте yml конфиг композа который вы используете и текст этой ошибки в группу телеграм t.me/danilovcodechat, попробуем разобраться

  • @vviktor72
    @vviktor728 ай бұрын

    Доброго времени при создании проекта с помощью composer ошибка Permission denied файлы брал с репозитория

  • @danilovcode

    @danilovcode

    8 ай бұрын

    Скиньте текст ошибки. На какой конкретно файл/каталог ругается? Вы зашли в консоль контейнера или выполняете с хост-машины?

  • @vviktor72

    @vviktor72

    8 ай бұрын

    @@danilovcode удаляется все что я отвечаю может почта?

  • @vviktor72

    @vviktor72

    8 ай бұрын

    отослал на коммерческую почту заранее извиняюсь

  • @danilovcode

    @danilovcode

    8 ай бұрын

    > Cannot create cache directory /var/www/.composer/cache/repo/https---repo.packagist.org/, or directory is not writable Эту ошибку можно игнорировать - это кэш композера, он может и без него, а если не хочется игнорировать, то можно создать директорию .composer в каталоге рядом с yml файлом и добавить volume в yml: ./.composer:/var/www/.composer Еще один способ убрать ошибку, это запускать композер от имени root. Для этого в докерфайле уберите строку USER "1000:1000". Она нужна для для того чтобы в консоли работать от имени этого пользователя > In ProjectInstaller.php line 69: mkdir(): Permission denied А тут недостаточно прав чтобы писать в директорию с вашим приложением. С помощью утилиты id проверьте какой id у вашего пользователя на хостовой машине. Если он не 1000, то в Dockerfile нужно подставить правильное значение. Здесь также можно убрать строку USER "1000:1000", но айдишник все равно должен быть правильный, иначе композер то сработает, а вот веб-сервер работать уже не захочет.

  • @vviktor72

    @vviktor72

    8 ай бұрын

    @@danilovcode был id 1001 все заработало! Спасибо

  • @user-mi5jm4hj6h
    @user-mi5jm4hj6h6 ай бұрын

    8:08 composer не выполняется внутри контейнера, пишет, что его нет. Вне контейнера composer есть и установлен глобально. Что можно сделать?

  • @danilovcode

    @danilovcode

    6 ай бұрын

    Можно пользоваться внешним композером, но чтобы зависимости формировались правильно, нужно, чтобы версия php и снаружи контейнера и внутри была одинаковой. А можно установить композер в контейнер.

  • @user-mi5jm4hj6h

    @user-mi5jm4hj6h

    6 ай бұрын

    @@danilovcode запустил из репозитория. Всё работает. Хотел связаь проет из видео по основам Docker и установкой Yii2. Но, не вышло. По какой-то причине внутрь в контейнер входил не под 1000, а под root. Ощущение, что образ Dockerfile просто не построился, соответственно ни Composer, ни user 1000 не подключились. Благодарю за оперативную обратную связь, урок и репозиторий. Всего доброго.

  • @danilovcode

    @danilovcode

    6 ай бұрын

    Если еще есть желание разобраться, подключайтесь к чату t.me/danilovcodechat - напишите ваш вопрос со скринами или сходным кодом Dockerfile. Если через docker compose запускаете, то и его конфиг тоже приложите скрином или через codepad какой-нибудь. Попробуем разобраться вместе.

  • @user-mi5jm4hj6h

    @user-mi5jm4hj6h

    6 ай бұрын

    @@danilovcode да, сейчас подключусь.

  • @user-zj1cb7cz3f
    @user-zj1cb7cz3f9 ай бұрын

    Хелп плиз, как пофиксить Either GD PHP extension with FreeType support or ImageMagick PHP extension with PNG support is required.? Покажите еще как добавить xdebug в конфиг, спасибо Вам!

  • @danilovcode

    @danilovcode

    9 ай бұрын

    В докерфайле: # php-gd dependencies RUN apt-get update && apt-get install -y --no-install-recommends \ libpng-dev \ libjpeg-dev \ libwebp-dev \ libfreetype-dev \ libgd-dev # php-gd configure RUN docker-php-ext-configure gd --with-jpeg --with-webp --with-freetype && docker-php-ext-configure intl # php-gd install RUN docker-php-ext-install -j$(nproc) gd

  • @danilovcode

    @danilovcode

    9 ай бұрын

    На счет xdebug будет отдельный ролик!

  • @user-zj1cb7cz3f

    @user-zj1cb7cz3f

    9 ай бұрын

    Спасибо большое!@@danilovcode

  • @user-pe2ll9tb8j

    @user-pe2ll9tb8j

    7 ай бұрын

    @@danilovcode не срабатывает

  • @danilovcode

    @danilovcode

    7 ай бұрын

    @@user-pe2ll9tb8j Что не срабатывает?

  • @user-hc5ji8qd6w
    @user-hc5ji8qd6w10 ай бұрын

    Ни чего не ясно. Вот я создал yii и докер у меня есть, что делать? а нихрена не ясно

  • @danilovcode

    @danilovcode

    10 ай бұрын

    Yii в контейнере установили или отдельно? Сайт в браузере открывается?

Келесі