mirror of
https://github.com/elyby/accounts.git
synced 2024-11-30 10:42:16 +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 будет заполнен уже внутри контейнера
|
||||||
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
29
.gitignore
vendored
@ -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
|
||||||
|
113
Dockerfile
113
Dockerfile
@ -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
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
|
## Развёртывание 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
|
|
||||||
```
|
|
||||||
|
@ -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;
|
||||||
}
|
}
|
||||||
|
@ -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
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'
|
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:
|
||||||
|
@ -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
|
||||||
|
@ -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
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'
|
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"
|
||||||
|
Loading…
Reference in New Issue
Block a user