| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179 | 
							- <?php
 
- /**
 
-  * Define a DockerEnvironment
 
-  * @author Administrateur PRINCIPAL
 
-  * @category Plugin
 
-  * @license MIT
 
-  */
 
- class DockerEnvironment extends Entity{
 
- 	public $id;
 
- 	public $machine; //Machine hôte (Nombre Entier)
 
- 	public $client; //Client (Nombre Entier)
 
- 	public $domain; //Nom de domaine (Texte Long)
 
- 	public $port; //Port docker (Nombre Entier)
 
- 	public $mysqlRootPassword; //Pass. Mysql Root (Mot de passe)
 
- 	public $mysqlPassword; //Pass. Mysql App (Mot de passe)
 
- 	public $git; //Dépot git (Texte Long)
 
- 	public $memory = 256; //Mémoire max. (Décimal)
 
- 	public $cpu; //Cpu max. (Nombre Entier)
 
- 	public $ssl = 0; //SSL (Vrai ou Faux)
 
- 	public $state; //Etat (Liste classique)
 
- 	public $certificate; //Certificat SSL (string)
 
- 	public $comment; //Commentaire (wysiwyg)
 
- 	
 
- 	protected $TABLE_NAME = 'docker_environment';
 
- 	public $entityLabel = 'Environnement';
 
- 	public $fields = array(
 
- 		'id' => 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 = '<br>Remove container myadmin...<br>';
 
- 		$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...<br>';
 
- 		$logs .= $ssh->execute('rm /etc/nginx/sites-available/'.$this->domain.'.conf');
 
- 		$logs .= $ssh->execute('rm /etc/nginx/sites-enabled/'.$this->domain.'.conf');
 
- 		$logs .= '<br>Reload nginx...<br>';
 
- 		$logs .= $ssh->execute('service nginx reload');
 
- 		$logs .= '<br>Remove containers '.$clientDirectory.'...<br>';
 
- 		$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 .= '<br>Remove client directory '.$clientDirectory.'...<br>';
 
- 		$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);
 
- 	}
 
- }
 
- ?>
 
 
  |