Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 0 additions & 4 deletions service-command.php
Original file line number Diff line number Diff line change
Expand Up @@ -28,10 +28,6 @@
define( 'GLOBAL_REDIS_CONTAINER', 'ee-global-redis' );
}

if ( ! defined( 'EE_SERVICE_DIR' ) ) {
define( 'EE_SERVICE_DIR', EE_ROOT_DIR . '/services' );
}

if ( ! class_exists( 'EE' ) ) {
return;
}
Expand Down
203 changes: 107 additions & 96 deletions src/helper/service-utils.php
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ function nginx_proxy_check() {
if ( $config_80_port !== trim( $launch_80_test->stdout ) || $config_443_port !== trim( $launch_443_test->stdout ) ) {
EE::error( "Ports of current running nginx-proxy and ports specified in EasyEngine config file don't match." );
}

return;
}

Expand All @@ -39,13 +40,10 @@ function nginx_proxy_check() {

$fs = new Filesystem();

create_global_volumes();

if ( ! $fs->exists( EE_SERVICE_DIR . '/docker-compose.yml' ) ) {
generate_global_docker_compose_yml( $fs );
}

$EE_ROOT_DIR = EE_ROOT_DIR;
boot_global_networks();
if ( ! EE::docker()::docker_compose_up( EE_SERVICE_DIR . '', [ 'global-nginx-proxy' ] ) ) {
EE::error( "There was some error in starting $proxy_type container. Please check logs." );
Expand Down Expand Up @@ -74,12 +72,12 @@ function init_global_container( $service, $container = '' ) {
}

if ( 'running' !== EE::docker()::container_status( $container ) ) {
chdir( EE_SERVICE_DIR . '' );

if ( empty( EE::docker()::get_volumes_by_label( $service ) ) ) {
create_global_volumes();
chdir( EE_SERVICE_DIR . '' );
$db_conf_file = EE_SERVICE_DIR . '/mariadb/conf/my.cnf';
if ( IS_DARWIN && GLOBAL_DB === $service && ! $fs->exists( $db_conf_file ) ) {
$fs->copy( SERVICE_TEMPLATE_ROOT . '/my.cnf.mustache', $db_conf_file );
}

EE::docker()::boot_container( $container, 'docker-compose up -d ' . $service );
} else {
EE::log( "$service: Service already running" );
Expand All @@ -106,157 +104,113 @@ function boot_global_networks() {
}

/**
* Function to create all necessary volumes for global containers.
* Generates global docker-compose.yml at EE_ROOT_DIR
*
* @param Filesystem $fs Filesystem object to write file.
*/
function create_global_volumes() {
function generate_global_docker_compose_yml( Filesystem $fs ) {

$img_versions = EE\Utils\get_image_versions();
$config_80_port = \EE\Utils\get_config_value( 'proxy_80_port', 80 );
$config_443_port = \EE\Utils\get_config_value( 'proxy_443_port', 443 );

$volumes = [
$volumes_nginx_proxy = [
[
'name' => 'certs',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/certs',
'container_path' => '/etc/nginx/certs',
],
[
'name' => 'dhparam',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/dhparam',
'container_path' => '/etc/nginx/dhparam',
],
[
'name' => 'confd',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/conf.d',
'container_path' => '/etc/nginx/conf.d',
],
[
'name' => 'htpasswd',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/htpasswd',
'container_path' => '/etc/nginx/htpasswd',
],
[
'name' => 'vhostd',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/vhost.d',
'container_path' => '/etc/nginx/vhost.d',
],
[
'name' => 'html',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/html',
'container_path' => '/usr/share/nginx/html',
],
[
'name' => 'nginx_proxy_logs',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/logs',
'container_path' => '/var/log/nginx',
],
[
'name' => 'nginx_proxy_logs',
'path_to_symlink' => EE_SERVICE_DIR . '/nginx-proxy/logs',
'container_path' => '/var/log/nginx',
],
[
'name' => '/var/run/docker.sock',
'path_to_symlink' => '/var/run/docker.sock',
'container_path' => '/tmp/docker.sock:ro',
'skip_volume' => true,
],
];

$volumes_db = [
[
'name' => 'db_data',
'path_to_symlink' => EE_SERVICE_DIR . '/mariadb/data',
'container_path' => '/var/lib/mysql',
],
[
'name' => 'db_conf',
'path_to_symlink' => EE_SERVICE_DIR . '/mariadb/conf',
'container_path' => '/etc/mysql',
'skip_darwin' => true,
],
[
'name' => 'db_conf',
'path_to_symlink' => EE_SERVICE_DIR . '/mariadb/conf/my.cnf',
'container_path' => '/etc/mysql/my.cnf',
'skip_linux' => true,
'skip_volume' => true,
],
[
'name' => 'db_logs',
'path_to_symlink' => EE_SERVICE_DIR . '/mariadb/logs',
'container_path' => '/var/log/mysql',
],
];
$volumes_redis = [
[
'name' => 'redis_data',
'path_to_symlink' => EE_SERVICE_DIR . '/redis/data',
'container_path' => '/data',
'skip_darwin' => true,
],
[
'name' => 'redis_conf',
'path_to_symlink' => EE_SERVICE_DIR . '/redis/conf',
'container_path' => '/usr/local/etc/redis',
'skip_darwin' => true,
],
[
'name' => 'redis_logs',
'path_to_symlink' => EE_SERVICE_DIR . '/redis/logs',
'container_path' => '/var/log/redis',
],
];

if ( empty( EE::docker()::get_volumes_by_label( 'global-nginx-proxy' ) ) ) {
EE::docker()::create_volumes( 'global-nginx-proxy', $volumes, false );
}

if ( empty( EE::docker()::get_volumes_by_label( GLOBAL_DB ) ) ) {
EE::docker()::create_volumes( GLOBAL_DB, $volumes_db, false );
}

if ( empty( EE::docker()::get_volumes_by_label( GLOBAL_REDIS ) ) ) {
EE::docker()::create_volumes( GLOBAL_REDIS, $volumes_redis, false );
}
}

/**
* Generates global docker-compose.yml at EE_ROOT_DIR
*
* @param Filesystem $fs Filesystem object to write file.
*/
function generate_global_docker_compose_yml( Filesystem $fs ) {

$img_versions = EE\Utils\get_image_versions();
$config_80_port = \EE\Utils\get_config_value( 'proxy_80_port', 80 );
$config_443_port = \EE\Utils\get_config_value( 'proxy_443_port', 443 );
if ( ! IS_DARWIN ) {

$data = [
'services' => [
[
'name' => 'global-nginx-proxy',
'container_name' => EE_PROXY_TYPE,
'image' => 'easyengine/nginx-proxy:' . $img_versions['easyengine/nginx-proxy'],
'restart' => 'always',
'ports' => [
"$config_80_port:80",
"$config_443_port:443",
],
'environment' => [
'LOCAL_USER_ID=' . posix_geteuid(),
'LOCAL_GROUP_ID=' . posix_getegid(),
],
'volumes' => [
'certs:/etc/nginx/certs',
'dhparam:/etc/nginx/dhparam',
'confd:/etc/nginx/conf.d',
'htpasswd:/etc/nginx/htpasswd',
'vhostd:/etc/nginx/vhost.d',
'html:/usr/share/nginx/html',
'nginx_proxy_logs:/var/log/nginx',
'/var/run/docker.sock:/tmp/docker.sock:ro',
],
'networks' => [
'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' => [
'db_data:/var/lib/mysql',
'db_conf:/etc/mysql',
'db_logs:/var/log/mysql',
],
'networks' => [
'global-backend-network',
],
],
[
'name' => GLOBAL_REDIS,
'container_name' => GLOBAL_REDIS_CONTAINER,
'image' => 'easyengine/redis:' . $img_versions['easyengine/redis'],
'restart' => 'always',
'command' => '["redis-server", "/usr/local/etc/redis/redis.conf"]',
'volumes' => [
'redis_data:/data',
'redis_conf:/usr/local/etc/redis',
'redis_logs:/var/log/redis',
],
'networks' => [
'global-backend-network',
],
],
],
'created_volumes' => [
$data['created_volumes'] = [
'external_vols' => [
[ 'prefix' => 'global-nginx-proxy', 'ext_vol_name' => 'certs' ],
[ 'prefix' => 'global-nginx-proxy', 'ext_vol_name' => 'dhparam' ],
Expand All @@ -272,6 +226,63 @@ function generate_global_docker_compose_yml( Filesystem $fs ) {
[ 'prefix' => GLOBAL_REDIS, 'ext_vol_name' => 'redis_conf' ],
[ 'prefix' => GLOBAL_REDIS, 'ext_vol_name' => 'redis_logs' ],
],
];

if ( empty( EE::docker()::get_volumes_by_label( 'global-nginx-proxy' ) ) ) {
EE::docker()::create_volumes( 'global-nginx-proxy', $volumes_nginx_proxy, false );
}

if ( empty( EE::docker()::get_volumes_by_label( GLOBAL_DB ) ) ) {
EE::docker()::create_volumes( GLOBAL_DB, $volumes_db, false );
}

if ( empty( EE::docker()::get_volumes_by_label( GLOBAL_REDIS ) ) ) {
EE::docker()::create_volumes( GLOBAL_REDIS, $volumes_redis, false );
}
}

$data['services'] = [
[
'name' => 'global-nginx-proxy',
'container_name' => EE_PROXY_TYPE,
'image' => 'easyengine/nginx-proxy:' . $img_versions['easyengine/nginx-proxy'],
'restart' => 'always',
'ports' => [
"$config_80_port:80",
"$config_443_port:443",
],
'environment' => [
'LOCAL_USER_ID=' . posix_geteuid(),
'LOCAL_GROUP_ID=' . posix_getegid(),
],
'volumes' => \EE_DOCKER::get_mounting_volume_array( $volumes_nginx_proxy ),
'networks' => [
'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' => \EE_DOCKER::get_mounting_volume_array( $volumes_db ),
'networks' => [
'global-backend-network',
],
],
[
'name' => GLOBAL_REDIS,
'container_name' => GLOBAL_REDIS_CONTAINER,
'image' => 'easyengine/redis:' . $img_versions['easyengine/redis'],
'restart' => 'always',
'command' => '["redis-server", "/usr/local/etc/redis/redis.conf"]',
'volumes' => \EE_DOCKER::get_mounting_volume_array( $volumes_redis ),
'networks' => [
'global-backend-network',
],
],
];

Expand Down
Loading