Skip to content

Commit

Permalink
[Docker] Evolution of Docker environment useful to run stand-alone pr…
Browse files Browse the repository at this point in the history
…oduction instance (#635)

* Merge remote-tracking branch 'origin/stable'

* Adding Makefile

* Rebuild Dockerfile for version 3

* Introducing JS stand-alone
  • Loading branch information
francescobianco authored Feb 11, 2022
1 parent b6a2b08 commit 31d3e24
Show file tree
Hide file tree
Showing 32 changed files with 982 additions and 289 deletions.
6 changes: 6 additions & 0 deletions .dockerignore
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/
10 changes: 9 additions & 1 deletion .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -89,4 +89,12 @@ yarn-error.log
/.platform/*
.platform.app.yaml
composer.phar
##< old files & folders ##
##< old files & folders ##

##> Docker ##
/docker/tmp/
!/docker/tmp/.gitkeep
/docker/var/
!/docker/var/*/.gitkeep
.env.docker
##< Docker ##
95 changes: 95 additions & 0 deletions Dockerfile
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"]
183 changes: 183 additions & 0 deletions Makefile
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
Loading

0 comments on commit 31d3e24

Please sign in to comment.