Структура проекта окончательно загнана в Docker

Дегрейд PHP до 7.0 (всё таки без xdebug немного больно)
Дегрейд Node.js до 5.12 (на 6.5 не собирался фронт)
Упразднён app-console контейнер (он теперь живёт внутри основного php контейнера и рулится силами supervisor)
Упразднён node-dev-server (всё равно он работал плохо)
Фикс бага в ConfigLoader (не загружал config-{env} файлы)
Исправлена ошибка в LangMenu (двойной default экспорт)
Из package.json временно удалён PhantomJS
Обновлён README.md
This commit is contained in:
ErickSkrauch 2016-10-02 01:20:40 +03:00
parent 8120e43bec
commit 53ca5915f7
18 changed files with 515 additions and 158 deletions

View File

@ -3,10 +3,9 @@
# vendor будет заполнен уже внутри контейнера
vendor
# node_modules для этого контейнера не нужны
# Всё, что динамично на фронте
frontend/node_modules
frontend/webpack/node_modules
frontend/scripts/node_modules
frontend/dist
# Все временные файлы
*/runtime

29
.gitignore vendored
View File

@ -1,37 +1,22 @@
# phpstorm project files
.idea
# netbeans project files
nbproject
# zend studio for eclipse project files
.buildpath
.project
.settings
# windows thumbnail cache
Thumbs.db
# composer vendor dir
# Composer
/vendor
# composer itself is not needed
/composer.phar
/composer.lock
# Mac DS_Store Files
.DS_Store
# phpunit itself is not needed
phpunit.phar
# local phpunit config
/phpunit.xml
# npm debug
npm-debug*
# Docker override file
docker-compose.override.yml
# Docker и его override файлы
/docker-compose.yml
/docker-compose.override.yml
# Локальный .env
/.env
# id_rsa
/id_rsa

View File

@ -1,8 +1,8 @@
FROM php:7.1-fpm
FROM php:7.0-fpm
ENV PATH $PATH:/root/.composer/vendor/bin
# PHP extensions come first, as they are less likely to change between Yii releases
# Сначала настраиваем всё, что нам нужно на системном уровне
RUN apt-get update \
&& apt-get -y install \
git \
@ -10,46 +10,53 @@ RUN apt-get update \
libicu-dev \
libmcrypt-dev \
zlib1g-dev \
bzip2 \
libbz2-dev \
liblzma-dev \
xz-utils \
openssh-server \
supervisor \
--no-install-recommends \
--force-yes \
# Install PHP extensions
# PHP расширения
&& docker-php-ext-install intl \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mbstring \
&& docker-php-ext-install mcrypt \
&& docker-php-ext-install zip \
&& docker-php-ext-install bcmath \
&& docker-php-ext-install opcache \
&& apt-get purge -y g++ \
&& apt-get autoremove -y \
&& rm -r /var/lib/apt/lists/* \
# Don't clear our valuable environment vars in PHP
# Отключаем сброс глобальных env переменных внутри PHP
&& echo "\nclear_env = no" >> /usr/local/etc/php-fpm.conf \
# Fix write permissions with shared folders
# Фикс прав на запись для расшаренных папок
&& usermod -u 1000 www-data
# copy-paste from https://github.com/nodejs/docker-node/blob/910443c39c80291f0bf24712d8d94279cf15b7b5/6.5/wheezy/Dockerfile
# Копипаста из https://github.com/nodejs/docker-node/blob/50b56d39a236fd519eda2231757aa2173e270807/5.12/Dockerfile
# gpg keys listed at https://github.com/nodejs/node
RUN set -ex \
&& for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
&& for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
ENV NPM_CONFIG_LOGLEVEL info
ENV NODE_VERSION 6.5.0
ENV NODE_VERSION 5.12.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
@ -59,44 +66,84 @@ RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
# Поставим xdebug отдельно, т.к. потом его потенциально придётся отсюда убирать
# фиксируем версию, т.к. 2.4.1 не собирается под 7.1
RUN yes | pecl install xdebug-2.4.0 \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.default_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_mode=req" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.cli_color=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.var_display_max_depth=10" >> /usr/local/etc/php/conf.d/xdebug.ini
ENV COMPOSER_NO_INTERACTION 1
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_DISCARD_CHANGES true
# Next composer and global composer package, as their versions may change from time to time
# Composer и его глобальные зависимости
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer.phar \
&& echo '{"github-oauth": {"github.com": "***REMOVED***"}}' > ~/.composer/auth.json \
&& composer.phar global require --no-progress "hirak/prestissimo:>=0.3.1"
&& composer.phar global require --no-progress "hirak/prestissimo:>=0.3.4"
COPY ./docker/php/composer.sh /usr/local/bin/composer
RUN chmod a+x /usr/local/bin/composer
# Конфиг для php
COPY ./docker/php/php.ini /usr/local/etc/php/
# Конфиг для supervisor
COPY ./docker/php/supervisord.conf /etc/supervisord.conf
# wait-for-it
COPY ./docker/wait-for-it.sh /usr/local/bin/wait-for-it
# Наша кавайная точка входа
COPY ./docker/php/entrypoint.sh /usr/local/bin/
RUN chmod a+x /usr/local/bin/composer \
&& chmod a+x /usr/local/bin/entrypoint.sh \
&& chmod a+x /usr/local/bin/wait-for-it \
&& ln -s /usr/local/bin/entrypoint.sh / \
&& mkdir /root/.ssh
COPY id_rsa /root/.ssh
# Включаем поддержку ssh
RUN eval $(ssh-agent -s) \
&& ssh-add /root/.ssh/id_rsa \
&& touch /root/.ssh/known_hosts \
&& ssh-keyscan gitlab.com >> /root/.ssh/known_hosts
WORKDIR /var/www/html
# Custorm php configuration
COPY ./docker/php/php.ini /usr/local/etc/php/
# Копируем composer.json в родительскую директорию, которая не будет синкатся с хостом через
# volume на dev окружении. В entrypoint эта папка будет скопирована обратно.
COPY ./composer.json /var/www/composer.json
# Copy the working dir to the image's web root
# Устанавливаем зависимости PHP
RUN cd .. \
&& composer install --no-interaction --no-suggest --no-dev --optimize-autoloader \
&& cd -
# Устанавливаем зависимости для Node.js
# Делаем это отдельно, чтобы можно было воспользоваться кэшем, если от предыдущего билда
# ничего не менялось в зависимостях
RUN mkdir -p /var/www/frontend
COPY ./frontend/package.json /var/www/frontend/
COPY ./frontend/scripts /var/www/frontend/scripts
COPY ./frontend/webpack-utils /var/www/frontend/webpack-utils
RUN cd ../frontend \
&& npm install \
&& cd -
# Наконец переносим все сорцы внутрь контейнера
COPY . /var/www/html
# The following directories are .dockerignored to not pollute the docker images
# with local logs and published assets from development. So we need to create
# empty dirs and set right permissions inside the container.
RUN mkdir -p api/runtime api/web/assets console/runtime \
&& chown www-data:www-data api/runtime api/web/assets console/runtime
&& chown www-data:www-data api/runtime api/web/assets console/runtime \
# Билдим фронт
&& cd frontend \
&& ln -s /var/www/frontend/node_modules $PWD/node_modules \
&& npm run build \
&& rm node_modules \
# Копируем билд наружу, чтобы его не затёрло volume в dev режиме
&& cp -r ./dist /var/www/dist \
&& cd -
# Expose everything under /var/www (vendor + html)
VOLUME ["/var/www"]
# Экспозим всё под /var/www/html для дальнейшей связки с nginx
VOLUME ["/var/www/html"]
ENTRYPOINT ["entrypoint.sh"]
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]

162
Dockerfile-dev Normal file
View File

@ -0,0 +1,162 @@
FROM php:7.0-fpm
ENV PATH $PATH:/root/.composer/vendor/bin
# Сначала настраиваем всё, что нам нужно на системном уровне
RUN apt-get update \
&& apt-get -y install \
git \
g++ \
libicu-dev \
libmcrypt-dev \
zlib1g-dev \
bzip2 \
libbz2-dev \
liblzma-dev \
xz-utils \
openssh-server \
supervisor \
--no-install-recommends \
--force-yes \
# PHP расширения
&& docker-php-ext-install intl \
&& docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mbstring \
&& docker-php-ext-install mcrypt \
&& docker-php-ext-install zip \
&& docker-php-ext-install bcmath \
&& docker-php-ext-install opcache \
&& apt-get purge -y g++ \
&& apt-get autoremove -y \
&& rm -r /var/lib/apt/lists/* \
# Отключаем сброс глобальных env переменных внутри PHP
&& echo "\nclear_env = no" >> /usr/local/etc/php-fpm.conf \
# Фикс прав на запись для расшаренных папок
&& usermod -u 1000 www-data
# Копипаста из https://github.com/nodejs/docker-node/blob/50b56d39a236fd519eda2231757aa2173e270807/5.12/Dockerfile
# gpg keys listed at https://github.com/nodejs/node
RUN set -ex \
&& for key in \
9554F04D7259F04124DE6B476D5A82AC7E37093B \
94AE36675C464D64BAFA68DD7434390BDBE9B9C5 \
0034A06D9D9B0064CE8ADF6BF1747F4AD2306D93 \
FD3A5288F042B6850C66B31F09FE44734EB7990E \
71DCFD284A79C3B38668286BC97EC7A07EDE3FC1 \
DD8F2338BAE7501E3DD5AC78C273792F7D83545D \
B9AE9905FFD7803F25714661B63B535A4C206CA9 \
C4F0DFFF4E8C1A8236409D08E73BC641CC11F4C8 \
; do \
gpg --keyserver ha.pool.sks-keyservers.net --recv-keys "$key"; \
done
ENV NPM_CONFIG_LOGLEVEL info
ENV NODE_VERSION 5.12.0
RUN curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/node-v$NODE_VERSION-linux-x64.tar.xz" \
&& curl -SLO "https://nodejs.org/dist/v$NODE_VERSION/SHASUMS256.txt.asc" \
&& gpg --batch --decrypt --output SHASUMS256.txt SHASUMS256.txt.asc \
&& grep " node-v$NODE_VERSION-linux-x64.tar.xz\$" SHASUMS256.txt | sha256sum -c - \
&& tar -xJf "node-v$NODE_VERSION-linux-x64.tar.xz" -C /usr/local --strip-components=1 \
&& rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs
# Поставим xdebug отдельно, т.к. потом его потенциально придётся отсюда убирать
RUN yes | pecl install xdebug \
&& echo "zend_extension=$(find /usr/local/lib/php/extensions/ -name xdebug.so)" > /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.default_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_enable=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_handler=dbgp" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_mode=req" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_autostart=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_port=9000" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.remote_connect_back=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.cli_color=1" >> /usr/local/etc/php/conf.d/xdebug.ini \
&& echo "xdebug.var_display_max_depth=10" >> /usr/local/etc/php/conf.d/xdebug.ini
ENV COMPOSER_NO_INTERACTION 1
ENV COMPOSER_ALLOW_SUPERUSER 1
ENV COMPOSER_DISCARD_CHANGES true
# Composer и его глобальные зависимости
RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer.phar \
&& echo '{"github-oauth": {"github.com": "***REMOVED***"}}' > ~/.composer/auth.json \
&& composer.phar global require --no-progress "hirak/prestissimo:>=0.3.4"
COPY ./docker/php/composer.sh /usr/local/bin/composer
# Конфиг для php
COPY ./docker/php/php.ini /usr/local/etc/php/
# Конфиг для supervisor
COPY ./docker/php/supervisord.conf /etc/supervisord.conf
# wait-for-it
COPY ./docker/wait-for-it.sh /usr/local/bin/wait-for-it
# Наша кавайная точка входа
COPY ./docker/php/entrypoint.sh /usr/local/bin/
RUN chmod a+x /usr/local/bin/composer \
&& chmod a+x /usr/local/bin/entrypoint.sh \
&& chmod a+x /usr/local/bin/wait-for-it \
&& ln -s /usr/local/bin/entrypoint.sh / \
&& mkdir /root/.ssh
COPY id_rsa /root/.ssh
# Включаем поддержку ssh
RUN eval $(ssh-agent -s) \
&& ssh-add /root/.ssh/id_rsa \
&& touch /root/.ssh/known_hosts \
&& ssh-keyscan gitlab.com >> /root/.ssh/known_hosts
WORKDIR /var/www/html
# Копируем composer.json в родительскую директорию, которая не будет синкатся с хостом через
# volume на dev окружении. В entrypoint эта папка будет скопирована обратно.
COPY ./composer.json /var/www/composer.json
# Устанавливаем зависимости PHP
RUN cd .. \
&& composer install --no-interaction --no-suggest \
&& cd -
# Устанавливаем зависимости для Node.js
# Делаем это отдельно, чтобы можно было воспользоваться кэшем, если от предыдущего билда
# ничего не менялось в зависимостях
RUN mkdir -p /var/www/frontend
COPY ./frontend/package.json /var/www/frontend/
COPY ./frontend/scripts /var/www/frontend/scripts
COPY ./frontend/webpack-utils /var/www/frontend/webpack-utils
RUN cd ../frontend \
&& npm install \
&& cd -
# Наконец переносим все сорцы внутрь контейнера
COPY . /var/www/html
RUN mkdir -p api/runtime api/web/assets console/runtime \
&& chown www-data:www-data api/runtime api/web/assets console/runtime \
# Билдим фронт
&& cd frontend \
&& ln -s /var/www/frontend/node_modules $PWD/node_modules \
&& npm run build \
&& rm node_modules \
# Копируем билд наружу, чтобы его не затёрло volume в dev режиме
&& cp -r ./dist /var/www/dist \
&& cd -
# Экспозим всё под /var/www/html для дальнейшей связки с nginx
VOLUME ["/var/www/html"]
ENTRYPOINT ["entrypoint.sh"]
CMD ["/usr/bin/supervisord", "-n", "-c", "/etc/supervisord.conf"]

View File

@ -1,4 +1,4 @@
# Account Ely.by
# Accounts Ely.by
## Развёртывание dev
@ -6,61 +6,49 @@
[docker](https://docs.docker.com/engine/installation/) и его
[docker-compose](https://docs.docker.com/compose/install/).
Сливаем репозиторий:
Кроме того, нужно установить, настроить и запустить [nginx-proxy](https://gitlab.com/elyby/nginx-proxy)
контейнер. Это делается один раз в рамках системы и в дальнейшем используется и для других проектов.
За тем сливаем репозиторий:
```sh
git clone git@bitbucket.org:ErickSkrauch/ely.by-account.git account.ely.by.local
git clone git@gitlab.com:elyby/account.git account.ely.by
cd account.ely.by.local
```
Выполняем первый запуск контейнеров:
Далее нужно создать `.env`, `docker-compose.yml` и `id_rsa` файлы:
```sh
cp .env-dist .env
cp docker-compose.dev.yml docker-compose.yml
cp ~/.ssh/id_rsa id_rsa # Использовать ссылку нельзя
```
Касательно файла id_rsa: часть зависимостей находятся в наших приватных репозиториях, получить
доступ куда можно только в том случае, если в контейнере окажется ключ, который имеет доступ к этим
репозиториям.
Все вышеперечисленные файла находятся под gitignore, так что с полученными файлами можно произвести
все необходимые манипуляции под конкретный кейс использования. **В файле `.env` обязательно следует
задать `JWT_USER_SECRET`, иначе авторизация на бекенде не заработает.**
После этого просто выполняем старт всех контейнеров:
```sh
docker-compose up -d
```
Далее нужно влезть в работающие контейнеры и сделать что-нибудь, что их настроит.
Они автоматически сбилдятся и начнут свою работу.
### Как влезть в работающий контейнер
Сперва, с помощью команды `docker ps` мы увидим все запущенные контейнеры. Нас интересуют значения из первой колонки
CONTAINER ID. Узнать, чему они соответствуют можно прочитав название IMAGE из 2 колонки. Чтобы выполнить команду
внутри работабщего контейнера, нужно выполнить:
Сперва, с помощью команды `docker ps` мы увидим все запущенные контейнеры. Нас интересуют значения
из первой колонки CONTAINER ID или NAMES. Узнать, чему они соответствуют можно прочитав название IMAGE
из 2 колонки. Чтобы выполнить команду внутри работабщего контейнера, нужно выполнить:
```
docker exec -it a7c267b27f49 /bin/bash
docker exec -it accountelyby_app_1 bash
```
Где `a7c267b27f49` - одно из значений из первой колонки. Для выхода из контейнера используем `exit`.
-------------------------
Так вот, нам нужно выполнить ряд команд. Здесь и далее я буду писать имена контейнеров в их соответствии с compose
файлом, но в реалиях их нужно будет заменить на реальные значения:
```sh
# Настройка php контейнера
docker exec -it app php init --env=Docker
docker exec -it app php composer install
docker exec -it app php ./yii migrate --interactive=0
# Настройка node контейнера
docker exec -it node-dev-server npm i
docker exec -it node-dev-server npm --prefix ./webpack i ./webpack
docker exec -it node-dev-server npm --prefix ./scripts i ./scripts
# Настройка rabbitmq контейнера
docker exec -it rabbitmq /init.sh
```
После этого перезапускаем все контейнеры командой:
```sh
docker-compose restart
```
## Тестирование php бэкэнда
```sh
./tests/run-tests.sh
```
Где `accountelyby_app_1` - одно из значений CONTAINER ID или NAMES. Для выхода из контейнера
используем `exit`.

View File

@ -44,7 +44,7 @@ class ConfigLoader {
}
// Настройки конкретного приложения для действующего окружения
$path = self::ROOT_PATH . '/' . $this->application . '/config/main-' . YII_ENV . '.php';
$path = self::ROOT_PATH . '/' . $this->application . '/config/config-' . YII_ENV . '.php';
if (file_exists($path)) {
$toMerge[] = require $path;
}

View File

@ -25,7 +25,7 @@
"ely/yii2-tempmail-validator": "~1.0.0",
"emarref/jwt": "~1.0.3",
"ely/amqp-controller": "^0.1.0",
"ely/email-renderer": "dev-master#10e77d7a60403e87ca6e8c7d9e62a36fc5e08565"
"ely/email-renderer": "dev-master#4a751652b5a325d44d3bc79a464dda9232486cbc"
},
"require-dev": {
"yiisoft/yii2-codeception": "*",

2
data/mysql/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

2
data/redis/.gitignore vendored Normal file
View File

@ -0,0 +1,2 @@
*
!.gitignore

74
docker-compose.dev.yml Normal file
View File

@ -0,0 +1,74 @@
version: '2'
services:
app:
build:
dockerfile: Dockerfile-dev
context: .
depends_on:
- db
- redis
- rabbitmq
volumes:
- ./:/var/www/html/
env_file: .env
web:
build: ./docker/nginx
volumes_from:
- app
links:
- app:php
env_file: .env
networks:
- default
- nginx-proxy
db:
build: ./docker/mariadb
env_file: .env
volumes:
- ./data/mysql:/var/lib/mysql
redis:
image: redis:3.0-alpine
volumes:
- ./data/redis:/data
rabbitmq:
image: rabbitmq:3.6-management
env_file: .env
environment:
- VIRTUAL_HOST=rabbitmq.account.ely.by.local
- VIRTUAL_PORT=15672
networks:
- default
- nginx-proxy
phpmyadmin:
build: ./docker/phpmyadmin
environment:
- PMA_ARBITRARY=1
- PMA_USER=root
- PMA_PASSWORD=
- VIRTUAL_HOST=pma.account.ely.by.local
depends_on:
- db
networks:
- default
- nginx-proxy
# Эта штука работает дико медленно, грузит процессор и т.д. и т.п.
# Раскоментировать только в случае лютой надобности
#node-dev-server:
# build: ./frontend
# ports:
# - "8080:8080"
# volumes:
# - ./frontend/:/usr/src/app/
# environment:
# DOCKERIZED: "true"
networks:
nginx-proxy:
external:
name: nginx-proxy

40
docker-compose.prod.yml Normal file
View File

@ -0,0 +1,40 @@
version: '2'
services:
app:
build: .
depends_on:
- db
- redis
- rabbitmq
env_file: .env
web:
build: ./docker/nginx
volumes_from:
- app
links:
- app:php
env_file: .env
networks:
- default
- nginx-proxy
db:
build: ./docker/mariadb
env_file: .env
volumes:
- ./data/mysql:/var/lib/mysql
redis:
image: redis:3.0-alpine
volumes:
- ./data/redis:/data
rabbitmq:
image: rabbitmq:3.6
env_file: .env
networks:
nginx-proxy:
external:
name: nginx-proxy

View File

@ -1,7 +1,9 @@
version: '2'
services:
app:
build: .
build:
dockerfile: Dockerfile-dev
context: .
depends_on:
- db
- redis
@ -21,37 +23,26 @@ services:
- default
- nginx-proxy
node-dev-server:
build: ./frontend
ports:
- "8080:8080"
volumes:
- ./frontend/:/usr/src/app/
environment:
DOCKERIZED: "true"
app-console-account-queue:
build: .
volumes:
- ./:/var/www/html/
command: ["docker/wait-for-it.sh", "rabbitmq:5672", "--", "php", "yii", "account-queue"]
links:
- db
- redis
- rabbitmq
db:
build: ./docker/mariadb
env_file: .env
volumes:
- ./data/mysql:/var/lib/mysql
redis:
image: redis:3.0
image: redis:3.0-alpine
volumes:
- ./data/redis:/data
rabbitmq:
build: ./docker/rabbitmq
image: rabbitmq:3.6-management
env_file: .env
ports:
- "15672:15672" # Manager interface
environment:
- VIRTUAL_HOST=rabbitmq.account.ely.by.local
- VIRTUAL_PORT=15672
networks:
- default
- nginx-proxy
phpmyadmin:
build: ./docker/phpmyadmin
@ -59,10 +50,12 @@ services:
- PMA_ARBITRARY=1
- PMA_USER=root
- PMA_PASSWORD=
ports:
- "8181:80"
- VIRTUAL_HOST=pma.account.ely.by.local
depends_on:
- db
networks:
- default
- nginx-proxy
networks:
nginx-proxy:

View File

@ -1,4 +1,4 @@
FROM nginx:1.11
FROM nginx:1.11-alpine
COPY nginx.conf /etc/nginx/nginx.conf
COPY account.ely.by.conf.template /etc/nginx/conf.d/account.ely.by.conf.template

View File

@ -1,4 +1,4 @@
#!/usr/bin/env bash
#!/usr/bin/env sh
envsubst '$AUTHSERVER_HOST' < /etc/nginx/conf.d/account.ely.by.conf.template > /etc/nginx/conf.d/default.conf

33
docker/php/entrypoint.sh Normal file
View File

@ -0,0 +1,33 @@
#!/bin/bash
cd /var/www/html
if [ "$1" = 'bash' ]
then
exec "$@"
exit 0
fi
# Переносим vendor, если его нету или он изменился (или затёрся силами volume)
if ! cmp -s ./../vendor/autoload.php ./vendor/autoload.php
then
echo "vendor have diffs..."
echo "removing exists vendor"
rm -rf ./vendor
echo "copying new one"
cp -r ./../vendor ./vendor
fi
# Переносим dist, если его нету или он изменился (или затёрся силами volume)
if ! cmp -s ./../dist/index.html ./frontend/dist/index.html
then
echo "frontend dist have diffs..."
echo "removing exists dist"
rm -rf ./frontend/dist
echo "copying new one"
cp -r ./../dist ./frontend/dist
fi
wait-for-it db:3306 -- "./yii migrate/up --interactive=0"
exec "$@"

View File

@ -0,0 +1,36 @@
[supervisord]
logfile=/tmp/supervisord.log ; (main log file;default $CWD/supervisord.log)
logfile_maxbytes=50MB ; (max main logfile bytes b4 rotation;default 50MB)
logfile_backups=10 ; (num of main logfile rotation backups;default 10)
loglevel=info ; (log level;default info; others: debug,warn,trace)
pidfile=/tmp/supervisord.pid ; (supervisord pidfile;default supervisord.pid)
nodaemon=false ; (start in foreground if true;default false)
minfds=1024 ; (min. avail startup file descriptors;default 1024)
minprocs=200 ; (min. avail process descriptors;default 200)
user=root
; the below section must remain in the config file for RPC
; (supervisorctl/web interface) to work, additional interfaces may be
; added by defining them in separate rpcinterface: sections
[rpcinterface:supervisor]
supervisor.rpcinterface_factory = supervisor.rpcinterface:make_main_rpcinterface
[supervisorctl]
serverurl=unix:///dev/shm/supervisor.sock ; use a unix:// URL for a unix socket
[program:php-fpm]
command=php-fpm
autostart=true
autorestart=true
priority=5
stdout_logfile=/dev/stdout
stdout_logfile_maxbytes=0
stderr_logfile=/dev/stderr
stderr_logfile_maxbytes=0
[program:account-queue-worker]
directory=/var/www/html
command=wait-for-it rabbitmq:5672 -- php yii account-queue
autostart=true
autorestart=true
priority=10

View File

@ -1,8 +0,0 @@
FROM rabbitmq:3.6
RUN rabbitmq-plugins enable rabbitmq_management \
&& rabbitmq-plugins enable rabbitmq_web_stomp \
&& rabbitmq-plugins enable rabbitmq_mqtt
ENTRYPOINT ["docker-entrypoint.sh"]
CMD ["rabbitmq-server"]

View File

@ -1,17 +1,17 @@
version: '2'
services:
testphp:
build: ./..
links:
- testdb
- testredis
- testrabbit
extends:
file: ../docker-compose.dev.yml
service: app
volumes:
- ./../:/var/www/html/
env_file: ./../.env
testdb:
build: ./../docker/mariadb
extends:
file: ../docker-compose.dev.yml
service: db
environment:
MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
@ -20,10 +20,14 @@ services:
MYSQL_PASSWORD: "ely_accounts_tester_password"
testredis:
image: redis:3.0
extends:
file: ../docker-compose.dev.yml
service: redis
testrabbit:
build: ./../docker/rabbitmq
extends:
file: ../docker-compose.dev.yml
service: rabbitmq
environment:
RABBITMQ_DEFAULT_USER: "ely-accounts-tester"
RABBITMQ_DEFAULT_PASS: "tester-password"