From a7318b851be13e6f3931cf19f0501a96a4bffcbf Mon Sep 17 00:00:00 2001 From: Nabeel Shahzad Date: Thu, 14 Dec 2017 17:12:42 -0600 Subject: [PATCH] Set some defaults for the cache and queue drivers in the installer --- .env.dev.example | 12 --- .../2017_12_14_225241_create_jobs_table.php | 36 ++++++++ ..._12_14_225337_create_failed_jobs_table.php | 35 ++++++++ config/app.php | 2 +- config/mail.php | 4 +- config/phpvms.php | 4 +- config/queue.php | 1 - modules/Installer/Config/config.php | 4 + .../Resources/views/stubs/env.blade.php | 34 +++++--- .../Installer/Services/EnvironmentService.php | 82 ++++++++++++++----- 10 files changed, 165 insertions(+), 49 deletions(-) create mode 100644 app/Database/migrations/2017_12_14_225241_create_jobs_table.php create mode 100644 app/Database/migrations/2017_12_14_225337_create_failed_jobs_table.php diff --git a/.env.dev.example b/.env.dev.example index 68cef183..a0157627 100644 --- a/.env.dev.example +++ b/.env.dev.example @@ -2,19 +2,7 @@ APP_ENV=dev APP_KEY=base64:ve66Z5Kt/zTN3p++0zOPu854PHfZkwJE5VuoFAlzHtI= APP_DEBUG=true APP_LOCALE=en -APP_URL=http://localhost APP_LOG=daily APP_LOG_LEVEL=debug APP_LOG_MAX_FILES=7 - -DB_CONNECTION=sqlite -DB_HOST= -DB_PORT= -DB_DATABASE= -DB_USERNAME= -DB_PASSWORD= -DB_PREFIX= - -CACHE_DRIVER=array -CACHE_PREFIX= diff --git a/app/Database/migrations/2017_12_14_225241_create_jobs_table.php b/app/Database/migrations/2017_12_14_225241_create_jobs_table.php new file mode 100644 index 00000000..58d77154 --- /dev/null +++ b/app/Database/migrations/2017_12_14_225241_create_jobs_table.php @@ -0,0 +1,36 @@ +bigIncrements('id'); + $table->string('queue')->index(); + $table->longText('payload'); + $table->unsignedTinyInteger('attempts'); + $table->unsignedInteger('reserved_at')->nullable(); + $table->unsignedInteger('available_at'); + $table->unsignedInteger('created_at'); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('jobs'); + } +} diff --git a/app/Database/migrations/2017_12_14_225337_create_failed_jobs_table.php b/app/Database/migrations/2017_12_14_225337_create_failed_jobs_table.php new file mode 100644 index 00000000..d432dff0 --- /dev/null +++ b/app/Database/migrations/2017_12_14_225337_create_failed_jobs_table.php @@ -0,0 +1,35 @@ +bigIncrements('id'); + $table->text('connection'); + $table->text('queue'); + $table->longText('payload'); + $table->longText('exception'); + $table->timestamp('failed_at')->useCurrent(); + }); + } + + /** + * Reverse the migrations. + * + * @return void + */ + public function down() + { + Schema::dropIfExists('failed_jobs'); + } +} diff --git a/config/app.php b/config/app.php index 5722e1b6..19a57ac8 100755 --- a/config/app.php +++ b/config/app.php @@ -6,7 +6,7 @@ return [ 'env' => env('APP_ENV', 'dev'), 'debug' => env('APP_DEBUG', true), 'url' => env('APP_URL', 'http://localhost'), - 'version' => '4.0', + 'version' => '7.0', 'timezone' => 'UTC', 'locale' => env('APP_LOCALE', 'en'), diff --git a/config/mail.php b/config/mail.php index 9d4c4d83..530fa5e5 100755 --- a/config/mail.php +++ b/config/mail.php @@ -56,8 +56,8 @@ return [ */ 'from' => [ - 'address' => 'hello@example.com', - 'name' => 'Example', + 'name' => env('MAIL_FROM_NAME', 'phpVMS Admin'), + 'address' => env('MAIL_FROM_ADDRESS', ''), ], /* diff --git a/config/phpvms.php b/config/phpvms.php index e1c3c15b..a5616227 100644 --- a/config/phpvms.php +++ b/config/phpvms.php @@ -14,12 +14,12 @@ return [ /** * The skin to use for the front-end */ - 'skin' => 'default', + 'skin' => env('APP_SKIN', 'default'), /** * Your vaCentral API key */ - 'vacentral_api_key' => '', + 'vacentral_api_key' => env('VACENTRAL_API_KEY', ''), /** * vaCentral API URL. You likely don't need to change this diff --git a/config/queue.php b/config/queue.php index 549322ed..7a150cfe 100755 --- a/config/queue.php +++ b/config/queue.php @@ -63,7 +63,6 @@ return [ 'queue' => 'default', 'retry_after' => 90, ], - ], /* diff --git a/modules/Installer/Config/config.php b/modules/Installer/Config/config.php index 6eac51bf..10b87cba 100644 --- a/modules/Installer/Config/config.php +++ b/modules/Installer/Config/config.php @@ -6,6 +6,10 @@ return [ 'php' => [ 'version' => '7.0.0' ], + + # TODO: Remove eventually + 'env_postfix' => '.generated', + 'extensions' => [ 'openssl', 'pdo', diff --git a/modules/Installer/Resources/views/stubs/env.blade.php b/modules/Installer/Resources/views/stubs/env.blade.php index 7abe523a..265b0291 100644 --- a/modules/Installer/Resources/views/stubs/env.blade.php +++ b/modules/Installer/Resources/views/stubs/env.blade.php @@ -4,7 +4,10 @@ # APP_ENV=dev -APP_KEY=base64:{!! $app_key !!} +APP_URL=http://localhost +APP_SKIN=default +VACENTRAL_API_KEY= +APP_KEY=base64:{!! $APP_KEY !!} APP_DEBUG=true APP_LOCALE=en @@ -12,18 +15,25 @@ APP_LOG=daily APP_LOG_LEVEL=debug APP_LOG_MAX_FILES=3 -APP_URL=http://localhost - -DB_CONNECTION={!! $db_conn !!} -DB_HOST={!! $db_host !!} -DB_PORT={!! $db_port !!} -DB_DATABASE={!! $db_name !!} -DB_USERNAME={!! $db_user !!} -DB_PASSWORD={!! $db_pass !!} +DB_CONNECTION={!! $DB_CONN !!} +DB_HOST={!! $DB_HOST !!} +DB_PORT={!! $DB_PORT !!} +DB_DATABASE={!! $DB_NAME !!} +DB_USERNAME={!! $DB_USER !!} +DB_PASSWORD={!! $DB_PASS !!} DB_PREFIX= -CACHE_DRIVER=array -CACHE_PREFIX= +MAIL_DRIVER=smtp +MAIL_FROM_ADDRESS=no-reply@phpvms.net +MAIL_FROM_NAME=phpVMS Admin +MAIL_HOST=smtp.mailgun.org +MAIL_PORT=587 +MAIL_ENCRYPTION=tls +MAIL_USERNAME= +MAIL_PASSWORD= + +CACHE_DRIVER={!! $CACHE_DRIVER !!} +CACHE_PREFIX=phpvms REDIS_HOST=localhost REDIS_PASSWORD= @@ -31,4 +41,4 @@ REDIS_PORT=6379 REDIS_DATABASE=1 SESSION_DRIVER=array -QUEUE_DRIVER=sync +QUEUE_DRIVER={!! $QUEUE_DRIVER !!} diff --git a/modules/Installer/Services/EnvironmentService.php b/modules/Installer/Services/EnvironmentService.php index c6b108cb..0385f375 100644 --- a/modules/Installer/Services/EnvironmentService.php +++ b/modules/Installer/Services/EnvironmentService.php @@ -4,49 +4,93 @@ namespace Modules\Installer\Services; use Illuminate\Encryption\Encrypter; use Log; -use PDO; class EnvironmentService { - /** - * Check the PHP version that it meets the minimum requirement + * Create the .env file * @return boolean */ public function createEnvFile($type, $host, $port, $name, $user, $pass) { - $env_opts = [ - 'db_conn' => $type, - 'db_host' => $host, - 'db_port' => $port, - 'db_name' => $name, - 'db_user' => $user, - 'db_pass' => $pass, + $opts = [ + 'APP_KEY' => $this->createAppKey(), + 'DB_CONN' => $type, + 'DB_HOST' => $host, + 'DB_PORT' => $port, + 'DB_NAME' => $name, + 'DB_USER' => $user, + 'DB_PASS' => $pass, ]; - $env_opts['app_key'] = base64_encode(Encrypter::generateKey(config('app.cipher'))); + $opts = $this->getCacheDriver($opts); + $opts = $this->getQueueDriver($opts); + + $this->writeEnvFile($opts); - $this->writeEnvFile($env_opts); return true; } /** - * Get the template file name and write it out + * Generate a fresh new APP_KEY + * @return string */ - protected function writeEnvFile($env_opts) + protected function createAppKey() + { + return base64_encode(Encrypter::generateKey(config('app.cipher'))); + } + + /** + * Determine is APC is installed, if so, then use it as a cache driver + * @param $opts + * @return mixed + */ + protected function getCacheDriver($opts) + { + if(\extension_loaded('apc')) { + $opts['CACHE_DRIVER'] = 'apc'; + } else { + $opts['CACHE_DRIVER'] = 'filesystem'; + } + + return $opts; + } + + /** + * Setup a queue driver that's not the default "sync" + * driver, if a database is being used + * @param $opts + * @return mixed + */ + protected function getQueueDriver($opts) + { + # If we're setting up a database, then also setup + # the default queue driver to use the database + if ($opts['DB_CONN'] === 'mysql' || $opts['DB_CONN'] === 'postgres') { + $opts['QUEUE_DRIVER'] = 'database'; + } else { + $opts['QUEUE_DRIVER'] = 'sync'; + } + + return $opts; + } + + /** + * Get the template file name and write it out + * @param $opts + */ + protected function writeEnvFile($opts) { $app = app(); $env_file = $app->environmentFilePath(); + $env_file .= config('installer.env_postfix'); - # TODO: Remove this post-testing - $env_file .= '.generated'; - - $env_contents = view('installer::stubs/env', $env_opts); + # render it within Blade and log the contents + $env_contents = view('installer::stubs/env', $opts); Log::info($env_contents); $fp = fopen($env_file, 'w'); fwrite($fp, $env_contents); fclose($fp); } - }