فهرست منبع

Se escribio el readme.md

Se cambio el modo de restar de los contenedores
gabriel 7 سال پیش
والد
کامیت
d04c22fd2d
2فایلهای تغییر یافته به همراه190 افزوده شده و 38 حذف شده
  1. 98 14
      tools/readme.md
  2. 92 24
      tools/src/Release.php

+ 98 - 14
tools/readme.md

@@ -1,16 +1,100 @@
+#Requerimientos
+ * [curl](curl)
+ * [git](git)
+ * [python](python)
+ * [pip](pip)
+ * [docker](docker)
+ * [docker-compose](docker-compose)
+ * [php/composer](php/composer)
 
+#Instalación de requerimientos:
+### curl
+    apt-get install curl
+### git
+    apt-get install git
+### python
+    apt-get install python
+### pip
+    # descargo el  archivo get-pip.py desde una url
+    curl https://bootstrap.pypa.io/get-pip.py -output get-pip.py
+     
+    # instalo pip
+    python get-pip.py
+     
+    # actualizo pip
+    pip install -U pip
+### docker
+    pip install docker
+### docker-compose
+    pip install docker-compose
+### php/composer
+    # con sudo
+    curl -sS https://getcomposer.org/installer | sudo php -- --install-dir=/usr/local/bin --filename=composer
+    sudo chmod 755 /usr/local/bin/composer
+     
+    # con root
+    curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer
+    chmod 755 /usr/local/bin/composer
 
-requerimientos
- * docker
- * ansible
- * php/composer
-
-pasos:
- #1 Crear el directorio de instalación
-	php tools/cmd.php make:install --domain=lucho.fd3.flowdat.com ~/dev/
- #2 En caso de que sea una instalacion de desarrollo bajar el codigo (get:source) y construir las imagenes de docker
- #3 Hacer el inventario de ansible con los docker
- #4 Correr el ansible en localhost (playbook es extra/installer.yml)
-    * Crea las oauth client para cada app (excepto base)
-    * Crea las dbs
-
+ 
+# Pasos:
+####. Crear un directorio para la instalación, puede ser en cualquier lugar del sistema. Tener en cuenta que en este directorio se descargará código fuente.
+    mkdir flowdat  
+####. Entrar la directorio.
+    cd flowdat
+####. Descargar el fuente de instalación.   
+    # en código se descarga en el directorio actual
+    git clone git@bitbucket.org:ikflowdat/installer.git .
+####. Construir el docker que se utilizará durante la instalación.
+    docker build --build-arg DIR_INSTALL=$(pwd) -t dind .     
+    # --build-arg: es la forma de pasarle parámetros al docker.
+    # -t: es el nombre que tendrá el contenedor.
+    # .: indica que el fuente se descargará en el directorio actual.
+    # para más información de los parámetros ejecutar "docker build --help"
+####. Crear los archivos necesarios para la instalción. Dentro del directorio actual se crea un nuevo directorio con el nombre de la empresa. 
+    docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind make:install galvez --domain=galvez
+    # docker run: ejecuta un comando sobre el contenedor.
+    # -it: significa que voy a tener un tty interativo.
+    # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directario.
+    # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's.
+    # dind: es el nombre que le pusimos anteriormente al contenedor.
+    # make:install: es el comando que se ejecuta dentro del docker para crear los archivos.
+    # galvez: nombre de la empresa que estoy instalando.
+    # --domain=galvez: es el nombre del dominio que se utilizará. El dominio final quedaría base.galvez.flowdat.com, ftth.galvez.flowdat.com, etc.
+    # para mas informacion ejecutar "docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind make:install --help"
+####. Obtener los fuentes desde bitbucket
+    docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind get:source galvez/git.ini
+    # docker run: ejecuta un comando sobre el contenedor.
+    # -it: significa que voy a tener un tty interativo.
+    # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directario.
+    # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's.
+    # dind: es el nombre que le pusimos anteriormente al contenedor.
+    # get:source: es el comando que se ejecuta dentro del docker para obtener los fuentes.
+    # galvez/git.ini: es el nombre del archivo que posee los directorios a descargar.
+    # para mas informacion ejecutar "docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind get:source --help"
+####. Renombramos los archivos innecesarios para el nginx.    
+    docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind fix:nginx galvez
+    # docker run: ejecuta un comando sobre el contenedor.
+    # -it: significa que voy a tener un tty interativo.
+    # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directario.
+    # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's.
+    # dind: es el nombre que le pusimos anteriormente al contenedor.
+    # fix:nginx: es el comando que se ejecuta dentro del docker para obtener los fuentes.
+    # galvez: nombre de la empresa que estoy instalando.            
+####. Entramos al docker para correr ansible y terminar la configuración
+    docker run -it -v $(pwd):$(pwd) -v /var/run/docker.sock:/tmp/docker.sock dind bash
+    # docker run: ejecuta un comando sobre el contenedor.
+    # -it: significa que voy a tener un tty interativo.
+    # -v $(pwd):$(pwd): monta como un volumen el directorio actual, en el contenedor bajo el mismo directario.
+    # -v /var/run/docker.sock:/tmp/docker.sock: comparte el docker.sock entre los docker's.
+    # dind: es el nombre que le pusimos anteriormente al contenedor.
+    # bash: significa que se ejecutará un bash.
+####. Una vez dentro del docker entramos al directorio de instalación. 
+    cd galvez
+####. Corremos ansible para finalizar la configuración e instalación
+    eval $(cat mysql.host.env running.env) ansible-playbook -i inventory.ini -u root playbook.yml
+    # eval $(cat mysql.host.env running.env): se le pasa al ansible-playbook las variables de entorno definidas en los archivos mysql.host.env y running.env
+    # -i inventory.ini: se el especifica el inventory.ini          
+    # -u root: le digo que se ejecutarán las acciones como el usuario "root" 
+    # playbook.yml: es el nombre del playbook a ejecutar
+   

+ 92 - 24
tools/src/Release.php

@@ -21,6 +21,10 @@ class Release extends Command
      * @var string Nombre del archivo de log.
      */
     private $_running_log;
+    /**
+     * @var string Contiene la politica de restart de los dockers.
+     */
+    private $_docker_restart_default;
     /**
      * @var array Contiene las variables que se utilizar en la ejecucion del ansible.
      */
@@ -73,6 +77,7 @@ class Release extends Command
         $this->_mysql_pass = "235r2342gtfsw";
         $this->_mysql_root_pass = "235r2342gtfsw";
         $this->_domain_behind = "flowdat.com";
+        $this->_docker_restart_default = "on-failure:10";
         $this->_modules = array();
         $this->_ansible_vars = array();
         $this->_modules_all = array(
@@ -130,6 +135,15 @@ class Release extends Command
                 'OAUTH' => true,
                 'MODULE_INSTALL' => true
             ),
+            "dhcp" => array(
+                'HOST_ENV' => true,
+                "VAR_ENV" => array(
+                    'VIRTUAL_HOST' => '',
+                    'HTTPS_METHOD' => 'nohttps',
+                ),
+                'OAUTH' => true,
+                'MODULE_INSTALL' => true
+            ),
             "grafana" => array(
                 'HOST_ENV' => true,
                 "VAR_ENV" => array(
@@ -303,7 +317,7 @@ class Release extends Command
             $composer
                 ->addService($module)
                 ->image($registry . "fd3/$module:" . $version)
-                ->restart("always")
+                ->restart($this->_docker_restart_default)
                 ->addLinks("mysql:mysql")
                 ->addLinks("amqp")
                 ->addEnv_file($host_env_file)
@@ -326,7 +340,7 @@ class Release extends Command
             $composer
                 ->addService($module)
                 ->image($registry . "fd3/$module:" . $version)
-                ->restart("always")
+                ->restart($this->_docker_restart_default)
                 ->addLinks("mysql:mysql")
                 ->addLinks("base")
                 ->addLinks("amqp")
@@ -352,7 +366,7 @@ class Release extends Command
             $composer
                 ->addService($module)
                 ->image($registry . "fd3/$module:" . $version)
-                ->restart("always")
+                ->restart($this->_docker_restart_default)
                 ->addLinks("mysql:mysql")
                 ->addLinks("base")
                 ->addLinks("amqp")
@@ -380,7 +394,7 @@ class Release extends Command
             $composer
                 ->addService($module)
                 ->image($registry . "fd3/$module:" . $version)
-                ->restart("always")
+                ->restart($this->_docker_restart_default)
                 ->addLinks("mysql:mysql")
                 ->addLinks("base")
                 ->addLinks("amqp")
@@ -407,7 +421,7 @@ class Release extends Command
             $composer
                 ->addService($module)
                 ->image($registry . "fd3/$module:" . $version)
-                ->restart("always")
+                ->restart($this->_docker_restart_default)
                 ->addLinks("mysql:mysql")
                 ->addLinks("base")
                 ->addLinks("amqp")
@@ -423,6 +437,58 @@ class Release extends Command
         }
     }
 
+    function addRadius(FileFormat2 $composer, $config = array())
+    {
+        $module = "radius";
+        $version = "latest";
+        $registry = "";
+        $host_env_file = "";
+        extract($config);
+        if (array_key_exists($module, $this->_modules)) {
+            $composer
+                ->addService($module)
+                ->image($registry . "fd3/$module:" . $version)
+                ->restart($this->_docker_restart_default)
+                ->addLinks("mysql:mysql")
+                ->addLinks("base")
+                ->addLinks("amqp")
+                ->addLinks("base", $this->getDomain("base"))
+                ->addEnv_file($host_env_file)
+                ->addEnv_file($module . "." . $host_env_file)
+                ->addEnv_file("$module.oauth.env")
+                ->addVolumes("./$module/", "/opt/$module");
+            $this->addBuild($module, $composer);
+
+            $this->writeVariablesEnviroment($module . "." . $host_env_file, $module);
+        }
+    }
+
+    function addDHCP(FileFormat2 $composer, $config = array())
+    {
+        $module = "dhcp";
+        $version = "latest";
+        $registry = "";
+        $host_env_file = "";
+        extract($config);
+        if (array_key_exists($module, $this->_modules)) {
+            $composer
+                ->addService($module)
+                ->image($registry . "fd3/$module:" . $version)
+                ->restart($this->_docker_restart_default)
+                ->addLinks("mysql:mysql")
+                ->addLinks("base")
+                ->addLinks("amqp")
+                ->addLinks("base", $this->getDomain("base"))
+                ->addEnv_file($host_env_file)
+                ->addEnv_file($module . "." . $host_env_file)
+                ->addEnv_file("$module.oauth.env")
+                ->addVolumes("./$module/", "/opt/$module");
+            $this->addBuild($module, $composer);
+
+            $this->writeVariablesEnviroment($module . "." . $host_env_file, $module);
+        }
+    }
+
     function addNginx(FileFormat2 $composer, $config = array())
     {
         $version = "latest";
@@ -435,7 +501,7 @@ class Release extends Command
             ->build("extra/nginx/")
             ->image($registry . "fd3/nginx:" . $version)
             ->addEnv_file($host_env_file)
-            ->restart("always")
+            ->restart($this->_docker_restart_default)
             ->addPorts(80, 80)
             ->addPorts(443, 443)
             ->addVolumes("/var/run/docker.sock", "/tmp/docker.sock:ro")
@@ -466,7 +532,7 @@ class Release extends Command
             ->build("./extra/supervisord")
             ->image($registry . "fd3/supervisord:$version")
             ->privileged(true)
-            ->restart("always")
+            ->restart($this->_docker_restart_default)
             ->addVolumes("./extra/supervisord/", "/etc/supervisord/")
             ->addVolumes("./extra/supervisord/var/", "/var/log/supervisor/")
             ->addVolumes("./extra/supervisord/sshd_config", "/etc/ssh/sshd_config")
@@ -502,7 +568,7 @@ class Release extends Command
             ->image("redis:latest")
             ->command("redis-server --appendonly yes")
             //->addPorts("6379", "6379")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
     }
 
     function addGenieACS(FileFormat2 $composer, $config = array(), $flavor = "dev")
@@ -513,7 +579,7 @@ class Release extends Command
             ->addLinks("mongodb")
             ->addLinks("redis")
             ->addPorts("7547", "7547")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
 
         $composer
             ->addService("genieacs-nbi")
@@ -521,7 +587,7 @@ class Release extends Command
             ->addLinks("mongodb")
             ->addLinks("redis")
             ->addPorts("7557", "7557")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
 
         $composer
             ->addService("genieacs-fs")
@@ -529,14 +595,14 @@ class Release extends Command
             ->addLinks("mongodb")
             ->addLinks("redis")
             ->addPorts("7567", "7567")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
 
         $composer
             ->addService("genieacs-gui")
             ->build("extra/genieacs/genieacs-gui")
             ->addLinks("genieacs-nbi")
             ->addPorts("3001", "3000")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
     }
 
     function addFreeradius(FileFormat2 $composer, $config = array(), $flavor = "dev")
@@ -568,7 +634,7 @@ class Release extends Command
         extract($config);
         if (array_key_exists($module, $this->_modules)) {
             $composer->addService("phpmyadmin")->image("phpmyadmin/phpmyadmin")
-                ->restart("always")
+                ->restart($this->_docker_restart_default)
                 ->addPorts(8080, 80)
                 ->addLinks("mysql", "db")
                 ->addEnv_file("mysql." . $host_env_file)
@@ -588,8 +654,8 @@ class Release extends Command
                 ->addService($module)
                 ->image("grafana/grafana")
                 ->addLinks("mysql")
-                ->restart("always")
-                ->addEnv_file("mysql.".$host_env_file)
+                ->restart($this->_docker_restart_default)
+                ->addEnv_file("mysql." . $host_env_file)
                 ->addVolumes("./statsd/grafana/lib", "/var/lib/grafana");
 
             $this->writeVariablesEnviroment($module . "." . $host_env_file, $module,
@@ -621,7 +687,7 @@ class Release extends Command
             ->addPorts("8125", "8125/udp")
             ->addLinks("mysql")
             ->addLinks("mongodb")
-            ->restart("always")
+            ->restart($this->_docker_restart_default)
             ->addVolumes("./extra/statsd/statsd/statsd.config.js", "/opt/config/statsd.config.js");
 
         $composer
@@ -631,7 +697,7 @@ class Release extends Command
             ->addVolumes("./extra/statsd/endpoint/json", "/opt/datasource")
             ->addLinks("jsonep_mysql")
             ->addLinks("jsonep_mongo")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
 
         $composer
             ->addService("jsonep_mysql")
@@ -640,7 +706,7 @@ class Release extends Command
             ->addVolumes("./extra/statsd/endpoint/mysql", "/opt/datasource")
             ->addLinks("mysql")
             ->addEnv_file("mysql." . $host_env_file)
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
 
         $composer
             ->addService("jsonep_mongo")
@@ -648,7 +714,7 @@ class Release extends Command
             ->image($registry . "fd3/jsonep_mongo:$version")
             ->addVolumes("./extra/statsd/endpoint/mongodb", "/opt/datasource")
             ->addLinks("mongodb")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
     }
 
     function addCommandWorkers(FileFormat2 $composer, $config = array())
@@ -662,7 +728,7 @@ class Release extends Command
             ->image($registry . "fd3/base:" . $version)
             ->build("./base/")
             ->command("bin/console rabbitmq:consumer log_consumer")
-            ->restart("always")
+            ->restart($this->_docker_restart_default)
             ->addLinks("mysql")
             ->addLinks("base")
             ->addLinks("amqp")
@@ -674,7 +740,7 @@ class Release extends Command
             ->image($registry . "fd3/ftth:" . $version)
             ->build("./ftth/")
             ->command("bin/console rabbitmq:consumer command_consumer")
-            ->restart("always")
+            ->restart($this->_docker_restart_default)
             ->addLinks("mysql")
             ->addLinks("base")
             ->addLinks("amqp")
@@ -686,7 +752,7 @@ class Release extends Command
             ->image($registry . "fd3/ftth:" . $version)
             ->build("./ftth/")
             ->command("bin/console rabbitmq:consumer flowdat_tasklogger")
-            ->restart("always")
+            ->restart($this->_docker_restart_default)
             ->addLinks("mysql")
             ->addLinks("base")
             ->addLinks("amqp")
@@ -703,7 +769,7 @@ class Release extends Command
             ->addEnviroment("./extra/supervisord/sshd_config", "/etc/ssh/sshd_config")
             ->addEnviroment("./extra/supervisord/bin/fiberhome", "/usr/bin/fiberhome")
             ->addEnviroment("./extra/supervisord/bin/fiberlink", "/usr/bin/fiberlink");
-//            ->restart("always")
+//            ->restart($this->_docker_restart_default)
 //            ->addLinks("mysql")
 //            ->addLinks("base")
 //            ->addLinks("amqp")
@@ -732,6 +798,8 @@ class Release extends Command
         $this->addStats($composer, $base_vars);
         $this->addMapas($composer, $base_vars);
         $this->addCablemodem($composer, $base_vars);
+        $this->addRadius($composer, $base_vars);
+        $this->addDHCP($composer, $base_vars);
 
         /**************************************************************************************/
         /* Servicios */
@@ -739,7 +807,7 @@ class Release extends Command
         $this->addMySql($composer, $base_vars);
 
         $composer->addService("amqp")->image("rabbitmq:3-management")
-            ->restart("always");
+            ->restart($this->_docker_restart_default);
 
         $this->addMongDb($composer, $base_vars);
         $this->addRedis($composer, $base_vars);