From 1b21ea9c26309ff397170876a70ab72794fbd339 Mon Sep 17 00:00:00 2001 From: sagarnasit Date: Thu, 20 Sep 2018 17:37:21 +0530 Subject: [PATCH 01/12] Move nginx-proxy check to service command --- src/Service_Command.php | 157 +++++++++++++++++++++++++++++++++++++++- 1 file changed, 155 insertions(+), 2 deletions(-) diff --git a/src/Service_Command.php b/src/Service_Command.php index 3b9ecfb..60596e5 100644 --- a/src/Service_Command.php +++ b/src/Service_Command.php @@ -1,5 +1,6 @@ filter_service( $args ); + $service = $this->filter_service( $args ); + $container = "ee-global-$service"; + + if ( 'ee-global-nginx-proxy' === $container ) { + self::nginx_proxy_check(); + } else { + $status = EE::docker()::container_status( $container ); + if ( 'running' !== $status ) { + + $fs = new Filesystem(); + + if ( ! $fs->exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { + self::generate_global_docker_compose_yml( $fs ); + } + chdir( EE_CONF_ROOT ); + EE::docker()::boot_container( $container, "docker-compose up -d $service" ); + + } + } + + } + + /** + * Boots up the container if it is stopped or not running. + * @throws \EE\ExitException + */ + public static function nginx_proxy_check() { + $proxy_type = EE_PROXY_TYPE; + + if ( 'running' !== EE::docker()::container_status( $proxy_type ) ) { + + $port_80_status = EE\Site\Utils\get_curl_info( 'localhost', 80, true ); + $port_443_status = EE\Site\Utils\get_curl_info( 'localhost', 443, true ); + + // if any/both the port/s is/are occupied. + if ( ! ( $port_80_status && $port_443_status ) ) { + EE::error( 'Cannot create/start proxy container. Please make sure port 80 and 443 are free.' ); + } else { + + $fs = new Filesystem(); + + if ( ! $fs->exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { + self::generate_global_docker_compose_yml( $fs ); + } + + $EE_CONF_ROOT = EE_CONF_ROOT; + if ( ! EE::docker()::docker_network_exists( 'ee-global-network' ) ) { + if ( ! EE::docker()::create_network( 'ee-global-network' ) ) { + EE::error( 'Unable to create network ee-global-network' ); + } + } + if ( EE::docker()::docker_compose_up( EE_CONF_ROOT, [ 'nginx-proxy' ] ) ) { + $fs->dumpFile( "$EE_CONF_ROOT/nginx/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); + EE::success( "$proxy_type container is up." ); + } else { + EE::error( "There was some error in starting $proxy_type container. Please check logs." ); + } + } + } + } + + /** + * Generates global docker-compose.yml at EE_CONF_ROOT + * + * @param Filesystem $fs Filesystem object to write file + */ + public static function generate_global_docker_compose_yml( Filesystem $fs ) { + $img_versions = EE\Utils\get_image_versions(); + + $data = [ + 'services' => [ + [ + 'name' => 'nginx-proxy', + 'container_name' => EE_PROXY_TYPE, + 'image' => 'easyengine/nginx-proxy:' . $img_versions['easyengine/nginx-proxy'], + 'restart' => 'always', + 'ports' => [ + '80:80', + '443:443', + ], + 'environment' => [ + 'LOCAL_USER_ID=' . posix_geteuid(), + 'LOCAL_GROUP_ID=' . posix_getegid(), + ], + 'volumes' => [ + EE_CONF_ROOT . '/nginx/certs:/etc/nginx/certs', + EE_CONF_ROOT . '/nginx/dhparam:/etc/nginx/dhparam', + EE_CONF_ROOT . '/nginx/conf.d:/etc/nginx/conf.d', + EE_CONF_ROOT . '/nginx/htpasswd:/etc/nginx/htpasswd', + EE_CONF_ROOT . '/nginx/vhost.d:/etc/nginx/vhost.d', + EE_CONF_ROOT . '/nginx/html:/usr/share/nginx/html', + '/var/run/docker.sock:/tmp/docker.sock:ro', + ], + 'networks' => [ + 'global-network', + ], + + ], + [ + 'name' => 'elasticsearch', + 'container_name' => 'ee-global-elasticsearch', + 'image' => 'docker.elastic.co/elasticsearch/elasticsearch:6.4.0', + 'environment' => [ + 'bootstrap.memory_lock' => true, + 'ES_JAVA_OPTS' => '-Xms2G -Xmx4G', + ], + 'ulimits' => [ + 'memlock' => [ + 'sof' => '-1', + 'hard' => '-1', + ], + ], + 'volumes' => [ + '/opt/easyengine/services/elasticsearch' => '/usr/share/elasticsearch/data', + ], + + 'networks' => [ + 'global' => 'network', + ], + ], + [ + 'name' => GLOBAL_DB, + 'container_name' => GLOBAL_DB_CONTAINER, + 'image' => 'easyengine/mariadb:' . $img_versions['easyengine/mariadb'], + 'restart' => 'always', + 'environment' => [ + 'MYSQL_ROOT_PASSWORD=' . \EE\Utils\random_password(), + ], + 'volumes' => [ './app/db:/var/lib/mysql' ], + 'networks' => [ + 'global-network', + ], + ], + [ + 'name' => 'memcached', + 'container_name' => 'ee-global-memcached', + 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', + + ], + [ + 'name' => 'redis', + 'container_name' => 'ee-global-redis', + 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', + ], + ], + + ]; - EE::exec( "docker-compose start $service", true, true ); + $contents = EE\Utils\mustache_render( SITE_TEMPLATE_ROOT . '/global_docker_compose.yml.mustache', $data ); + $fs->dumpFile( EE_CONF_ROOT . '/docker-compose.yml', $contents ); } /** @@ -58,6 +210,7 @@ private function filter_service( $args ) { EE::error( "Unable to find global EasyEngine service $args[0]" ); } + $services = array_values( $services ); return $services[0]; } From a960cf4e71cb10c1d2eee374a62f6e4ff1d5ff04 Mon Sep 17 00:00:00 2001 From: sagarnasit Date: Fri, 21 Sep 2018 01:39:16 +0530 Subject: [PATCH 02/12] Move docker template from site-command to service-command --- service-command.php | 4 ++ src/Service_Command.php | 14 ++--- templates/global_docker_compose.yml.mustache | 54 ++++++++++++++++++++ 3 files changed, 65 insertions(+), 7 deletions(-) create mode 100644 templates/global_docker_compose.yml.mustache diff --git a/service-command.php b/service-command.php index 2d4c198..add644c 100644 --- a/service-command.php +++ b/service-command.php @@ -1,5 +1,9 @@ 'ee-global-elasticsearch', 'image' => 'docker.elastic.co/elasticsearch/elasticsearch:6.4.0', 'environment' => [ - 'bootstrap.memory_lock' => true, - 'ES_JAVA_OPTS' => '-Xms2G -Xmx4G', + 'bootstrap.memory_lock=true', + 'ES_JAVA_OPTS=-Xms2G -Xmx4G' ], 'ulimits' => [ 'memlock' => [ - 'sof' => '-1', - 'hard' => '-1', + 'soft=-1', + 'hard=-1' ], ], 'volumes' => [ - '/opt/easyengine/services/elasticsearch' => '/usr/share/elasticsearch/data', + EE_CONF_ROOT . 'services/elasticsearch:/usr/share/elasticsearch/data', ], 'networks' => [ - 'global' => 'network', + 'global-network', ], ], [ @@ -196,7 +196,7 @@ public static function generate_global_docker_compose_yml( Filesystem $fs ) { ]; - $contents = EE\Utils\mustache_render( SITE_TEMPLATE_ROOT . '/global_docker_compose.yml.mustache', $data ); + $contents = EE\Utils\mustache_render( SERVICE_TEMPLATE_ROOT . '/global_docker_compose.yml.mustache', $data ); $fs->dumpFile( EE_CONF_ROOT . '/docker-compose.yml', $contents ); } diff --git a/templates/global_docker_compose.yml.mustache b/templates/global_docker_compose.yml.mustache new file mode 100644 index 0000000..fa901de --- /dev/null +++ b/templates/global_docker_compose.yml.mustache @@ -0,0 +1,54 @@ +version: '3.5' + +services: + +{{#services}} + {{name}}: + container_name: {{container_name}} + image: {{image}} + {{#ports.0}} + ports: + {{#ports}} + - "{{.}}" + {{/ports}} + {{/ports.0}} + {{#depends_on}} + depends_on: + - {{.}} + {{/depends_on}} + {{#restart}} + restart: {{.}} + {{/restart}} + {{#command}} + command: {{.}} + {{/command}} + {{#labels.0}} + labels: + {{#labels}} + - "{{.}}" + {{/labels}} + {{/labels.0}} + {{#volumes.0}} + volumes: + {{#volumes}} + - "{{.}}" + {{/volumes}} + {{/volumes.0}} + {{#environment.0}} + environment: + {{#environment}} + - {{.}} + {{/environment}} + {{/environment.0}} + {{#networks.0}} + networks: + {{#networks}} + - {{.}} + {{/networks}} + {{/networks.0}} +{{/services}} + +networks: + global-network: + external: + name: ee-global-network From ab05ef7e880527fcc6fdd7c455bc33b87c5bcf22 Mon Sep 17 00:00:00 2001 From: --global Date: Fri, 21 Sep 2018 18:33:35 +0530 Subject: [PATCH 03/12] Move static commands to utills --- src/Service_Command.php | 136 +--------------------------------- src/helper/service-utills.php | 136 ++++++++++++++++++++++++++++++++++ 2 files changed, 139 insertions(+), 133 deletions(-) create mode 100644 src/helper/service-utills.php diff --git a/src/Service_Command.php b/src/Service_Command.php index 80c000f..c9c4248 100644 --- a/src/Service_Command.php +++ b/src/Service_Command.php @@ -1,6 +1,6 @@ exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { - self::generate_global_docker_compose_yml( $fs ); + \EE\Service\Utils\generate_global_docker_compose_yml( $fs ); } chdir( EE_CONF_ROOT ); EE::docker()::boot_container( $container, "docker-compose up -d $service" ); @@ -70,136 +70,6 @@ public function enable( $args, $assoc_args ) { } - /** - * Boots up the container if it is stopped or not running. - * @throws \EE\ExitException - */ - public static function nginx_proxy_check() { - $proxy_type = EE_PROXY_TYPE; - - if ( 'running' !== EE::docker()::container_status( $proxy_type ) ) { - - $port_80_status = EE\Site\Utils\get_curl_info( 'localhost', 80, true ); - $port_443_status = EE\Site\Utils\get_curl_info( 'localhost', 443, true ); - - // if any/both the port/s is/are occupied. - if ( ! ( $port_80_status && $port_443_status ) ) { - EE::error( 'Cannot create/start proxy container. Please make sure port 80 and 443 are free.' ); - } else { - - $fs = new Filesystem(); - - if ( ! $fs->exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { - self::generate_global_docker_compose_yml( $fs ); - } - - $EE_CONF_ROOT = EE_CONF_ROOT; - if ( ! EE::docker()::docker_network_exists( 'ee-global-network' ) ) { - if ( ! EE::docker()::create_network( 'ee-global-network' ) ) { - EE::error( 'Unable to create network ee-global-network' ); - } - } - if ( EE::docker()::docker_compose_up( EE_CONF_ROOT, [ 'nginx-proxy' ] ) ) { - $fs->dumpFile( "$EE_CONF_ROOT/nginx/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); - EE::success( "$proxy_type container is up." ); - } else { - EE::error( "There was some error in starting $proxy_type container. Please check logs." ); - } - } - } - } - - /** - * Generates global docker-compose.yml at EE_CONF_ROOT - * - * @param Filesystem $fs Filesystem object to write file - */ - public static function generate_global_docker_compose_yml( Filesystem $fs ) { - $img_versions = EE\Utils\get_image_versions(); - - $data = [ - 'services' => [ - [ - 'name' => 'nginx-proxy', - 'container_name' => EE_PROXY_TYPE, - 'image' => 'easyengine/nginx-proxy:' . $img_versions['easyengine/nginx-proxy'], - 'restart' => 'always', - 'ports' => [ - '80:80', - '443:443', - ], - 'environment' => [ - 'LOCAL_USER_ID=' . posix_geteuid(), - 'LOCAL_GROUP_ID=' . posix_getegid(), - ], - 'volumes' => [ - EE_CONF_ROOT . '/nginx/certs:/etc/nginx/certs', - EE_CONF_ROOT . '/nginx/dhparam:/etc/nginx/dhparam', - EE_CONF_ROOT . '/nginx/conf.d:/etc/nginx/conf.d', - EE_CONF_ROOT . '/nginx/htpasswd:/etc/nginx/htpasswd', - EE_CONF_ROOT . '/nginx/vhost.d:/etc/nginx/vhost.d', - EE_CONF_ROOT . '/nginx/html:/usr/share/nginx/html', - '/var/run/docker.sock:/tmp/docker.sock:ro', - ], - 'networks' => [ - 'global-network', - ], - - ], - [ - 'name' => 'elasticsearch', - 'container_name' => 'ee-global-elasticsearch', - 'image' => 'docker.elastic.co/elasticsearch/elasticsearch:6.4.0', - 'environment' => [ - 'bootstrap.memory_lock=true', - 'ES_JAVA_OPTS=-Xms2G -Xmx4G' - ], - 'ulimits' => [ - 'memlock' => [ - 'soft=-1', - 'hard=-1' - ], - ], - 'volumes' => [ - EE_CONF_ROOT . 'services/elasticsearch:/usr/share/elasticsearch/data', - ], - - 'networks' => [ - 'global-network', - ], - ], - [ - 'name' => GLOBAL_DB, - 'container_name' => GLOBAL_DB_CONTAINER, - 'image' => 'easyengine/mariadb:' . $img_versions['easyengine/mariadb'], - 'restart' => 'always', - 'environment' => [ - 'MYSQL_ROOT_PASSWORD=' . \EE\Utils\random_password(), - ], - 'volumes' => [ './app/db:/var/lib/mysql' ], - 'networks' => [ - 'global-network', - ], - ], - [ - 'name' => 'memcached', - 'container_name' => 'ee-global-memcached', - 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', - - ], - [ - 'name' => 'redis', - 'container_name' => 'ee-global-redis', - 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', - ], - ], - - ]; - - $contents = EE\Utils\mustache_render( SERVICE_TEMPLATE_ROOT . '/global_docker_compose.yml.mustache', $data ); - $fs->dumpFile( EE_CONF_ROOT . '/docker-compose.yml', $contents ); - } - /** * Returns valid service name from arguments. */ diff --git a/src/helper/service-utills.php b/src/helper/service-utills.php new file mode 100644 index 0000000..e4bd840 --- /dev/null +++ b/src/helper/service-utills.php @@ -0,0 +1,136 @@ +exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { + self::generate_global_docker_compose_yml( $fs ); + } + + $EE_CONF_ROOT = EE_CONF_ROOT; + if ( ! EE::docker()::docker_network_exists( 'ee-global-network' ) ) { + if ( ! EE::docker()::create_network( 'ee-global-network' ) ) { + EE::error( 'Unable to create network ee-global-network' ); + } + } + if ( EE::docker()::docker_compose_up( EE_CONF_ROOT, [ 'nginx-proxy' ] ) ) { + $fs->dumpFile( "$EE_CONF_ROOT/nginx/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); + EE::success( "$proxy_type container is up." ); + } else { + EE::error( "There was some error in starting $proxy_type container. Please check logs." ); + } + } + } +} + +/** + * Generates global docker-compose.yml at EE_CONF_ROOT + * + * @param Filesystem $fs Filesystem object to write file + */ +function generate_global_docker_compose_yml( Filesystem $fs ) { + $img_versions = EE\Utils\get_image_versions(); + + $data = [ + 'services' => [ + [ + 'name' => 'nginx-proxy', + 'container_name' => EE_PROXY_TYPE, + 'image' => 'easyengine/nginx-proxy:' . $img_versions['easyengine/nginx-proxy'], + 'restart' => 'always', + 'ports' => [ + '80:80', + '443:443', + ], + 'environment' => [ + 'LOCAL_USER_ID=' . posix_geteuid(), + 'LOCAL_GROUP_ID=' . posix_getegid(), + ], + 'volumes' => [ + EE_CONF_ROOT . '/nginx/certs:/etc/nginx/certs', + EE_CONF_ROOT . '/nginx/dhparam:/etc/nginx/dhparam', + EE_CONF_ROOT . '/nginx/conf.d:/etc/nginx/conf.d', + EE_CONF_ROOT . '/nginx/htpasswd:/etc/nginx/htpasswd', + EE_CONF_ROOT . '/nginx/vhost.d:/etc/nginx/vhost.d', + EE_CONF_ROOT . '/nginx/html:/usr/share/nginx/html', + '/var/run/docker.sock:/tmp/docker.sock:ro', + ], + 'networks' => [ + 'global-network', + ], + + ], + [ + 'name' => 'elasticsearch', + 'container_name' => 'ee-global-elasticsearch', + 'image' => 'docker.elastic.co/elasticsearch/elasticsearch:6.4.0', + 'environment' => [ + 'bootstrap.memory_lock=true', + 'ES_JAVA_OPTS=-Xms2G -Xmx4G' + ], + 'ulimits' => [ + 'memlock' => [ + 'soft=-1', + 'hard=-1' + ], + ], + 'volumes' => [ + EE_CONF_ROOT . 'services/elasticsearch:/usr/share/elasticsearch/data', + ], + + 'networks' => [ + 'global-network', + ], + ], + [ + 'name' => GLOBAL_DB, + 'container_name' => GLOBAL_DB_CONTAINER, + 'image' => 'easyengine/mariadb:' . $img_versions['easyengine/mariadb'], + 'restart' => 'always', + 'environment' => [ + 'MYSQL_ROOT_PASSWORD=' . \EE\Utils\random_password(), + ], + 'volumes' => [ './app/db:/var/lib/mysql' ], + 'networks' => [ + 'global-network', + ], + ], + [ + 'name' => 'memcached', + 'container_name' => 'ee-global-memcached', + 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', + + ], + [ + 'name' => 'redis', + 'container_name' => 'ee-global-redis', + 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', + ], + ], + + ]; + + $contents = EE\Utils\mustache_render( SERVICE_TEMPLATE_ROOT . '/global_docker_compose.yml.mustache', $data ); + $fs->dumpFile( EE_CONF_ROOT . '/docker-compose.yml', $contents ); +} From 2d2591085391449155bcdb1e412dd1f2c484d43a Mon Sep 17 00:00:00 2001 From: --global Date: Tue, 25 Sep 2018 15:02:28 +0530 Subject: [PATCH 04/12] Change EE_CONF_ROOT to EE_ROOT_DIR --- src/Service_Command.php | 2 +- src/helper/service-utills.php | 41 +++++++++++++---------------------- 2 files changed, 16 insertions(+), 27 deletions(-) diff --git a/src/Service_Command.php b/src/Service_Command.php index c9c4248..e291f65 100644 --- a/src/Service_Command.php +++ b/src/Service_Command.php @@ -51,7 +51,7 @@ public function enable( $args, $assoc_args ) { $service = $this->filter_service( $args ); $container = "ee-global-$service"; - if ( 'ee-global-nginx-proxy' === $container ) { + if ( EE_PROXY_TYPE === $container ) { \EE\Service\Utils\nginx_proxy_check(); } else { $status = EE::docker()::container_status( $container ); diff --git a/src/helper/service-utills.php b/src/helper/service-utills.php index e4bd840..7e7d75a 100644 --- a/src/helper/service-utills.php +++ b/src/helper/service-utills.php @@ -24,18 +24,18 @@ function nginx_proxy_check() { $fs = new Filesystem(); - if ( ! $fs->exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { + if ( ! $fs->exists( EE_ROOT_DIR . '/docker-compose.yml' ) ) { self::generate_global_docker_compose_yml( $fs ); } - $EE_CONF_ROOT = EE_CONF_ROOT; + $EE_ROOT_DIR = EE_ROOT_DIR; if ( ! EE::docker()::docker_network_exists( 'ee-global-network' ) ) { if ( ! EE::docker()::create_network( 'ee-global-network' ) ) { EE::error( 'Unable to create network ee-global-network' ); } } - if ( EE::docker()::docker_compose_up( EE_CONF_ROOT, [ 'nginx-proxy' ] ) ) { - $fs->dumpFile( "$EE_CONF_ROOT/nginx/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); + if ( EE::docker()::docker_compose_up( EE_ROOT_DIR, [ 'nginx-proxy' ] ) ) { + $fs->dumpFile( "$EE_ROOT_DIR/services/nginx-proxy/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); EE::success( "$proxy_type container is up." ); } else { EE::error( "There was some error in starting $proxy_type container. Please check logs." ); @@ -45,7 +45,7 @@ function nginx_proxy_check() { } /** - * Generates global docker-compose.yml at EE_CONF_ROOT + * Generates global docker-compose.yml at EE_ROOT_DIR * * @param Filesystem $fs Filesystem object to write file */ @@ -68,12 +68,12 @@ function generate_global_docker_compose_yml( Filesystem $fs ) { 'LOCAL_GROUP_ID=' . posix_getegid(), ], 'volumes' => [ - EE_CONF_ROOT . '/nginx/certs:/etc/nginx/certs', - EE_CONF_ROOT . '/nginx/dhparam:/etc/nginx/dhparam', - EE_CONF_ROOT . '/nginx/conf.d:/etc/nginx/conf.d', - EE_CONF_ROOT . '/nginx/htpasswd:/etc/nginx/htpasswd', - EE_CONF_ROOT . '/nginx/vhost.d:/etc/nginx/vhost.d', - EE_CONF_ROOT . '/nginx/html:/usr/share/nginx/html', + EE_ROOT_DIR . '/services/nginx-proxy/certs:/etc/nginx/certs', + EE_ROOT_DIR . '/services/nginx-proxy/dhparam:/etc/nginx/dhparam', + EE_ROOT_DIR . '/services/nginx-proxy/conf.d:/etc/nginx/conf.d', + EE_ROOT_DIR . '/services/nginx-proxy/htpasswd:/etc/nginx/htpasswd', + EE_ROOT_DIR . '/services/nginx-proxy/vhost.d:/etc/nginx/vhost.d', + EE_ROOT_DIR . '/services/nginx-proxy/html:/usr/share/nginx/html', '/var/run/docker.sock:/tmp/docker.sock:ro', ], 'networks' => [ @@ -87,16 +87,16 @@ function generate_global_docker_compose_yml( Filesystem $fs ) { 'image' => 'docker.elastic.co/elasticsearch/elasticsearch:6.4.0', 'environment' => [ 'bootstrap.memory_lock=true', - 'ES_JAVA_OPTS=-Xms2G -Xmx4G' + 'ES_JAVA_OPTS=-Xms2G -Xmx4G', ], 'ulimits' => [ 'memlock' => [ 'soft=-1', - 'hard=-1' + 'hard=-1', ], ], 'volumes' => [ - EE_CONF_ROOT . 'services/elasticsearch:/usr/share/elasticsearch/data', + EE_ROOT_DIR . 'services/elasticsearch:/usr/share/elasticsearch/data', ], 'networks' => [ @@ -116,21 +116,10 @@ function generate_global_docker_compose_yml( Filesystem $fs ) { 'global-network', ], ], - [ - 'name' => 'memcached', - 'container_name' => 'ee-global-memcached', - 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', - - ], - [ - 'name' => 'redis', - 'container_name' => 'ee-global-redis', - 'image' => 'easyengine/nginx-proxy:v4.0.0-beta.6', - ], ], ]; $contents = EE\Utils\mustache_render( SERVICE_TEMPLATE_ROOT . '/global_docker_compose.yml.mustache', $data ); - $fs->dumpFile( EE_CONF_ROOT . '/docker-compose.yml', $contents ); + $fs->dumpFile( EE_ROOT_DIR . '/docker-compose.yml', $contents ); } From f5c2a6c58817466129b6b784ccd2fed719f0943d Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Tue, 25 Sep 2018 17:43:20 +0530 Subject: [PATCH 05/12] Add constants Signed-off-by: Riddhesh Sanghvi --- service-command.php | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/service-command.php b/service-command.php index add644c..c1de75b 100644 --- a/service-command.php +++ b/service-command.php @@ -4,6 +4,30 @@ define( 'SERVICE_TEMPLATE_ROOT', __DIR__ . '/templates' ); } +if ( ! defined( 'GLOBAL_DB' ) ) { + define( 'GLOBAL_DB', 'global-db' ); +} + +if ( ! defined( 'GLOBAL_DB_CONTAINER' ) ) { + define( 'GLOBAL_DB_CONTAINER', 'ee-global-db' ); +} + +if ( ! defined( 'GLOBAL_FRONTEND_NETWORK' ) ) { + define( 'GLOBAL_FRONTEND_NETWORK', 'ee-global-frontend-network' ); +} + +if ( ! defined( 'GLOBAL_BACKEND_NETWORK' ) ) { + define( 'GLOBAL_BACKEND_NETWORK', 'ee-global-backend-network' ); +} + +if ( ! defined( 'GLOBAL_REDIS' ) ) { + define( 'GLOBAL_REDIS', 'global-redis' ); +} + +if ( ! defined( 'GLOBAL_REDIS_CONTAINER' ) ) { + define( 'GLOBAL_REDIS_CONTAINER', 'ee-global-redis' ); +} + if ( ! class_exists( 'EE' ) ) { return; } From 94855ed7da2a63de0ae4071d332af8218a6d630f Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Tue, 25 Sep 2018 17:43:59 +0530 Subject: [PATCH 06/12] Update utility functions and add global-redis Signed-off-by: Riddhesh Sanghvi --- src/helper/service-utills.php | 121 +++++++++++++++++++++++----------- 1 file changed, 82 insertions(+), 39 deletions(-) diff --git a/src/helper/service-utills.php b/src/helper/service-utills.php index 7e7d75a..a4d8f87 100644 --- a/src/helper/service-utills.php +++ b/src/helper/service-utills.php @@ -10,12 +10,14 @@ * @throws EE\ExitException */ function nginx_proxy_check() { - $proxy_type = EE_PROXY_TYPE; + $proxy_type = EE_PROXY_TYPE; if ( 'running' !== EE::docker()::container_status( $proxy_type ) ) { - - $port_80_status = EE\Site\Utils\get_curl_info( 'localhost', 80, true ); - $port_443_status = EE\Site\Utils\get_curl_info( 'localhost', 443, true ); + /** + * Checking ports. + */ + $port_80_status = get_curl_info( 'localhost', 80, true ); + $port_443_status = get_curl_info( 'localhost', 443, true ); // if any/both the port/s is/are occupied. if ( ! ( $port_80_status && $port_443_status ) ) { @@ -24,18 +26,23 @@ function nginx_proxy_check() { $fs = new Filesystem(); - if ( ! $fs->exists( EE_ROOT_DIR . '/docker-compose.yml' ) ) { - self::generate_global_docker_compose_yml( $fs ); + if ( ! $fs->exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { + generate_global_docker_compose_yml( $fs ); } - $EE_ROOT_DIR = EE_ROOT_DIR; - if ( ! EE::docker()::docker_network_exists( 'ee-global-network' ) ) { - if ( ! EE::docker()::create_network( 'ee-global-network' ) ) { - EE::error( 'Unable to create network ee-global-network' ); + $EE_CONF_ROOT = EE_CONF_ROOT; + if ( ! EE::docker()::docker_network_exists( GLOBAL_BACKEND_NETWORK ) ) { + if ( ! EE::docker()::create_network( GLOBAL_BACKEND_NETWORK ) ) { + EE::error( 'Unable to create network ' . GLOBAL_BACKEND_NETWORK ); } } - if ( EE::docker()::docker_compose_up( EE_ROOT_DIR, [ 'nginx-proxy' ] ) ) { - $fs->dumpFile( "$EE_ROOT_DIR/services/nginx-proxy/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); + if ( ! EE::docker()::docker_network_exists( GLOBAL_FRONTEND_NETWORK ) ) { + if ( ! EE::docker()::create_network( GLOBAL_FRONTEND_NETWORK ) ) { + EE::error( 'Unable to create network ' . GLOBAL_FRONTEND_NETWORK ); + } + } + if ( EE::docker()::docker_compose_up( EE_CONF_ROOT, [ 'global-nginx-proxy' ] ) ) { + $fs->dumpFile( "$EE_CONF_ROOT/nginx/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); EE::success( "$proxy_type container is up." ); } else { EE::error( "There was some error in starting $proxy_type container. Please check logs." ); @@ -45,7 +52,35 @@ function nginx_proxy_check() { } /** - * Generates global docker-compose.yml at EE_ROOT_DIR + * Function to start global conainer if it is not running. + * + * @param string $container Global container to be brought up. + */ +function init_global_container( $service, $container = '' ) { + + if ( empty( $container ) ) { + $container = 'ee-' . $service; + } + if ( ! EE::docker()::docker_network_exists( GLOBAL_BACKEND_NETWORK ) ) { + if ( ! EE::docker()::create_network( GLOBAL_BACKEND_NETWORK ) ) { + EE::error( 'Unable to create network ' . GLOBAL_BACKEND_NETWORK ); + } + } + + $fs = new Filesystem(); + + if ( ! $fs->exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { + generate_global_docker_compose_yml( $fs ); + } + + if ( 'running' !== EE::docker()::container_status( $container ) ) { + chdir( EE_CONF_ROOT ); + EE::docker()::boot_container( $container, 'docker-compose up -d ' . $container ); + } +} + +/** + * Generates global docker-compose.yml at EE_CONF_ROOT * * @param Filesystem $fs Filesystem object to write file */ @@ -55,7 +90,7 @@ function generate_global_docker_compose_yml( Filesystem $fs ) { $data = [ 'services' => [ [ - 'name' => 'nginx-proxy', + 'name' => 'global-nginx-proxy', 'container_name' => EE_PROXY_TYPE, 'image' => 'easyengine/nginx-proxy:' . $img_versions['easyengine/nginx-proxy'], 'restart' => 'always', @@ -68,18 +103,40 @@ function generate_global_docker_compose_yml( Filesystem $fs ) { 'LOCAL_GROUP_ID=' . posix_getegid(), ], 'volumes' => [ - EE_ROOT_DIR . '/services/nginx-proxy/certs:/etc/nginx/certs', - EE_ROOT_DIR . '/services/nginx-proxy/dhparam:/etc/nginx/dhparam', - EE_ROOT_DIR . '/services/nginx-proxy/conf.d:/etc/nginx/conf.d', - EE_ROOT_DIR . '/services/nginx-proxy/htpasswd:/etc/nginx/htpasswd', - EE_ROOT_DIR . '/services/nginx-proxy/vhost.d:/etc/nginx/vhost.d', - EE_ROOT_DIR . '/services/nginx-proxy/html:/usr/share/nginx/html', + EE_CONF_ROOT . '/nginx/certs:/etc/nginx/certs', + EE_CONF_ROOT . '/nginx/dhparam:/etc/nginx/dhparam', + EE_CONF_ROOT . '/nginx/conf.d:/etc/nginx/conf.d', + EE_CONF_ROOT . '/nginx/htpasswd:/etc/nginx/htpasswd', + EE_CONF_ROOT . '/nginx/vhost.d:/etc/nginx/vhost.d', + EE_CONF_ROOT . '/nginx/html:/usr/share/nginx/html', '/var/run/docker.sock:/tmp/docker.sock:ro', ], 'networks' => [ - 'global-network', + 'global-frontend-network', + ], + ], + [ + 'name' => GLOBAL_DB, + 'container_name' => GLOBAL_DB_CONTAINER, + 'image' => 'easyengine/mariadb:' . $img_versions['easyengine/mariadb'], + 'restart' => 'always', + 'environment' => [ + 'MYSQL_ROOT_PASSWORD=' . \EE\Utils\random_password(), + ], + 'volumes' => [ './app/db:/var/lib/mysql' ], + 'networks' => [ + 'global-backend-network', + ], + ], + [ + 'name' => GLOBAL_REDIS, + 'container_name' => GLOBAL_REDIS_CONTAINER, + 'image' => 'easyengine/redis:' . $img_versions['easyengine/redis'], + 'restart' => 'always', + 'volumes' => [ EE_CONF_ROOT . '/services/redis:/data' ], + 'networks' => [ + 'global-backend-network', ], - ], [ 'name' => 'elasticsearch', @@ -96,30 +153,16 @@ function generate_global_docker_compose_yml( Filesystem $fs ) { ], ], 'volumes' => [ - EE_ROOT_DIR . 'services/elasticsearch:/usr/share/elasticsearch/data', + EE_CONF_ROOT . 'services/elasticsearch:/usr/share/elasticsearch/data', ], 'networks' => [ - 'global-network', - ], - ], - [ - 'name' => GLOBAL_DB, - 'container_name' => GLOBAL_DB_CONTAINER, - 'image' => 'easyengine/mariadb:' . $img_versions['easyengine/mariadb'], - 'restart' => 'always', - 'environment' => [ - 'MYSQL_ROOT_PASSWORD=' . \EE\Utils\random_password(), - ], - 'volumes' => [ './app/db:/var/lib/mysql' ], - 'networks' => [ - 'global-network', + 'global-backend-network', ], ], ], - ]; $contents = EE\Utils\mustache_render( SERVICE_TEMPLATE_ROOT . '/global_docker_compose.yml.mustache', $data ); - $fs->dumpFile( EE_ROOT_DIR . '/docker-compose.yml', $contents ); + $fs->dumpFile( EE_CONF_ROOT . '/docker-compose.yml', $contents ); } From 7abddd3d216fd0c68b075ec5f2f79e1ac2153813 Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Tue, 25 Sep 2018 17:44:29 +0530 Subject: [PATCH 07/12] Update functional calls according to new utility Signed-off-by: Riddhesh Sanghvi --- src/Service_Command.php | 24 +++++++----------------- 1 file changed, 7 insertions(+), 17 deletions(-) diff --git a/src/Service_Command.php b/src/Service_Command.php index e291f65..1cfbb38 100644 --- a/src/Service_Command.php +++ b/src/Service_Command.php @@ -1,6 +1,7 @@ filter_service( $args ); - $container = "ee-global-$service"; + $service = $this->filter_service( $args ); + $service_name = "global-$service"; + $container = "ee-$service_name"; if ( EE_PROXY_TYPE === $container ) { \EE\Service\Utils\nginx_proxy_check(); } else { - $status = EE::docker()::container_status( $container ); - if ( 'running' !== $status ) { - - $fs = new Filesystem(); - - if ( ! $fs->exists( EE_CONF_ROOT . '/docker-compose.yml' ) ) { - \EE\Service\Utils\generate_global_docker_compose_yml( $fs ); - } - chdir( EE_CONF_ROOT ); - EE::docker()::boot_container( $container, "docker-compose up -d $service" ); - - } + \EE\Service\Utils\init_global_container( $service_name ); } } @@ -81,6 +70,7 @@ private function filter_service( $args ) { } $services = array_values( $services ); + return $services[0]; } @@ -138,7 +128,7 @@ public function restart( $args, $assoc_args ) { */ public function reload( $args, $assoc_args ) { $service = $this->filter_service( $args ); - $command = $this->service_reload_command( $service ); + $command = $this->service_reload_command( $service ); EE::exec( "docker-compose exec $service $command", true, true ); } From 18658eddb8e65409543bc46eeb99b067451b0675 Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Tue, 25 Sep 2018 17:48:13 +0530 Subject: [PATCH 08/12] Fix reloading of containers Signed-off-by: Riddhesh Sanghvi --- src/Service_Command.php | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Service_Command.php b/src/Service_Command.php index 1cfbb38..17fd940 100644 --- a/src/Service_Command.php +++ b/src/Service_Command.php @@ -129,7 +129,11 @@ public function restart( $args, $assoc_args ) { public function reload( $args, $assoc_args ) { $service = $this->filter_service( $args ); $command = $this->service_reload_command( $service ); - EE::exec( "docker-compose exec $service $command", true, true ); + if ( $command ) { + EE::exec( "docker-compose exec $service $command", true, true ); + } else { + EE::warning( "$service can not be reloaded." ); + } } /** @@ -145,6 +149,6 @@ private function service_reload_command( string $service ) { 'nginx-proxy' => "sh -c 'nginx -t && service nginx reload'", ]; - return $command_map[ $service ]; + return array_key_exists( $service, $command_map ) ? $command_map[ $service ] : false; } } From c7aa0eaefabbe770b0daa9d38278befc8cf6247b Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Tue, 25 Sep 2018 17:53:24 +0530 Subject: [PATCH 09/12] Rename file Signed-off-by: Riddhesh Sanghvi --- src/helper/{service-utills.php => service-utils.php} | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename src/helper/{service-utills.php => service-utils.php} (100%) diff --git a/src/helper/service-utills.php b/src/helper/service-utils.php similarity index 100% rename from src/helper/service-utills.php rename to src/helper/service-utils.php From cabb67774fdd13c79aa86bc00628a97c5d5d9195 Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Tue, 25 Sep 2018 18:50:08 +0530 Subject: [PATCH 10/12] Update template according to network changes Signed-off-by: Riddhesh Sanghvi --- templates/global_docker_compose.yml.mustache | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/templates/global_docker_compose.yml.mustache b/templates/global_docker_compose.yml.mustache index fa901de..57e485d 100644 --- a/templates/global_docker_compose.yml.mustache +++ b/templates/global_docker_compose.yml.mustache @@ -49,6 +49,9 @@ services: {{/services}} networks: - global-network: - external: - name: ee-global-network + global-frontend-network: + external: + name: ee-global-frontend-network + global-backend-network: + external: + name: ee-global-backend-network From f792ed79e4830edb922f5401a277efeb6c1c8f4a Mon Sep 17 00:00:00 2001 From: Riddhesh Sanghvi Date: Tue, 25 Sep 2018 18:50:43 +0530 Subject: [PATCH 11/12] Remove elastic search service for now Signed-off-by: Riddhesh Sanghvi --- src/helper/service-utils.php | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/src/helper/service-utils.php b/src/helper/service-utils.php index a4d8f87..dcde826 100644 --- a/src/helper/service-utils.php +++ b/src/helper/service-utils.php @@ -138,28 +138,6 @@ function generate_global_docker_compose_yml( Filesystem $fs ) { 'global-backend-network', ], ], - [ - 'name' => 'elasticsearch', - 'container_name' => 'ee-global-elasticsearch', - 'image' => 'docker.elastic.co/elasticsearch/elasticsearch:6.4.0', - 'environment' => [ - 'bootstrap.memory_lock=true', - 'ES_JAVA_OPTS=-Xms2G -Xmx4G', - ], - 'ulimits' => [ - 'memlock' => [ - 'soft=-1', - 'hard=-1', - ], - ], - 'volumes' => [ - EE_CONF_ROOT . 'services/elasticsearch:/usr/share/elasticsearch/data', - ], - - 'networks' => [ - 'global-backend-network', - ], - ], ], ]; From 8b0dd364bb7d314760db7ae0c30f184039a0fcf8 Mon Sep 17 00:00:00 2001 From: --global Date: Tue, 25 Sep 2018 20:13:28 +0530 Subject: [PATCH 12/12] merge two if condition into one --- src/helper/service-utils.php | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/src/helper/service-utils.php b/src/helper/service-utils.php index dcde826..6f978e0 100644 --- a/src/helper/service-utils.php +++ b/src/helper/service-utils.php @@ -31,15 +31,13 @@ function nginx_proxy_check() { } $EE_CONF_ROOT = EE_CONF_ROOT; - if ( ! EE::docker()::docker_network_exists( GLOBAL_BACKEND_NETWORK ) ) { - if ( ! EE::docker()::create_network( GLOBAL_BACKEND_NETWORK ) ) { - EE::error( 'Unable to create network ' . GLOBAL_BACKEND_NETWORK ); - } + if ( ! EE::docker()::docker_network_exists( GLOBAL_BACKEND_NETWORK ) && + ! EE::docker()::create_network( GLOBAL_BACKEND_NETWORK ) ) { + EE::error( 'Unable to create network ' . GLOBAL_BACKEND_NETWORK ); } - if ( ! EE::docker()::docker_network_exists( GLOBAL_FRONTEND_NETWORK ) ) { - if ( ! EE::docker()::create_network( GLOBAL_FRONTEND_NETWORK ) ) { - EE::error( 'Unable to create network ' . GLOBAL_FRONTEND_NETWORK ); - } + if ( ! EE::docker()::docker_network_exists( GLOBAL_FRONTEND_NETWORK ) && + ! EE::docker()::create_network( GLOBAL_FRONTEND_NETWORK ) ) { + EE::error( 'Unable to create network ' . GLOBAL_FRONTEND_NETWORK ); } if ( EE::docker()::docker_compose_up( EE_CONF_ROOT, [ 'global-nginx-proxy' ] ) ) { $fs->dumpFile( "$EE_CONF_ROOT/nginx/conf.d/custom.conf", file_get_contents( EE_ROOT . '/templates/custom.conf.mustache' ) ); @@ -61,10 +59,9 @@ function init_global_container( $service, $container = '' ) { if ( empty( $container ) ) { $container = 'ee-' . $service; } - if ( ! EE::docker()::docker_network_exists( GLOBAL_BACKEND_NETWORK ) ) { - if ( ! EE::docker()::create_network( GLOBAL_BACKEND_NETWORK ) ) { - EE::error( 'Unable to create network ' . GLOBAL_BACKEND_NETWORK ); - } + if ( ! EE::docker()::docker_network_exists( GLOBAL_BACKEND_NETWORK ) && + ! EE::docker()::create_network( GLOBAL_BACKEND_NETWORK ) ) { + EE::error( 'Unable to create network ' . GLOBAL_BACKEND_NETWORK ); } $fs = new Filesystem();