-
Notifications
You must be signed in to change notification settings - Fork 50
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
[Docker] Evolution of Docker environment useful to run stand-alone pr…
…oduction instance (#635) * Merge remote-tracking branch 'origin/stable' * Adding Makefile * Rebuild Dockerfile for version 3 * Introducing JS stand-alone
- Loading branch information
1 parent
b6a2b08
commit 31d3e24
Showing
32 changed files
with
982 additions
and
289 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,6 @@ | ||
/.idea/ | ||
/.vscode/ | ||
/docker/ | ||
!/docker/etc/crontab | ||
!/docker/script/myddleware-*.sh | ||
/var/ |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,95 @@ | ||
FROM --platform=linux/amd64 php:7.4.26-apache | ||
LABEL maintainer="Francesco Bianco <francescobianco@opencrmitalia.com>" | ||
|
||
## Configure PHP | ||
RUN apt-get update && apt-get upgrade -y && \ | ||
apt-get -y install -qq --force-yes rsync mariadb-client libzip-dev libicu-dev git zlib1g-dev libc-client-dev libkrb5-dev cron rsyslog unzip libssh2-1-dev gnupg2 alien libaio1 nano vim net-tools iputils-ping telnet && \ | ||
docker-php-ext-configure intl && docker-php-ext-configure imap --with-kerberos --with-imap-ssl && \ | ||
docker-php-ext-install imap exif mysqli pdo pdo_mysql zip intl && \ | ||
echo "short_open_tag=off" >> /usr/local/etc/php/conf.d/syntax.ini && \ | ||
echo "memory_limit=-1" >> /usr/local/etc/php/conf.d/memory_limit.ini && \ | ||
echo "display_errors=0" >> /usr/local/etc/php/conf.d/errors.ini && \ | ||
sed -e 's!DocumentRoot /var/www/html!DocumentRoot /var/www/html/public!' -ri /etc/apache2/sites-available/000-default.conf && \ | ||
curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/bin/ --filename=composer && \ | ||
apt-get clean && rm -rf /tmp/* /var/tmp/* /var/lib/apt/lists/* | ||
#RUN pecl install -f ssh2-1.1.2 && docker-php-ext-enable ssh2 | ||
|
||
## Install PHP Accelerators | ||
RUN pecl install apcu \ | ||
&& pecl install apcu_bc-1.0.3 \ | ||
&& docker-php-ext-enable apcu --ini-name 10-docker-php-ext-apcu.ini \ | ||
&& docker-php-ext-enable apc --ini-name 20-docker-php-ext-apc.ini | ||
|
||
## Intall NodeJS | ||
RUN curl -fsSL https://deb.nodesource.com/setup_current.x | bash - && \ | ||
apt-get update && apt-get install -y nodejs build-essential && npm install -g npm yarn && \ | ||
apt-get clean && rm -rf /tmp/* /var/tmp/* /var/lib/apt/lists/* | ||
|
||
## Install Xdebug | ||
RUN pecl install -f xdebug && \ | ||
docker-php-ext-enable xdebug && \ | ||
echo "xdebug.remote_enable = 1" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ | ||
echo "xdebug.remote_host=host.docker.internal" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ | ||
echo "xdebug.remote_autostart = 0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ | ||
echo "xdebug.remote_connect_back = 0" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ | ||
echo "xdebug.remote_port = 9000" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ | ||
echo "xdebug.remote_handler = 'dbgp'" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini && \ | ||
echo "xdebug.remote_mode = req" >> /usr/local/etc/php/conf.d/docker-php-ext-xdebug.ini | ||
|
||
## Install MS Database | ||
#RUN curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add - && \ | ||
# curl https://packages.microsoft.com/config/debian/10/prod.list > /etc/apt/sources.list.d/mssql-release.list && \ | ||
# apt-get update && \ | ||
# apt-get install --no-install-recommends -y msodbcsql17 unixodbc-dev && \ | ||
# pecl install -f sqlsrv pdo_sqlsrv && \ | ||
# docker-php-ext-enable sqlsrv pdo_sqlsrv && \ | ||
# sed -i 's,^\(MinProtocol[ ]*=\).*,\1'TLSv1.0',g' /etc/ssl/openssl.cnf && \ | ||
# sed -i 's,^\(CipherString[ ]*=\).*,\1'DEFAULT@SECLEVEL=1',g' /etc/ssl/openssl.cnf | ||
|
||
## Install Oracle Database | ||
RUN curl "https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-sqlplus-19.5.0.0.0-1.x86_64.rpm" -o "/mnt/oracle-instant-sqlplus.rpm" && \ | ||
curl "https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-basic-19.5.0.0.0-1.x86_64.rpm" -o "/mnt/oracle-instant-basic.rpm" && \ | ||
curl "https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-devel-19.5.0.0.0-1.x86_64.rpm" -o "/mnt/oracle-instant-devel.rpm" && \ | ||
curl "https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-odbc-19.5.0.0.0-1.x86_64.rpm" -o "/mnt/oracle-instant-odbc.rpm" && \ | ||
curl "https://download.oracle.com/otn_software/linux/instantclient/195000/oracle-instantclient19.5-tools-19.5.0.0.0-1.x86_64.rpm" -o "/mnt/oracle-instant-tools.rpm" && \ | ||
alien -i /mnt/oracle-instant-sqlplus.rpm && \ | ||
alien -i /mnt/oracle-instant-basic.rpm && \ | ||
alien -i /mnt/oracle-instant-devel.rpm && \ | ||
alien -i /mnt/oracle-instant-odbc.rpm && \ | ||
alien -i /mnt/oracle-instant-tools.rpm && \ | ||
ln -s /usr/lib/oracle/19.5/client64/lib/libsqora.so.19.1 /usr/lib/libsqora.so && \ | ||
rm /mnt/* && \ | ||
export LD_LIBRARY_PATH=/usr/lib/oracle/19.5/client64/lib && \ | ||
export ORACLE_HOME=/usr/lib/oracle/19.5/client64 && \ | ||
export C_INCLUDE_PATH=/usr/include/oracle/19.5/client64 && \ | ||
docker-php-ext-install oci8 pdo_oci | ||
|
||
## Install Platform tool | ||
RUN curl -sS https://platform.sh/cli/installer | php && \ | ||
ln -s /root/.platformsh/bin/platform /usr/local/bin/platform | ||
|
||
## Setup Cronjob | ||
RUN echo "cron.* /var/log/cron.log" >> /etc/rsyslog.conf && rm -fr /etc/cron.* && mkdir /etc/cron.d | ||
COPY docker/etc/crontab /etc/ | ||
RUN chmod 600 /etc/crontab | ||
|
||
## Install DBLIB | ||
#RUN apt-get update && \ | ||
# apt-get install -y freetds-bin freetds-dev freetds-common libct4 libsybdb5 tdsodbc libfreetype6-dev libjpeg62-turbo-dev libmcrypt-dev zlib1g-dev libicu-dev g++ libc-client-dev && \ | ||
# docker-php-ext-configure pdo_dblib --with-libdir=/lib/x86_64-linux-gnu && \ | ||
# docker-php-ext-configure intl && \ | ||
# docker-php-ext-install pdo_dblib && \ | ||
# docker-php-ext-install intl && \ | ||
# docker-php-ext-install mbstring && \ | ||
# docker-php-ext-enable intl mbstring pdo_dblib | ||
|
||
## Sysadmin tools | ||
RUN apt-get update && apt-get upgrade -y && \ | ||
apt-get -y install -qq --force-yes nano vim net-tools iputils-ping telnet | ||
|
||
## Entrypoint and scripts | ||
COPY ./docker/script/myddleware-cron.sh /usr/local/bin/myddleware-cron.sh | ||
COPY ./docker/script/myddleware-foreground.sh /usr/local/bin/myddleware-foreground.sh | ||
COPY ./docker/script/myddleware-monitor.sh /usr/local/bin/myddleware-monitor.sh | ||
RUN chmod +x /usr/local/bin/myddleware-*.sh | ||
CMD ["myddleware-foreground.sh"] |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
#!make | ||
|
||
init: | ||
@docker-compose run --rm --no-deps myddleware bash docker/script/init.sh | ||
|
||
clean: | ||
@docker-compose run --rm --no-deps myddleware bash docker/script/clean.sh | ||
|
||
wait: | ||
@docker-compose up -d mysql | ||
@docker-compose exec mysql sh -c "while ! (mysqladmin ping -uroot > /dev/null 2>&1); do sleep 1; done" | ||
|
||
clean-cache: | ||
@docker-compose -f docker-compose.yml run --rm myddleware rm -fr var/cache/* | ||
|
||
update: init up | ||
@docker-compose -f docker-compose.yml run --rm myddleware rm -fr var/cache/* vendor | ||
@docker-compose -f docker-compose.yml run --rm myddleware chmod 777 -R var/cache/ | ||
@docker-compose -f docker-compose.yml run --rm myddleware php composer2.phar install --ignore-platform-reqs --no-scripts | ||
@echo "Update done." | ||
|
||
refresh: init up | ||
@docker-compose -f docker-compose.yml run --rm myddleware rm -fr var/cache/* | ||
@docker-compose -f docker-compose.yml run --rm myddleware chmod 777 -R var/cache/ | ||
@docker-compose -f docker-compose.yml up -d --force-recreate myddleware | ||
|
||
dump-autoload: init up | ||
@docker-compose -f docker-compose.yml run --rm myddleware php composer.phar dump-autoload --no-scripts | ||
|
||
require-vtiger-client: | ||
@docker-compose -f docker-compose.yml run --rm myddleware php composer2.phar require javanile/vtiger-client:0.0.28 -vvvv --ignore-platform-reqs --no-scripts | ||
|
||
require-woocommerce-client: | ||
@docker-compose -f docker-compose.yml run --rm myddleware php composer.phar require automattic/woocommerce:^3.0.0 -vvvv --ignore-platform-reqs --no-scripts | ||
|
||
setup: js-build setup-database | ||
@echo "Myddleware files and database setup completed." | ||
|
||
setup-database: wait init | ||
@docker-compose run --rm myddleware bash docker/script/setup-database.sh | ||
|
||
schedule: | ||
@docker-compose -f docker-compose.yml exec myddleware php -f /var/www/html/bin/console myddleware:resetScheduler --env=background | ||
@docker-compose -f docker-compose.yml exec -e MYDDLEWARE_CRON_RUN=1 -u www-data myddleware php /var/www/html/bin/console myddleware:jobScheduler --env=background | ||
|
||
monitor: | ||
@docker-compose -f docker-compose.yml exec myddleware bash /var/www/html/dev/script/monitor.sh | ||
|
||
logs: debug | ||
@docker-compose logs -f myddleware | ||
|
||
logs-rotate: | ||
@docker-compose run --rm --no-deps myddleware bash docker/script/logs-rotate.sh | ||
|
||
debug: init | ||
@docker-compose -f docker-compose.yml -f docker-compose.debug.yml up -d --remove-orphans | ||
|
||
prod: init fix | ||
@docker-compose --env-file .env.docker up -d --remove-orphans | ||
|
||
start: prod | ||
@echo ">>> Myddleware is ready." | ||
|
||
recreate: init | ||
@docker-compose -f docker-compose.yml up -d --remove-orphans --force-recreate | ||
|
||
restart: recreate | ||
@echo ">>> Myddleware is ready." | ||
|
||
fix: | ||
@docker-compose run --rm myddleware bash docker/script/fix.sh || true | ||
|
||
bash: | ||
@docker-compose -f docker-compose.yml exec myddleware bash | ||
|
||
update-secret: | ||
@bash dev/script/update-secret.sh | ||
|
||
generate-template: | ||
@docker-compose -f docker-compose.yml exec myddleware bash dev/script/generate-template.sh | ||
|
||
docker-stop-all: | ||
@docker stop $$(docker ps -qa | grep -v $${MAKEBAT_CONTAINER_ID:-null}) >/dev/null 2>/dev/null || true | ||
|
||
reset: clean | ||
@bash docker/script/reset.sh | ||
|
||
install: php-install js-install | ||
@echo "Myddleware installation complete." | ||
|
||
## --- | ||
## PHP | ||
## --- | ||
php-install: up | ||
@docker-compose run --rm --no-deps myddleware composer install | ||
|
||
## ---------- | ||
## JavaScript | ||
## ---------- | ||
js-install: up | ||
@docker-compose -f docker-compose.yml -f docker/env/dev.yml run --rm --no-deps myddleware yarn install | ||
|
||
js-build: up | ||
@docker-compose -f docker-compose.yml -f docker/env/dev.yml run --rm --no-deps myddleware yarn run build | ||
@docker-compose run --rm --no-deps -w /var/www/html/public myddleware rsync -Rr ./build/ ./build/ | ||
|
||
## ------ | ||
## Docker | ||
## ------ | ||
ps: | ||
@docker-compose ps | ||
|
||
up: | ||
@docker-compose -f docker-compose.yml up -d | ||
|
||
down: | ||
@docker-compose down --remove-orphans | ||
|
||
build: | ||
@docker-compose -f docker-compose.yml -f docker/env/dev.yml build myddleware | ||
|
||
push: | ||
@docker login -u opencrmitalia | ||
@docker build -t opencrmitalia/myddleware:v3 . | ||
@docker push opencrmitalia/myddleware:v3 | ||
|
||
## ------- | ||
## Develop | ||
## ------- | ||
dev: \ | ||
init \ | ||
fix \ | ||
dev-clean \ | ||
dev-up \ | ||
dev-prepare-vtiger \ | ||
dev-prepare-mssql | ||
|
||
dev-up: build | ||
@docker-compose -f docker-compose.yml -f docker/env/dev.yml up --force-recreate -d | ||
|
||
dev-clean: | ||
@docker-compose run --rm myddleware bash -c "cd var/logs; rm -f vtigercrm.log; touch vtigercrm.log; chmod 777 vtigercrm.log" | ||
|
||
dev-install: dev-up | ||
@docker-compose -f docker-compose.yml run --rm myddleware rm -fr vendor | ||
@docker-compose -f docker-compose.yml run --rm myddleware composer install | ||
@docker-compose -f docker-compose.yml run --rm myddleware chmod 777 -R vendor | ||
|
||
dev-js-install: dev-up | ||
@docker-compose -f docker-compose.yml -f docker/env/dev.yml run --rm myddleware yarn install | ||
@docker-compose -f docker-compose.yml run --rm myddleware chmod 777 -R node_modules yarn.lock | ||
|
||
dev-prepare-vtiger: | ||
@docker-compose exec vtiger1 bash dev/script/vtiger-install.sh | ||
@docker-compose exec vtiger2 bash dev/script/vtiger-install.sh | ||
|
||
dev-prepare-mssql: | ||
@docker-compose exec mssql sqlcmd -S '127.0.0.1' -U 'sa' -P 'Secret.1234!' -Q 'DROP DATABASE IF EXISTS MSSQL;' | ||
@docker-compose exec mssql sqlcmd -S '127.0.0.1' -U 'sa' -P 'Secret.1234!' -Q 'CREATE DATABASE MSSQL COLLATE Latin1_General_CS_AS;' | ||
@docker-compose exec mssql sqlcmd -S '127.0.0.1' -U 'sa' -P 'Secret.1234!' -i /fixtures/mssql.sql | ||
|
||
dev-create-random-contacts: | ||
@docker-compose exec vtiger1 php -f dev/script/create-random-contacts.php | ||
|
||
## ------- | ||
## Testing | ||
## ------- | ||
test-dev: reset install setup dev | ||
@docker-compose ps | ||
|
||
test-debug: reset install setup debug | ||
@docker-compose ps | ||
|
||
test-prod: reset install setup prod | ||
@docker-compose ps | ||
|
||
test-backup: up | ||
@docker-compose -f docker-compose.yml logs -f backup | ||
|
||
test-monitoring: | ||
@docker-compose -f docker-compose.yml exec myddleware rm -f /var/www/html/var/logs/monitoring.log | ||
@docker-compose -f docker-compose.yml exec myddleware bash /var/www/html/dev/script/monitoring.sh | ||
@docker-compose -f docker-compose.yml exec myddleware cat /var/www/html/var/logs/monitoring.log |
Oops, something went wrong.