mirror of
https://github.com/elyby/accounts.git
synced 2024-11-09 15:02:19 +05:30
Структура проекта окончательно загнана в 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:
parent
8120e43bec
commit
53ca5915f7
@ -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
29
.gitignore
vendored
@ -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
|
||||
|
137
Dockerfile
137
Dockerfile
@ -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
162
Dockerfile-dev
Normal 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"]
|
72
README.md
72
README.md
@ -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`.
|
||||
|
@ -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;
|
||||
}
|
||||
|
@ -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
2
data/mysql/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
2
data/redis/.gitignore
vendored
Normal file
2
data/redis/.gitignore
vendored
Normal file
@ -0,0 +1,2 @@
|
||||
*
|
||||
!.gitignore
|
74
docker-compose.dev.yml
Normal file
74
docker-compose.dev.yml
Normal 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
40
docker-compose.prod.yml
Normal 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
|
@ -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:
|
||||
|
@ -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
|
||||
|
@ -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
33
docker/php/entrypoint.sh
Normal 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 "$@"
|
36
docker/php/supervisord.conf
Normal file
36
docker/php/supervisord.conf
Normal 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
|
@ -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"]
|
@ -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"
|
||||
|
Loading…
Reference in New Issue
Block a user