Example #1
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     /** @var QuestionHelper $questionHelper */
     $questionHelper = $this->getHelper('question');
     $possible_users = array('www-data', 'apache', 'ubuntu', 'root');
     $question = new Question('<question>Username:</question> ');
     $question->setAutocompleterValues($possible_users);
     $username = $questionHelper->ask($input, $output, $question);
     if (!$username) {
         $output->writeln('you need to enter a username!');
         return 1;
     }
     $question = new Question('<question>Host:</question> ');
     $host = $questionHelper->ask($input, $output, $question);
     if (!$host) {
         $output->writeln('you need to enter a host!');
         return 1;
     }
     $question = new Question('<question>Remote path:</question> ');
     $path = $questionHelper->ask($input, $output, $question);
     if (!$path) {
         $output->writeln('you need to enter a path!');
         return 1;
     }
     $question = new ConfirmationQuestion('<question>Always run deploy:optimize after publish? (y/n)</question> ', false);
     $optimize = $questionHelper->ask($input, $output, $question);
     $question = new ConfirmationQuestion('<question>Use sudo to change file permission on remote server? (y/n)</question> ', false);
     $use_sudo = $questionHelper->ask($input, $output, $question);
     $possible_groups = array('www-data', 'apache', 'httpd');
     $question = new Question('<question>Remote group:</question> ', 'www-data');
     $question->setAutocompleterValues($possible_groups);
     $remote_group = $questionHelper->ask($input, $output, $question);
     $question = new ConfirmationQuestion('<question>Ue a .pem file to publish? (y/n)</question> ', false);
     $use_pem = $questionHelper->ask($input, $output, $question);
     if ($use_pem) {
         $question = new Question('<question>.pem file path (absolute or relative):</question> ');
         $pem_path = $questionHelper->ask($input, $output, $question);
     } else {
         $pem_path = false;
     }
     $custom_excludes = $input->getOption('exclude');
     $standard_excludes = array(".git*", 'app/public/files/*', 'app/config/config.user.php', '.htaccess', 'backups', 'app/views/smarty/compiled_templates/*', 'app/proxies/*', 'app/public/admin/include/dbcommon.php', 'app/public/admin/connections/ConnectionManager.php', '*.pem');
     $excludes = array_merge($custom_excludes, $standard_excludes);
     $yamlDumper = new Dumper();
     $toDump = array('username' => $username, 'host' => $host, 'remote_dir' => $path, 'always_run_optimize' => $optimize, 'remote_group' => $remote_group, 'use_sudo' => $use_sudo, 'exclude' => $excludes, 'use_pem' => $use_pem, 'pem_path' => $pem_path);
     $yaml = $yamlDumper->dump($toDump, 2);
     $profile_name = $input->getArgument('profile-name');
     CommandUtils::checkDeployement();
     while (file_exists('deployement/publish_' . $profile_name . '.yml')) {
         $question = new ConfirmationQuestion('<question>deployement/publish_' . $profile_name . '.yml already exists, overwrite it?', false);
         $answer = $questionHelper->ask($input, $output, $question);
         if (!$answer) {
             $question = new Question('<question>New porfile name:</question> ');
             $profile_name = $questionHelper->ask($input, $output, $question);
         } else {
             break;
         }
     }
     if (file_put_contents('deployement/publish_' . $profile_name . '.yml', $yaml)) {
         $output->writeln('<info>Publish profile created at deployement/publish_' . $profile_name . '.yml</info>');
     } else {
         $output->writeln('<error>Error while writing output file!</error>');
     }
 }
Example #2
0
 protected function execute(InputInterface $input, OutputInterface $output)
 {
     $questionHelper = $this->getHelper('question');
     if (!CommandUtils::checkCommand('docker') && !CommandUtils::checkCommand('docker.io')) {
         $output->writeln('<error>Docker does not seem to be installed, please install it!</error>');
         $question = new ConfirmationQuestion('<question>Continue anyway?</question> ', 'n');
         if (!$questionHelper->ask($input, $output, $question)) {
             return;
         }
     }
     CommandUtils::checkDeployement();
     $web_port = $input->getOption('web-port-dev');
     $db_port = $input->getOption('db-port-dev');
     $db_host = $input->getOption('db-host-dev');
     $phpmyadmin_port = $input->getOption('phpmyadmin-port-dev');
     $this->askForFile('dev-php.ini', $input, $output, $questionHelper);
     $this->askForFileNginx('dev-nginx.conf', $input, $output, $questionHelper);
     if (!file_exists($this->fig_dev)) {
         $output->write('Checking for nginx error log in app/logs/docker-logs/ ...');
         if (!file_exists('app/logs/docker-logs')) {
             mkdir('app/logs/docker-logs', 0777, true);
         }
         if (!file_exists('app/logs/docker-logs/nginx-error.log')) {
             touch('app/logs/docker-logs/nginx-error.log');
         }
         $output->writeln('<info>DONE</info>');
         $output->write('Generating fig.yml for developement...');
         $toBeWritten = "web:\n  image: neropaco/docker-lamp-dev\n  ports:\n    - \"{$web_port}:80\"\n  links:\n    - db:" . $db_host . "\n  volumes:\n    - .:/srv/http\n    - ./deployement/php/dev-php.ini:/etc/php5/fpm/php.ini\n    - ./deployement/nginx/dev-nginx.conf:/etc/nginx/nginx.conf\n    - ./app/logs/docker-logs/nginx-error.log:/var/log/nginx/error.log\n\ndb:\n  image: tutum/mariadb:10.1\n  ports:\n    - \"{$db_port}:3306\"\n\nphpmyadmin:\n  image: maxexcloo/phpmyadmin\n  ports:\n    - \"{$phpmyadmin_port}:80\"\n  links:\n    - db:mariadb";
         if (file_put_contents($this->fig_dev, $toBeWritten)) {
             $output->writeln('<info>DONE</info>');
         } else {
             $output->writeln('<error>ERROR</error>');
         }
     } else {
         $output->writeln('<comment>' . $this->fig_dev . ' file already exists. Delete it or move it to recreate the file</comment>');
     }
     if ($input->getOption('create-production') != 1) {
         return;
     }
     $this->askForFile('prod-php.ini', $input, $output, $questionHelper);
     $this->askForFileNginx('prod-nginx.conf', $input, $output, $questionHelper);
     if (!file_exists($this->fig_prod)) {
         $output->write('Generating fig_prod.yml for production...');
         $db_host = $input->getOption('db-host');
         $web_port = $input->getOption('web-port');
         $db_port = $input->getOption('db-port');
         $virtualhost = $input->getOption('virtualhost');
         $app_name = $input->getArgument('app-name');
         $toBeWritten = "web:\n  image: stonedz/docker-lamp:latest\n  links:\n    - db:" . $db_host . "\n  volumes:\n    - .:/srv/http\n    - ./deployement/php/prod-php.ini:/etc/php5/fpm/php.ini\n    - ./deployement/nginx/prod-nginx.conf:/etc/nginx/nginx.conf\n  ports:\n    - \"{$web_port}:80\"\n  environment:\n    VIRTUAL_HOST: {$virtualhost}\n\ndb:\n  image: tutum/mariadb:10.1\n  volumes_from:\n    - " . $app_name . "_db_data\n  ports:\n    - \"{$db_port}:3306\"";
         if (file_put_contents($this->fig_prod, $toBeWritten)) {
             $output->writeln('<info>DONE</info>');
         } else {
             $output->writeln('<error>ERROR</error>');
         }
         $question = new ConfirmationQuestion('<question>The database in production will use a separate volume data container to maintain data, it is called ' . $app_name . '_db_data, do you want me to try to locate it and create it? </question>', 'n');
         if ($questionHelper->ask($input, $output, $question)) {
             $this->create_db_volume_data($input, $output, $app_name . '_db_data', $questionHelper);
         } else {
             return;
         }
     } else {
         $output->writeln('<comment>' . $this->fig_prod . ' file already exists. Delete it or move it to recreate the file</comment>');
     }
 }