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>'); } }
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>'); } }