Release.php 21 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648
  1. <?php
  2. namespace FD3;
  3. use Symfony\Component\Console\Command\Command;
  4. use Symfony\Component\Console\Input\InputInterface;
  5. use Symfony\Component\Console\Input\InputArgument;
  6. use Symfony\Component\Console\Input\InputOption;
  7. use Symfony\Component\Console\Output\OutputInterface;
  8. use Docker\Composer\FileFormat2;
  9. use Symfony\Component\Yaml\Yaml;
  10. class Release extends Command
  11. {
  12. protected function configure()
  13. {
  14. $this
  15. ->setName('make:install')
  16. ->setDescription('Create a new install.')
  17. ->setHelp('This command allows you to create a new installation...')
  18. ->addArgument('dir', InputArgument::REQUIRED, 'The directory where to create the installation.')
  19. ->addOption('base-repo',null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app Base', "git@bitbucket.org:ikflowdat/base.git")
  20. ->addOption('base-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the Base app', "master")
  21. ->addOption('ftth-repo',null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app FTTH', "git@bitbucket.org:ikflowdat/ftth.git")
  22. ->addOption('ftth-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the Ftth ', "master")
  23. ->addOption('mapas-repo',null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app Mapas', "git@bitbucket.org:ikflowdat/mapas.git")
  24. ->addOption('mapas-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the Mapas app', "master")
  25. ->addOption('cablemodem-repo',null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app cablemodem', "git@bitbucket.org:ikflowdat/cablemodem.git")
  26. ->addOption('cablemodem-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the cablemodem app', "master")
  27. ->addOption('radius-repo',null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app radius', "git@bitbucket.org:ikflowdat/radius.git")
  28. ->addOption('radius-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the radius app', "master")
  29. ->addOption('stats-repo',null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app Base', "git@bitbucket.org:ikflowdat/stats.git")
  30. ->addOption('stats-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the Stats app', "master")
  31. ->addOption('extra-repo',null, InputOption::VALUE_REQUIRED, 'Git clone Url fot the app Base', "git@bitbucket.org:ikflowdat/extra.git")
  32. ->addOption('extra-ref', null, InputOption::VALUE_REQUIRED, 'Git reference (branch or tag) to clone the Extra files and apps', "master")
  33. ->addOption('host-ip', null, InputOption::VALUE_REQUIRED, 'Ip of the runnning host to be added to the /etc/hosts file, eventually', "127.0.1.1")
  34. ->addOption('domain', null, InputOption::VALUE_REQUIRED, 'Domain where the flowdat will be installed', "fd3.flowdat.com")
  35. ->addOption('docker-tag', null, InputOption::VALUE_REQUIRED, 'Docker tag to be used', "latest")
  36. ;
  37. }
  38. protected function execute(InputInterface $input, OutputInterface $output)
  39. {
  40. $dir = $input->getArgument('dir');
  41. $domain = $input->getOption("domain");
  42. $docker_tag = $input->getOption("docker-tag");
  43. $dObj = new DevOps\FileSystem($dir);
  44. $dObj->dirExists()->realpath();
  45. $install_config = array(
  46. "base" => array(
  47. 'url' => $input->getOption("base-repo"),
  48. 'branch' => $input->getOption("base-ref"),
  49. ),
  50. "ftth" => array(
  51. 'url' => $input->getOption("ftth-repo"),
  52. 'branch' => $input->getOption("ftth-ref"),
  53. ),
  54. "mapas" => array(
  55. 'url' => $input->getOption("mapas-repo"),
  56. 'branch' => $input->getOption("mapas-ref"),
  57. ),
  58. "radius" => array(
  59. 'url' => $input->getOption("radius-repo"),
  60. 'branch' => $input->getOption("radius-ref"),
  61. ),
  62. "cablemodem" => array(
  63. 'url' => $input->getOption("cablemodem-repo"),
  64. 'branch' => $input->getOption("cablemodem-ref"),
  65. ),
  66. "stats" => array(
  67. 'url' => $input->getOption("stats-repo"),
  68. 'branch' => $input->getOption("stats-ref"),
  69. ),
  70. "extra" => array(
  71. 'url' => $input->getOption("extra-repo"),
  72. 'branch' => $input->getOption("extra-ref"),
  73. ),
  74. );
  75. $dObj->file("git.ini")->writeIniConfig($install_config);
  76. $dObj->file("docker-compose.yml")->content(
  77. $this->getDockerComposer( $docker_tag, "host.env", "docker.infra.flowdat.com/", $domain)
  78. );
  79. $config_ip = $input->getOption("host-ip");
  80. $hostConfig = $this->getHostConfig($config_ip, $domain);
  81. $hostfile_content = "";
  82. foreach($hostConfig as $host => $ip){
  83. $hostfile_content .= $ip . "\t". $host. "\n";
  84. }
  85. $dObj->file("hostsFile")->content($hostfile_content);
  86. $hostEnvConfig = $this->getHostEnv($domain);
  87. $env_content = "";
  88. foreach($hostEnvConfig as $var => $val){
  89. $env_content .= $var."=".$val."\n";
  90. }
  91. $dObj->file('host.env')->content($env_content);
  92. foreach(array("ftth", "mapas", "stats") as $app){
  93. $dObj->file($app.'.oauth.env')->content("");
  94. }
  95. $dObj->file('install.yml')->content(
  96. yaml::dump(array(
  97. "install_dir" => realpath($dir),
  98. 'docker_apps' => array('base', /*'stats', 'ftth', 'mapas'*/),
  99. 'domain' => $domain,
  100. )
  101. )
  102. );
  103. $dObj->file('ansible.cfg')->content(
  104. "[defaults]
  105. inventory=inventory.ini
  106. "
  107. );
  108. }
  109. function getHostEnv($fd_domain = "fd3.flowdat.com"){
  110. return array(
  111. "HOST_BASE" => "base.". $fd_domain,
  112. "HOST_FTTH" => "ftth.". $fd_domain,
  113. "HOST_MAPAS" => "mapas.".$fd_domain,
  114. "HOST_STATS" => "stats.".$fd_domain,
  115. "HOST_GRAFANA" => "grafana.".$fd_domain,
  116. "HOST_PMA" => "pma.".$fd_domain,
  117. );
  118. }
  119. function getHostConfig($config_ip, $fd_domain = "fd3.flowdat.com"){
  120. return array(
  121. "base.". $fd_domain => $config_ip,
  122. "ftth.". $fd_domain => $config_ip,
  123. "mapas.". $fd_domain => $config_ip,
  124. "stats.". $fd_domain => $config_ip,
  125. "grafana.". $fd_domain => $config_ip,
  126. "pma.". $fd_domain => $config_ip,
  127. );
  128. }
  129. function addBase($composer, $config = array(), $flavor = "dev"){
  130. $version = "latest";
  131. $domain = "fd3.flowdat.com";
  132. extract($config);
  133. $composer->addService("base")
  134. ->image($registry."fd3/base:" . $version)
  135. ->build("./base/")
  136. ->restart("always")
  137. ->addLinks("mysql")
  138. ->addLinks("amqp")
  139. ->addEnviroment("VIRTUAL_HOST", "base.".$domain)
  140. ->addEnviroment("HOST_FTTH", "ftth.".$domain)
  141. ->addEnviroment("HOST_STATS", "stats.".$domain)
  142. ->addEnviroment("HOST_MAPAS", "mapas.".$domain)
  143. ->addEnviroment("HOST_BASE", "base." .$domain)
  144. ->addVolumes("./base/", "/opt/base")
  145. ;
  146. }
  147. function addFtth($composer, $config = array(), $flavor = "dev"){
  148. $version = "latest";
  149. $domain = "fd3.flowdat.com";
  150. extract($config);
  151. $composer->addService("ftth")
  152. ->image($registry."fd3/ftth:" . $version)
  153. ->build("./ftth/")
  154. ->restart("always")
  155. ->addLinks("mysql")
  156. ->addLinks("base")
  157. ->addLinks("amqp")
  158. ->addLinks("base", "base.".$domain)
  159. ->addEnv_file("ftth.oauth.env")
  160. ->addEnviroment("VIRTUAL_HOST", "ftth.".$domain)
  161. ->addEnviroment("HOST_FTTH", "ftth.".$domain)
  162. ->addEnviroment("HOST_STATS", "stats.".$domain)
  163. ->addEnviroment("HOST_MAPAS", "mapas.".$domain)
  164. ->addEnviroment("HOST_BASE", "base.".$domain)
  165. //->addEnviroment("OAUTH_CLIENT_ID", $oauth_client)
  166. //->addEnviroment("OAUTH_CLIENT_SECRET", $oauth_client_secret)
  167. //->addEnviroment("HTTPS_METHOD", "nohttps")
  168. ->addVolumes("./ftth/", "/opt/ftth")
  169. ;
  170. }
  171. function addCablemodem($composer, $config = array(), $flavor = "dev"){
  172. $version = "latest";
  173. $domain = "fd3.flowdat.com";
  174. extract($config);
  175. $composer->addService("cablemodem")
  176. ->image($registry."fd3/cablemodem:" . $version)
  177. ->build("./cablemodem/")
  178. ->restart("always")
  179. ->addLinks("mysql")
  180. ->addLinks("base")
  181. ->addLinks("amqp")
  182. ->addLinks("base", "base.".$domain)
  183. ->addEnv_file("cablemodem.oauth.env")
  184. ->addEnviroment("VIRTUAL_HOST", "cablemodem.".$domain)
  185. ->addEnviroment("HOST_FTTH", "ftth.".$domain)
  186. ->addEnviroment("HOST_STATS", "stats.".$domain)
  187. ->addEnviroment("HOST_MAPAS", "mapas.".$domain)
  188. ->addEnviroment("HOST_BASE", "base.".$domain)
  189. ->addEnviroment("HOST_CABLEMODEM", "cablemodem.".$domain)
  190. //->addEnviroment("OAUTH_CLIENT_ID", $oauth_client)
  191. //->addEnviroment("OAUTH_CLIENT_SECRET", $oauth_client_secret)
  192. //->addEnviroment("HTTPS_METHOD", "nohttps")
  193. ->addVolumes("./cablemodem/", "/opt/cablemodem")
  194. ;
  195. }
  196. function addRadius($composer, $config = array(), $flavor = "dev"){
  197. $version = "latest";
  198. $domain = "fd3.flowdat.com";
  199. extract($config);
  200. $composer->addService("radius")
  201. ->image($registry."fd3/radius:" . $version)
  202. ->build("./radius/")
  203. ->restart("always")
  204. ->addLinks("mysql")
  205. ->addLinks("base")
  206. ->addLinks("amqp")
  207. ->addLinks("base", "base.".$domain)
  208. ->addEnv_file("radius.oauth.env")
  209. ->addEnviroment("VIRTUAL_HOST", "radius.".$domain)
  210. ->addEnviroment("HOST_FTTH", "ftth.".$domain)
  211. ->addEnviroment("HOST_STATS", "stats.".$domain)
  212. ->addEnviroment("HOST_MAPAS", "mapas.".$domain)
  213. ->addEnviroment("HOST_BASE", "base.".$domain)
  214. ->addEnviroment("HOST_CABLEMODEM", "cablemodem.".$domain)
  215. //->addEnviroment("OAUTH_CLIENT_ID", $oauth_client)
  216. //->addEnviroment("OAUTH_CLIENT_SECRET", $oauth_client_secret)
  217. //->addEnviroment("HTTPS_METHOD", "nohttps")
  218. ->addVolumes("./cablemodem/", "/opt/cablemodem")
  219. ;
  220. }
  221. function addStats($composer, $config = array(), $flavor = "dev"){
  222. $version = "latest";
  223. $domain = "fd3.flowdat.com";
  224. extract($config);
  225. $composer->addService("stats")
  226. ->image($registry."fd3/stats:" . $version)
  227. ->build("./stats/")
  228. ->addLinks("mysql")
  229. ->addLinks("base")
  230. ->addLinks("amqp")
  231. ->addLinks("base", "base.".$domain)
  232. //->addLinks("jsendpoint", "endpoint")
  233. //->addLinks("statsd", "statsd")
  234. ->addVolumes("./stats/", "/opt/stats")
  235. ->addEnv_file("stats.oauth.env")
  236. ->addEnviroment("VIRTUAL_HOST", "stats.".$domain)
  237. ->addEnviroment("HOST_FTTH", "ftth.".$domain)
  238. ->addEnviroment("HOST_STATS", "stats.".$domain)
  239. ->addEnviroment("HOST_MAPAS", "mapas.".$domain)
  240. ->addEnviroment("HOST_BASE", "base.".$domain)
  241. //->addEnviroment("OAUTH_CLIENT_ID", $oauth_client)
  242. //->addEnviroment("OAUTH_CLIENT_SECRET", $oauth_client_secret)
  243. //->addEnviroment("HTTPS_METHOD", "nohttps")
  244. ;
  245. }
  246. function addMapas($composer, $config = array(), $flavor = "dev"){
  247. $version = "latest";
  248. $domain = "fd3.flowdat.com";
  249. extract($config);
  250. $composer->addService("mapas")
  251. ->image($registry."fd3/mapas:" . $version)
  252. ->build("./mapas/")
  253. ->addLinks("mysql")
  254. ->addLinks("base")
  255. ->addLinks("amqp")
  256. ->addLinks("base", "base.".$domain)
  257. ->addEnv_file("mapas.oauth.env")
  258. ->addEnviroment("VIRTUAL_HOST", "mapas.".$domain)
  259. ->addEnviroment("HOST_FTTH", "ftth.".$domain)
  260. ->addEnviroment("HOST_STATS", "stats.".$domain)
  261. ->addEnviroment("HOST_MAPAS", "mapas.".$domain)
  262. ->addEnviroment("HOST_BASE", "base.".$domain)
  263. ->addVolumes("./mapas/", "/opt/mapas")
  264. ->addVolumes("./mapas/web/uploads", "/opt/mapas/web/uploads")
  265. ;
  266. }
  267. function addNginx($composer, $config = array(), $flavor = "dev"){
  268. $version = "latest";
  269. $domain = "fd3.flowdat.com";
  270. $host_env_file = "host.env";
  271. extract($config);
  272. $composer->addService("nginx")->build("extra/nginx/")
  273. ->image($registry."fd3/nginx:".$version)
  274. ->addEnv_file($host_env_file)
  275. ->restart("always")
  276. ->addPorts(80, 80)
  277. ->addPorts(443, 443)
  278. ->addVolumes("/var/run/docker.sock", "/tmp/docker.sock:ro")
  279. ->addVolumes("./extra/nginx/certs", "/etc/nginx/certs:ro")
  280. ->addVolumes("./extra/nginx/vhost.d", "/etc/nginx/vhost.d")
  281. ->addVolumes("./extra/nginx/share", "/usr/share/nginx/html")
  282. ;
  283. }
  284. function addMongDb($composer, $config = array(), $flavor = "dev"){
  285. $version = "latest";
  286. $domain = "fd3.flowdat.com";
  287. $mongdb_version = "3.4";
  288. extract($config);
  289. $composer->addService("mongodb")
  290. ->image("mongo:". $mongdb_version)
  291. ->addVolumes("./mongodb", "/data/db")
  292. ;
  293. }
  294. function addSupervisord($composer, $config = array(), $flavor = "dev"){
  295. $version = "latest";
  296. extract($config);
  297. $composer->addService("supervisord")->build("./extra/supervisord")
  298. ->image($registry."fd3/supervisord:$version")
  299. ->privileged(true)
  300. ->restart("always")
  301. ->addEnviroment("./extra/supervisord/", "/etc/supervisord/")
  302. ->addEnviroment("./extra/supervisord/var/", "/var/log/supervisor/")
  303. ->addEnviroment("./extra/supervisord/sshd_config", "/etc/ssh/sshd_config")
  304. ->addEnviroment("./extra/supervisord/bin/fiberhome", "/usr/bin/fiberhome")
  305. ->addEnviroment("./extra/supervisord/bin/fiberlink", "/usr/bin/fiberlink")
  306. ;
  307. }
  308. function addMySql($composer, $config = array(), $flavor = "dev"){
  309. $version = "latest";
  310. $domain = "fd3.flowdat.com";
  311. extract($config);
  312. $composer->addService("mysql")->image($registry."fd3/mysql:". $version)
  313. ->build("./extra/mysql")
  314. ->addVolumes("./mysql/", "/var/lib/mysql/")
  315. ->addEnviroment("MYSQL_ROOT_PASSWORD", $mysql_root_pass)
  316. ->addEnviroment("MYSQL_USER", $mysql_user)
  317. ->addEnviroment("MYSQL_PASSWORD", $mysql_pass)
  318. ;
  319. }
  320. function addRedis($composer, $config = array(), $flavor = "dev"){
  321. $version = "latest";
  322. $domain = "fd3.flowdat.com";
  323. extract($config);
  324. $composer->addService("redis")
  325. ->image("redis:latest")
  326. ->command("redis-server --appendonly yes")
  327. //->addPorts("6379", "6379")
  328. ->restart("always")
  329. ;
  330. }
  331. function addGenieACS($composer, $config = array(), $flavor = "dev"){
  332. $version = "latest";
  333. $domain = "fd3.flowdat.com";
  334. extract($config);
  335. $composer->addService("genieacs")
  336. ->image("thebinary/genieacs:latest")
  337. ->addLinks("mongodb")
  338. ->addLinks("redis")
  339. ->addPorts("7777", "7777")
  340. ->restart("always")
  341. ;
  342. }
  343. function addFreeradius($composer, $config = array(), $flavor = "dev"){
  344. $version = "latest";
  345. $domain = "fd3.flowdat.com";
  346. extract($config);
  347. $composer->addService("freeradius")
  348. ->image($registry . "fd3/freeradius:". $version)
  349. ->addLinks("mysql")
  350. ->addEnviroment("MYSQL_ROOT_PASSWORD", $mysql_root_pass)
  351. ->addEnviroment("MYSQL_USER", $mysql_user)
  352. ->addEnviroment("MYSQL_HOST", "mysql")
  353. ->addEnviroment("MYSQL_PASSWORD", $mysql_pass)
  354. ->addPorts("1812", "1812/udp")
  355. ->addPorts("1813", "1813/udp")
  356. ->addPorts("3799", "3799/udp")
  357. ;
  358. }
  359. function addGrafana($composer, $config = array(), $flavor = "dev"){
  360. $version = "latest";
  361. $domain = "fd3.flowdat.com";
  362. extract($config);
  363. $composer->addService("grafana")->image("grafana/grafana")
  364. //->addLinks("jsendpoint","endpoint")
  365. ->addLinks("mysql")
  366. ->restart("always")
  367. ->addEnviroment("VIRTUAL_HOST", "grafana.".$domain)
  368. ->addEnviroment("HTTPS_METHOD", "nohttps")
  369. ->addEnviroment("./statsd/grafana/lib", "/var/lib/grafana")
  370. ->addEnviroment("GF_SECURITY_ADMIN_PASSWORD", "queRini6")
  371. ->addEnviroment("GF_INSTALL_PLUGINS", "grafana-simple-json-datasource")
  372. ->addEnviroment("GF_DEFAULT_THEME", "light")
  373. ->addEnviroment("GF_AUTH_ANONYMOUS_ORG_NAME", "Main Org.")
  374. ->addEnviroment("GF_AUTH_ANONYMOUS_ORG_ROLE", "Viewer")
  375. ->addEnviroment("GF_AUTH_ANONYMOUS_ENABLED", "true")
  376. ->addEnviroment("GF_DATABASE_URL", "mysql://root:".$mysql_root_pass."@mysql:3306/grafana")
  377. ->addEnviroment("GF_SERVER_ROOT_URL", "http://grafana.".$domain."/")
  378. ;
  379. }
  380. function addJsonEndPoints($composer, $config = array(), $flavor = "dev"){
  381. $version = "latest";
  382. $domain = "fd3.flowdat.com";
  383. extract($config);
  384. $composer->addService("statsd")->build("./extra/statsd/statsd")
  385. ->image($registry."fd3/statsd:$version")
  386. ->addPorts("8125", "8125/udp")
  387. ->addLinks("mysql")
  388. ->addLinks("mongodb")
  389. ->restart("always")
  390. ->addVolumes("./extra/statsd/statsd/statsd.config.js", "/opt/config/statsd.config.js")
  391. ;
  392. $composer->addService("jsendpoint")
  393. ->build("./extra/statsd/endpoint/json")
  394. ->image($registry."fd3/jsonep:$version")
  395. ->addVolumes("./extra/statsd/endpoint/json", "/opt/datasource")
  396. ->addLinks("jsonep_mysql")
  397. ->addLinks("jsonep_mongo")
  398. ->restart("always")
  399. ;
  400. $composer->addService("jsonep_mysql")
  401. ->build("./extra/statsd/endpoint/mysql")
  402. ->image($registry."fd3/jsonep_mysql:$version")
  403. ->addVolumes("./extra/statsd/endpoint/mysql", "/opt/datasource")
  404. ->addLinks("mysql")
  405. ->addEnviroment("MYSQL_ROOT_PASSWORD", $mysql_root_pass)
  406. ->restart("always")
  407. ;
  408. $composer->addService("jsonep_mongo")
  409. ->build("./extra/statsd/endpoint/mongodb")
  410. ->image($registry."fd3/jsonep_mongo:$version")
  411. ->addVolumes("./extra/statsd/endpoint/mongodb", "/opt/datasource")
  412. ->addLinks("mongodb")
  413. ->restart("always")
  414. ;
  415. }
  416. function addCommandWorkers($composer, $config = array(), $flavor = "dev"){
  417. $version = "latest";
  418. $domain = "fd3.flowdat.com";
  419. extract($config);
  420. $composer->addService("base_log_worker")->image($registry."fd3/base:" . $version)
  421. ->build("./base/")
  422. ->command("bin/console rabbitmq:consumer log_consumer")
  423. ->restart("always")
  424. ->addLinks("mysql")
  425. ->addLinks("base")
  426. ->addLinks("amqp")
  427. ->addLinks("nginx", "base.".$domain)
  428. ->addVolumes("./base/", "/opt/base")
  429. ;
  430. $composer->addService("ftth_command_worker")->image($registry."fd3/ftth:" . $version)
  431. ->build("./ftth/")
  432. ->command("bin/console rabbitmq:consumer command_consumer")
  433. ->restart("always")
  434. ->addLinks("mysql")
  435. ->addLinks("base")
  436. ->addLinks("amqp")
  437. ->addLinks("nginx", "base.".$domain)
  438. ->addVolumes("./ftth/", "/opt/ftth")
  439. ;
  440. $composer->addService("ftth_tasklogger_worker")->image($registry."fd3/ftth:" . $version)
  441. ->build("./ftth/")
  442. ->command("bin/console rabbitmq:consumer flowdat_tasklogger")
  443. ->restart("always")
  444. ->addLinks("mysql")
  445. ->addLinks("base")
  446. ->addLinks("amqp")
  447. ->addLinks("nginx", "base.".$domain)
  448. ->addVolumes("./ftth/", "/opt/ftth")
  449. ;
  450. $composer->addService("stats_command_worker")->image($registry."fd3/ftth:" . $version)
  451. ->build("./stats/")
  452. ->command("bin/console rabbitmq:consumer command_consumer")
  453. ->restart("always")
  454. ->addLinks("mysql")
  455. ->addLinks("base")
  456. ->addLinks("amqp")
  457. ->addLinks("nginx", "base.".$domain)
  458. ->addVolumes("./stats/", "/opt/stats")
  459. ;
  460. }
  461. function getDockerComposer( $version = "latest", $host_env_file = "host.env", $registry = "docker.infra.flowdat.com/", $fd_domain = "fd3.flowdat.com")
  462. {
  463. $mysql_root_pass="235r2342gtfsw";
  464. $mysql_user="iksop";
  465. $mysql_pass="235r2342gtfsw";
  466. $oauth_client = "1_3323sq6urn8kwccg8s4ok848ggwwgkw4c08wsc4cwkc08osocc";
  467. $oauth_client_secret = "5w7gx6ptdoo4g8cwwo88o8gowosgco84sso08ssow0osg88g8k";
  468. $composer = new FileFormat2("../");
  469. $base_vars = array("version" => $version, "host_env_file" => $host_env_file, "domain" => $fd_domain, "registry" => $registry);
  470. $this->addNginx($composer, $base_vars);
  471. /**************************************************************************************/
  472. /* Apps / Web UI */
  473. /**************************************************************************************/
  474. $this->addBase($composer, $base_vars);
  475. $this->addFtth($composer, $base_vars);
  476. $this->addStats($composer, $base_vars);
  477. $this->addCablemodem($composer, $base_vars);
  478. $this->addRadius($composer, $base_vars);
  479. $this->addMapas($composer, $base_vars);
  480. /**************************************************************************************/
  481. /* Servicios */
  482. /**************************************************************************************/
  483. $this->addMySql($composer, $base_vars + array(
  484. 'mysql_root_pass' => $mysql_root_pass,
  485. 'mysql_user' => $mysql_user,
  486. 'mysql_pass' => $mysql_pass,
  487. ));
  488. $composer->addService("amqp")->image("rabbitmq:3-management")
  489. ->restart("always")
  490. ;
  491. $this->addMongDb($composer, $base_vars);
  492. $this->addRedis($composer);
  493. $this->addFreeradius($composer, $base_vars + array(
  494. 'mysql_root_pass' => $mysql_root_pass,
  495. 'mysql_user' => $mysql_user,
  496. 'mysql_pass' => $mysql_pass,
  497. ));
  498. /**************************************************************************************/
  499. /* Grafana y compoenentes de las estadisticas*/
  500. /**************************************************************************************/
  501. $this->addGrafana($composer, $base_vars + array(
  502. 'mysql_user' => $mysql_user,
  503. 'mysql_pass' => $mysql_pass,
  504. 'mysql_root_pass' => $mysql_root_pass,
  505. ));
  506. $this->addJsonEndPoints($composer, $base_vars + array(
  507. 'mysql_root_pass' => $mysql_root_pass,
  508. ));
  509. /**************************************************************************************/
  510. /* Workers */
  511. /**************************************************************************************/
  512. $this->addSupervisord($composer, $base_vars);
  513. $this->addCommandWorkers($composer, $base_vars);
  514. //$composer->addService("phpmyadmin")->image("phpmyadmin/phpmyadmin")
  515. // ->restart("always")
  516. // ->addPorts(8080, 80)
  517. // ->addLinks("mysql", "db")
  518. // ->addEnviroment("MYSQL_ROOT_PASSWORD", $mysql_root_pass)
  519. // ->addEnviroment("VIRTUAL_HOST", "pma.".$fd_domain)
  520. // ->addEnviroment("HTTPS_METHOD", "nohttps")
  521. //;
  522. return $composer->render();
  523. }
  524. }