Create a VirtualHost via PHP CLI script
Usage
# sudo ./sitegen/cli ${siteName} ${webRoot}
sudo ./sitegen/cli mywebsitename.local /var/www
| #!/usr/bin/env php | |
| <?php | |
| /** | |
| * Copyright © SolutionsITW, Inc. All rights reserved. | |
| * See COPYING.txt for license details. | |
| */ | |
| if (PHP_SAPI !== 'cli') { | |
| echo 'sitegen must be run as a CLI application'; | |
| exit(1); | |
| } | |
| // ------------------------------------------------------------------------ | |
| // Procedural functions | |
| // ------------------------------------------------------------------------ | |
| function pullArguments($args) { | |
| $final = array(); | |
| for ($i = 1; $i < count($args); $i++) { | |
| if ($args[$i][0] == '-') { | |
| if ($args[$i][1] == '-') { | |
| $final[ltrim($args[$i], '-')] = null; | |
| } else { | |
| if (count($args) <= $i + 1 || $args[$i + 1][0] == '-') { | |
| die('Invalid argument supplied for argument ' . $args[$i]); | |
| } | |
| $final[ltrim($args[$i], '-')] = $args[++$i]; | |
| } | |
| } | |
| } | |
| return $final; | |
| } | |
| function getArgument($key, $default) { | |
| global $args; | |
| if (isset($args[$key])) { | |
| return $args[$key]; | |
| } | |
| return $default; | |
| } | |
| function hasArgument($key) { | |
| global $args; | |
| return array_key_exists($key, $args); | |
| } | |
| function setupController($args) { | |
| $new_args = []; | |
| foreach($args as $arg) { | |
| if (strpos($arg, ':')) { | |
| $temp = explode(':', $arg); | |
| if (count($temp) > 2 || count($temp) <= 1) { | |
| exit('Malformed CLI command. Type --help for more assistance.'); | |
| } | |
| list($controller, $method) = $temp; | |
| array_push($new_args, $controller, $method); | |
| } else { | |
| $new_args[] = $arg; | |
| } | |
| } | |
| return $new_args; | |
| } | |
| function help() { | |
| echo print_r(" | |
| Command Description Default Value | |
| ----------------------------------------------------------------------------- | |
| Usage command [options] [arguments] | |
| bin/app <controller> <method> <arg1> <arg2> | |
| ----------------------------------------------------------------------------- | |
| --help Displays the help menu" | |
| , true); | |
| echo PHP_EOL . PHP_EOL; | |
| exit; | |
| } | |
| // ------------------------------------------------------------------------ | |
| // Begin application setup | |
| // ------------------------------------------------------------------------ | |
| $SELF = basename(__FILE__, '.php'); | |
| $BASEPATH = rtrim(str_replace([$SELF, '/bin'], '', __FILE__), '/') . '/'; | |
| unset($SELF); | |
| $args = pullArguments($argv); | |
| $_SERVER['argv'] = setupController($argv); | |
| if (hasArgument('help')) { | |
| help(); | |
| exit(1); | |
| } | |
| $siteName = (isset($argv[1])) ? $argv[1] : ''; | |
| $webRoot = (isset($argv[2])) ? $argv[2] : ''; | |
| $vHostTemplatePath = 'virtual-host-template.tpl'; | |
| // Run everything | |
| try { | |
| if (empty($siteName) || empty($webRoot)) { | |
| throw new Exception("The sitename and/or webroot was not found", 1); | |
| } | |
| mkdir($webRoot . '/' . $siteName); | |
| mkdir($webRoot . '/' . $siteName . '/log'); | |
| // TODO: Check that dirs exists | |
| $virtualHostTemplate = file_get_contents($BASEPATH . $vHostTemplatePath); | |
| if (empty($virtualHostTemplate)) { | |
| throw new Exception("The virtualhost template file is empty", 1); | |
| } | |
| // Prepare template | |
| $virtualHostTemplate = str_replace( | |
| [ | |
| '${adminEmail}', | |
| '${siteName}', | |
| '${siteFolder}', | |
| ], | |
| [ | |
| '[email protected]', | |
| rtrim($siteName, '/'), | |
| rtrim($siteName, '/'), | |
| ], | |
| $virtualHostTemplate | |
| ); | |
| file_put_contents('/etc/apache2/sites-available/' . $siteName . '.conf', $virtualHostTemplate); | |
| // TODO: Run the followign shell_exec("command 2>&1"); `a2ensite` `service apache2 reload` | |
| } catch (\Exception $e) { | |
| while ($e) { | |
| echo 'Autoload error: ' . $e->getMessage(); | |
| } | |
| exit(1); | |
| } |
| <VirtualHost *:80> | |
| ServerAdmin ${adminEmail} | |
| ServerName ${siteName} | |
| DocumentRoot /var/www/${siteFolder}/public | |
| ErrorLog /var/www/${siteFolder}/log/error.log | |
| CustomLog /var/www/${siteFolder}/log/requests.log combined | |
| <Directory /> | |
| Options FollowSymLinks | |
| AllowOverride All | |
| </Directory> | |
| <Directory /var/www/${siteFolder}/public> | |
| Options -Indexes +FollowSymLinks +MultiViews | |
| AllowOverride All | |
| Order allow,deny | |
| allow from all | |
| </Directory> | |
| </VirtualHost> |