Структура проекта окончательно загнана в 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 будет заполнен уже внутри контейнера
vendor vendor
# node_modules для этого контейнера не нужны # Всё, что динамично на фронте
frontend/node_modules frontend/node_modules
frontend/webpack/node_modules frontend/dist
frontend/scripts/node_modules
# Все временные файлы # Все временные файлы
*/runtime */runtime

29
.gitignore vendored
View File

@ -1,37 +1,22 @@
# phpstorm project files # phpstorm project files
.idea .idea
# netbeans project files # Composer
nbproject
# zend studio for eclipse project files
.buildpath
.project
.settings
# windows thumbnail cache
Thumbs.db
# composer vendor dir
/vendor /vendor
# composer itself is not needed
/composer.phar
/composer.lock /composer.lock
# Mac DS_Store Files # Mac DS_Store Files
.DS_Store .DS_Store
# phpunit itself is not needed
phpunit.phar
# local phpunit config
/phpunit.xml
# npm debug # npm debug
npm-debug* npm-debug*
# Docker override file # Docker и его override файлы
docker-compose.override.yml /docker-compose.yml
/docker-compose.override.yml
# Локальный .env # Локальный .env
/.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 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 \ RUN apt-get update \
&& apt-get -y install \ && apt-get -y install \
git \ git \
@ -10,28 +10,35 @@ RUN apt-get update \
libicu-dev \ libicu-dev \
libmcrypt-dev \ libmcrypt-dev \
zlib1g-dev \ zlib1g-dev \
bzip2 \
libbz2-dev \
liblzma-dev \
xz-utils \
openssh-server \ openssh-server \
supervisor \
--no-install-recommends \ --no-install-recommends \
--force-yes \
# Install PHP extensions # PHP расширения
&& docker-php-ext-install intl \ && docker-php-ext-install intl \
&& docker-php-ext-install pdo_mysql \ && docker-php-ext-install pdo_mysql \
&& docker-php-ext-install mbstring \ && docker-php-ext-install mbstring \
&& docker-php-ext-install mcrypt \ && docker-php-ext-install mcrypt \
&& docker-php-ext-install zip \ && docker-php-ext-install zip \
&& docker-php-ext-install bcmath \ && docker-php-ext-install bcmath \
&& docker-php-ext-install opcache \
&& apt-get purge -y g++ \ && apt-get purge -y g++ \
&& apt-get autoremove -y \ && apt-get autoremove -y \
&& rm -r /var/lib/apt/lists/* \ && 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 \ && echo "\nclear_env = no" >> /usr/local/etc/php-fpm.conf \
# Fix write permissions with shared folders # Фикс прав на запись для расшаренных папок
&& usermod -u 1000 www-data && 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 # gpg keys listed at https://github.com/nodejs/node
RUN set -ex \ RUN set -ex \
@ -49,7 +56,7 @@ RUN set -ex \
done done
ENV NPM_CONFIG_LOGLEVEL info 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" \ 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" \ && 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 \ && rm "node-v$NODE_VERSION-linux-x64.tar.xz" SHASUMS256.txt.asc SHASUMS256.txt \
&& ln -s /usr/local/bin/node /usr/local/bin/nodejs && 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_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 \ RUN curl -sS https://getcomposer.org/installer | php \
&& mv composer.phar /usr/local/bin/composer.phar \ && mv composer.phar /usr/local/bin/composer.phar \
&& echo '{"github-oauth": {"github.com": "***REMOVED***"}}' > ~/.composer/auth.json \ && 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 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 WORKDIR /var/www/html
# Custorm php configuration # Копируем composer.json в родительскую директорию, которая не будет синкатся с хостом через
COPY ./docker/php/php.ini /usr/local/etc/php/ # 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 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 \ 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) # Экспозим всё под /var/www/html для дальнейшей связки с nginx
VOLUME ["/var/www"] 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 ## Развёртывание dev
@ -6,61 +6,49 @@
[docker](https://docs.docker.com/engine/installation/) и его [docker](https://docs.docker.com/engine/installation/) и его
[docker-compose](https://docs.docker.com/compose/install/). [docker-compose](https://docs.docker.com/compose/install/).
Сливаем репозиторий: Кроме того, нужно установить, настроить и запустить [nginx-proxy](https://gitlab.com/elyby/nginx-proxy)
контейнер. Это делается один раз в рамках системы и в дальнейшем используется и для других проектов.
За тем сливаем репозиторий:
```sh ```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 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 ```sh
docker-compose up -d docker-compose up -d
``` ```
Далее нужно влезть в работающие контейнеры и сделать что-нибудь, что их настроит. Они автоматически сбилдятся и начнут свою работу.
### Как влезть в работающий контейнер ### Как влезть в работающий контейнер
Сперва, с помощью команды `docker ps` мы увидим все запущенные контейнеры. Нас интересуют значения из первой колонки Сперва, с помощью команды `docker ps` мы увидим все запущенные контейнеры. Нас интересуют значения
CONTAINER ID. Узнать, чему они соответствуют можно прочитав название IMAGE из 2 колонки. Чтобы выполнить команду из первой колонки CONTAINER ID или NAMES. Узнать, чему они соответствуют можно прочитав название IMAGE
внутри работабщего контейнера, нужно выполнить: из 2 колонки. Чтобы выполнить команду внутри работабщего контейнера, нужно выполнить:
``` ```
docker exec -it a7c267b27f49 /bin/bash docker exec -it accountelyby_app_1 bash
``` ```
Где `a7c267b27f49` - одно из значений из первой колонки. Для выхода из контейнера используем `exit`. Где `accountelyby_app_1` - одно из значений CONTAINER ID или NAMES. Для выхода из контейнера
используем `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
```

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)) { if (file_exists($path)) {
$toMerge[] = require $path; $toMerge[] = require $path;
} }

View File

@ -25,7 +25,7 @@
"ely/yii2-tempmail-validator": "~1.0.0", "ely/yii2-tempmail-validator": "~1.0.0",
"emarref/jwt": "~1.0.3", "emarref/jwt": "~1.0.3",
"ely/amqp-controller": "^0.1.0", "ely/amqp-controller": "^0.1.0",
"ely/email-renderer": "dev-master#10e77d7a60403e87ca6e8c7d9e62a36fc5e08565" "ely/email-renderer": "dev-master#4a751652b5a325d44d3bc79a464dda9232486cbc"
}, },
"require-dev": { "require-dev": {
"yiisoft/yii2-codeception": "*", "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' version: '2'
services: services:
app: app:
build: . build:
dockerfile: Dockerfile-dev
context: .
depends_on: depends_on:
- db - db
- redis - redis
@ -21,37 +23,26 @@ services:
- default - default
- nginx-proxy - 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: db:
build: ./docker/mariadb build: ./docker/mariadb
env_file: .env env_file: .env
volumes:
- ./data/mysql:/var/lib/mysql
redis: redis:
image: redis:3.0 image: redis:3.0-alpine
volumes:
- ./data/redis:/data
rabbitmq: rabbitmq:
build: ./docker/rabbitmq image: rabbitmq:3.6-management
env_file: .env env_file: .env
ports: environment:
- "15672:15672" # Manager interface - VIRTUAL_HOST=rabbitmq.account.ely.by.local
- VIRTUAL_PORT=15672
networks:
- default
- nginx-proxy
phpmyadmin: phpmyadmin:
build: ./docker/phpmyadmin build: ./docker/phpmyadmin
@ -59,10 +50,12 @@ services:
- PMA_ARBITRARY=1 - PMA_ARBITRARY=1
- PMA_USER=root - PMA_USER=root
- PMA_PASSWORD= - PMA_PASSWORD=
ports: - VIRTUAL_HOST=pma.account.ely.by.local
- "8181:80"
depends_on: depends_on:
- db - db
networks:
- default
- nginx-proxy
networks: networks:
nginx-proxy: 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 nginx.conf /etc/nginx/nginx.conf
COPY account.ely.by.conf.template /etc/nginx/conf.d/account.ely.by.conf.template 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 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' version: '2'
services: services:
testphp: testphp:
build: ./.. extends:
links: file: ../docker-compose.dev.yml
- testdb service: app
- testredis
- testrabbit
volumes: volumes:
- ./../:/var/www/html/ - ./../:/var/www/html/
env_file: ./../.env env_file: ./../.env
testdb: testdb:
build: ./../docker/mariadb extends:
file: ../docker-compose.dev.yml
service: db
environment: environment:
MYSQL_ROOT_PASSWORD: "" MYSQL_ROOT_PASSWORD: ""
MYSQL_ALLOW_EMPTY_PASSWORD: "yes" MYSQL_ALLOW_EMPTY_PASSWORD: "yes"
@ -20,10 +20,14 @@ services:
MYSQL_PASSWORD: "ely_accounts_tester_password" MYSQL_PASSWORD: "ely_accounts_tester_password"
testredis: testredis:
image: redis:3.0 extends:
file: ../docker-compose.dev.yml
service: redis
testrabbit: testrabbit:
build: ./../docker/rabbitmq extends:
file: ../docker-compose.dev.yml
service: rabbitmq
environment: environment:
RABBITMQ_DEFAULT_USER: "ely-accounts-tester" RABBITMQ_DEFAULT_USER: "ely-accounts-tester"
RABBITMQ_DEFAULT_PASS: "tester-password" RABBITMQ_DEFAULT_PASS: "tester-password"