array('type'=>'key', 'label' => 'Identifiant'), 'machine' => array('type'=>'integer', 'label' => 'Machine hôte','link'=>'plugin/docker/DockerMachine.class.php'), 'client' => array('type'=>'integer', 'label' => 'Client','link'=>'plugin/client/Client.class.php'), 'domain' => array('type'=>'textarea', 'label' => 'Nom de domaine'), 'port' => array('type'=>'integer', 'label' => 'Port docker'), 'mysqlRootPassword' => array('type'=>'password', 'label' => 'Pass. Mysql Root'), 'mysqlPassword' => array('type'=>'password', 'label' => 'Pass. Mysql App'), 'git' => array('type'=>'textarea', 'label' => 'Dépot git'), 'memory' => array('type'=>'decimal', 'label' => 'Mémoire max.'), 'cpu' => array('type'=>'integer', 'label' => 'Cpu max.'), 'ssl' => array('type'=>'boolean', 'label' => 'SSL'), 'state' => array('type'=>'list', 'label' => 'Etat'), 'certificate' => array('type'=>'string', 'label' => 'Certificat SSL'), 'comment' => array('type'=>'wysiwyg', 'label' => 'Commentaire'), ); //liste des Etat possibles public static function states($key=null){ $items = array( DockerEnvironment::ACTIVE => array('label'=>'Actif') ); if(!isset($key)) return $items; return isset($items[$key]) ? $items[$key] : array('label'=>'Non définis'); } //Colonnes indexées public $indexes = array(); public function acronym(){ return 'wp_'; } public static function lastPort(){ $lastPort = DockerEnvironment::staticQuery('SELECT max(port) as port FROM {{table}}')->fetch(); return $lastPort!= false && is_numeric($lastPort['port']) ? $lastPort['port'] : 8008; } public function execute($ssh){ require_once(__DIR__.SLASH.'SshClient.class.php'); $clientDirectory = '/home/clients/'.$this->domain; return SshClient::format_output($ssh->execute('cd '.$clientDirectory.' && docker-compose up -d')); } public function createPma($ssh){ require_once(__DIR__.SLASH.'SshClient.class.php'); $logs = $ssh->execute('docker run --name myadmin -e UPLOAD_LIMIT=5G -d --network=proxy --link '.$this->domain.'_db:db -p 8011:80 phpmyadmin/phpmyadmin'); return $logs; } public function removePma($ssh){ require_once(__DIR__.SLASH.'SshClient.class.php'); $logs = '
Remove container myadmin...
'; $logs .= SshClient::format_output($ssh->execute('docker container stop myadmin && docker container rm myadmin')); return $logs; } public function removeContainer($ssh){ require_once(__DIR__.SLASH.'SshClient.class.php'); $clientDirectory = '/home/clients/'.$this->domain; if($clientDirectory == '/home/clients/') throw new Exception("Cant delete root !!!"); if(strlen($clientDirectory) <= strlen('/home/clients/') ) throw new Exception("Cant delete root or root parent!!!"); $logs = 'Remove vhost...
'; $logs .= $ssh->execute('rm /etc/nginx/sites-available/'.$this->domain.'.conf'); $logs .= $ssh->execute('rm /etc/nginx/sites-enabled/'.$this->domain.'.conf'); $logs .= '
Reload nginx...
'; $logs .= $ssh->execute('service nginx reload'); $logs .= '
Remove containers '.$clientDirectory.'...
'; $logs .= SshClient::format_output($ssh->execute('docker container stop '.$this->domain.'_wp && docker container rm '.$this->domain.'_wp')); $logs .= SshClient::format_output($ssh->execute('docker container stop '.$this->domain.'_db && docker container rm '.$this->domain.'_db')); $logs .= '
Remove client directory '.$clientDirectory.'...
'; $logs .= $ssh->execute('rm '.$clientDirectory.' -r'); return $logs; } public function createContainer($ssh){ require_once(__DIR__.SLASH.'SshClient.class.php'); $clientDirectory = '/home/clients/'.$this->domain; $logs = $ssh->execute('cp /home/client-template '.$clientDirectory.' -r'); $localEnv = 'DB_CONTAINER='.$this->domain.'_db'; $localEnv .="\n".'DB_NAME='.$this->domain; $localEnv .="\n".'DB_USER='.$this->domain; $localEnv .="\n".'DB_PASSWORD='.decrypt($this->mysqlPassword); $localEnv .="\n".'DB_ROOT_PASSWORD='.decrypt($this->mysqlRootPassword); $localEnv .="\n".'WP_CONTAINER='.$this->domain.'_wp'; $localEnv .="\n".'WP_TABLE_PREFIX='.$this->acronym(); $localEnv .="\n".'WP_PORT='.$this->port; $localEnv .="\n".'PMA_CONTAINER='.$this->domain.'_pma'; $localEnv .="\n".'PMA_PORT='.($this->port+1); $localEnv .="\n".'DB_RAM_LIMIT=800M'; $localEnv .="\n".'DB_RAM_RESERVATION=600M'; $localEnv .="\n".'WP_RAM_LIMIT='.$this->memory.'M'; $localEnv .="\n".'WP_RAM_RESERVATION=100M'; $localEnv .="\n".'PMA_RAM_LIMIT=200M'; $localEnv .="\n".'PMA_RAM_RESERVATION=100M'; $localEnv .="\n".'DOMAIN='.$this->domain; $localEnv .="\n".'URL=https://'.$this->domain; $localEnv .="\n".'POSTFIX_CONTAINER='.$this->domain.'_postfix'; $localEnv .="\n".'POSTFIX_PORT='.($this->port+2); $logs .= $ssh->send_stream($localEnv,$clientDirectory.'/.env'); $vhost = 'server { listen 80; server_name '.$this->domain.'; error_log '.$clientDirectory.'/log/proxy_error.log; location / { proxy_pass http://127.0.0.1:'.$this->port.'; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header X-Forward-Proto http; proxy_set_header X-Nginx-Proxy true; } } server { listen 80; server_name www.'.$this->domain.'; error_log '.$clientDirectory.'/log/proxy_error.log; location / { proxy_pass http://127.0.0.1:'.$this->port.'; proxy_set_header Host $host; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forward-For $proxy_add_x_forwarded_for; proxy_set_header X-Forward-Proto http; proxy_set_header X-Nginx-Proxy true; } }'; $logs .= $ssh->send_stream($vhost,'/etc/nginx/sites-available/'.$this->domain.'.conf'); $logs .= $ssh->execute('ln -s /etc/nginx/sites-available/'.$this->domain.'.conf /etc/nginx/sites-enabled/'.$this->domain.'.conf'); $logs .= $ssh->execute('service nginx reload'); return SshClient::format_output($logs); } } ?>