Docker Yii2 - uniqcle/Yii2 GitHub Wiki
Создаем папку с проектом, напр. yii2
https://github.com/uniqcle/Docker/tree/master/yii2
В ней
docker # файлы конфигурации Docker
web # файлы с проектом
docker-compose.yml # билдим его
Dockerfile
#инструкция FROM - указывает на базе какого обараза будем собирать наш контейнер.
FROM ubuntu:latest
#инструкция RUN - указывает какую команду нужно выполнить внутри образа. обновим индекс пакетов
RUN apt-get update
RUN apt-get install -y apache2 apache2-utils curl gnupg wget
RUN a2enmod rewrite
#Инструкция ENV задает переменные окружения с именем <key> и значением <value>.
#Это значение будет находиться в окружении всех команд потомков Dockerfile и могут быть использованы как обычные переменные окружения.
ENV TZ=Europe/Moscow
#указываем временную зону для нашего образа.
RUN ln -snf /usr/share/zoneinfo/$TZ /etc/localtime && echo $TZ > /etc/timezone
RUN apt-get install -y git python3 perl \
php nano
#устанавливаем php расширения
RUN apt-get install -y \
php-pdo php-pdo-mysql \
php7.2-mysql \
php-mbstring php-tokenizer \
php-xml php-simplexml php-zip \
php-opcache php-iconv php-intl \
php-json php-gd php-ctype php-oauth \
php-apcu php-imagick php-xdebug \
php-memcached php-ftp php-imap \
php-curl iputils-ping
# Install Composer
RUN curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
#после завершения установок всех пакетов - обновим индекс
RUN apt-get update
#откроем 80 порт
EXPOSE 80
#добавим в контейнер конфигурационный файл php.ini, расположим его на стаднатрном для ubuntu месте
ADD ./docker/conf/php/php.ini /etc/php/7.2/apache2/php.ini
#обязательно добавим конфигурации xdebug
ADD ./docker/conf/php/xdebug.ini /etc/php/7.2/mods-available/xdebug.ini
#добавим в контейнер конфигурационный файл для apache, расположим его на стаднатрном для ubuntu месте
ADD ./docker/conf/apache/apache2.conf /etc/apache2/apache2.conf
#удалим содержащиеся файлы в этих папках, потому что вскоре там будут наши
RUN rm -R /etc/apache2/sites-enabled/* /etc/apache2/sites-available/* /var/www/*
#добавим конфигурацонный файл для виртуального сервера
ADD ./docker/conf/apache/yii2frontend.loc.conf /etc/apache2/sites-enabled/yii2frontend.loc.conf
#укажим дирректорию /var/www как рабочую
WORKDIR /var/www
#запускаем процес apache2 в нормальном режиме (На переднем плане).
#Пока живет это процесс, живет и контейнер.
CMD ["/usr/sbin/apache2ctl", "-D", "FOREGROUND"]
apache2.conf
# /etc/apache2/apache2.conf
Mutex file:${APACHE_LOCK_DIR} default
PidFile ${APACHE_PID_FILE}
Timeout 300
KeepAlive On
MaxKeepAliveRequests 100
KeepAliveTimeout 5
User ${APACHE_RUN_USER}
Group ${APACHE_RUN_GROUP}
HostnameLookups Off
ErrorLog ${APACHE_LOG_DIR}/error.log
LogLevel warn
Listen 80
AccessFileName .htaccess
IncludeOptional mods-enabled/*.load
IncludeOptional mods-enabled/*.conf
IncludeOptional conf-enabled/*.conf
LogFormat "%v:%p %h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" vhost_combined
LogFormat "%h %l %u %t \"%r\" %>s %O \"%{Referer}i\" \"%{User-Agent}i\"" combined
LogFormat "%h %l %u %t \"%r\" %>s %O" common
LogFormat "%{Referer}i -> %U" referer
LogFormat "%{User-agent}i" agent
<Directory />
Options -FollowSymLinks
AllowOverride None
Require all denied
Options -Indexes
</Directory>
<Directory /var/www/>
Options FollowSymLinks
AllowOverride None
Require all granted
Options -Indexes
</Directory>
<FilesMatch "^\.ht">
Require all denied
</FilesMatch>
IncludeOptional sites-enabled/*.conf
yii2frontend.loc.conf
<VirtualHost *:80>
ServerName yii2frontend.loc
ServerAdmin webmaster@localhost
DocumentRoot /var/www/web/frontend/web
<Directory "/var/www/web/frontend/web">
RewriteEngine on
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . index.php
</Directory>
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>
docker-compose.yml
version: '3'
services:
webserver:
container_name: apache-php-yii2
build:
context: ./
dockerfile: ./docker/Dockerfile
environment:
XDEBUG_CONFIG: remote_host=host.docker.internal
PHP_IDE_CONFIG: serverName=localhost
ports:
- 80:80
volumes:
- ./:/var/www
links:
- db
depends_on:
- db
db:
container_name: mysql-yii2
image: 'mysql:latest'
command: --default-authentication-plugin=mysql_native_password
restart: always
ports:
- 9513:3306
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: yii2advanced
MYSQL_USER: mysqluser
MYSQL_PASSWORD: mysqluser
volumes:
- ./docker/database:/var/lib/mysql
В Dockerfile
...
ADD ./docker/conf/apache/yii2frontend.loc.conf /etc/apache2/sites-enabled/yii2frontend.loc.conf
...
В файл [назв_сайта].loc.conf
<VirtualHost *:80>
ServerName [назв_сайта].loc
ServerAdmin webmaster@localhost
DocumentRoot /var/www/web/frontend/web
<Directory "/var/www/web/frontend/web">
...
Также не забываем добавлять для admin.[назв_сайта].loc.conf
На локальной машине не забываем в hosts
Заходим в папку с проектом yii
docker-compose build --no-cache
docker-compose up -d
login: root
password: password
Правим файл конфига common/config/main-local.php
mysql:host=db:3306;dbname=yii2advanced
return [
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=db:3306;dbname=yii2advanced',
'username' => 'root',
'password' => 'password',
'charset' => 'utf8',
],
'mailer' => [
'class' => 'yii\swiftmailer\Mailer',
'viewPath' => '@common/mail',
// send all mails to a file by default. You have to set
// 'useFileTransport' to false and configure a transport
// for the mailer to send real emails.
'useFileTransport' => true,
],
],
];
Заходим в контейнер и php yii migrate