From afd2270e0e374defc127d01d02f8458dcc7f18be Mon Sep 17 00:00:00 2001 From: Peter Papp Date: Sat, 10 Apr 2021 08:41:00 +0200 Subject: [PATCH] setup:prod script --- app/Console/Commands/SetupDevEnvironment.php | 12 +- app/Console/Commands/SetupProdEnvironment.php | 224 ++++++++++++++++++ app/Console/Kernel.php | 2 + 3 files changed, 227 insertions(+), 11 deletions(-) create mode 100644 app/Console/Commands/SetupProdEnvironment.php diff --git a/app/Console/Commands/SetupDevEnvironment.php b/app/Console/Commands/SetupDevEnvironment.php index d2bfbe8f..40407af1 100644 --- a/app/Console/Commands/SetupDevEnvironment.php +++ b/app/Console/Commands/SetupDevEnvironment.php @@ -32,27 +32,18 @@ class SetupDevEnvironment extends Command protected $description = 'Set up development environment with demo data'; private $setup; - private $helper; - /** - * Create a new command instance. - * - * @return void - */ public function __construct() { parent::__construct(); $this->faker = Faker\Factory::create(); $this->setup = resolve(SetupService::class); - $this->helper = resolve(HelperService::class); } /** * Execute the console command. - * - * @return int */ - public function handle() + public function handle(): void { $this->info('Setting up development environment'); @@ -878,7 +869,6 @@ class SetupDevEnvironment extends Command ->each(function ($file) { Storage::putFileAs("system", storage_path("demo/app/$file"), $file, "private"); }); - } /** diff --git a/app/Console/Commands/SetupProdEnvironment.php b/app/Console/Commands/SetupProdEnvironment.php new file mode 100644 index 00000000..a0b2195e --- /dev/null +++ b/app/Console/Commands/SetupProdEnvironment.php @@ -0,0 +1,224 @@ +setup = resolve(SetupService::class); + } + + /** + * Execute the console command. + * + * @return int + */ + public function handle() + { + $this->info('Setting up production environment'); + + $this->info('Creating system directories...'); + $this->setup->create_directories(); + + $this->info('Migrating Databases...'); + $this->migrate_and_generate(); + + $this->info('Storing default settings and content...'); + $this->store_default_settings(); + $this->setup->seed_default_pages(); + $this->setup->seed_default_settings($this->license); + $this->setup->seed_default_language(); + + $this->info('Creating default admin...'); + $this->create_admin(); + + $this->info('Clearing application cache...'); + $this->clear_cache(); + + $this->info('Everything is done, congratulations! 🥳🥳🥳'); + } + + /** + * Store main app settings into database + */ + private function store_default_settings(): void + { + // Get options + collect([ + [ + 'name' => 'setup_wizard_database', + 'value' => 1, + ], + [ + 'name' => 'app_title', + 'value' => 'VueFileManager', + ], + [ + 'name' => 'app_description', + 'value' => 'Your self-hosted storage cloud software powered by Laravel and Vue', + ], + [ + 'name' => 'app_logo', + 'value' => null, + ], + [ + 'name' => 'app_logo_horizontal', + 'value' => null, + ], + [ + 'name' => 'app_favicon', + 'value' => null, + ], + [ + 'name' => 'app_og_image', + 'value' => null, + ], + [ + 'name' => 'app_touch_icon', + 'value' => null, + ], + [ + 'name' => 'google_analytics', + 'value' => null, + ], + [ + 'name' => 'contact_email', + 'value' => null, + ], + [ + 'name' => 'registration', + 'value' => 0, + ], + [ + 'name' => 'storage_limitation', + 'value' => 1, + ], + [ + 'name' => 'storage_default', + 'value' => 5, + ], + [ + 'name' => 'setup_wizard_success', + 'value' => 1, + ], + [ + 'name' => 'license', + 'value' => $this->license, + ], + [ + 'name' => 'purchase_code', + 'value' => '26b889eb-3602-4bf2-beb3-3sc378fcf484', + ], + [ + 'name' => 'billing_address', + 'value' => null, + ], + [ + 'name' => 'billing_city', + 'value' => null, + ], + [ + 'name' => 'billing_country', + 'value' => null, + ], + [ + 'name' => 'billing_name', + 'value' => null, + ], + [ + 'name' => 'billing_phone_number', + 'value' => null, + ], + [ + 'name' => 'billing_postal_code', + 'value' => null, + ], + [ + 'name' => 'billing_state', + 'value' => null, + ], + [ + 'name' => 'billing_vat_number', + 'value' => null, + ] + ])->each(function ($col) { + Setting::forceCreate([ + 'name' => $col['name'], + 'value' => $col['value'] + ]); + }); + } + + /** + * Create default admin account + */ + private function create_admin(): void + { + $user = User::forceCreate([ + 'role' => 'admin', + 'email' => 'admin@vuefilemanager.com', + 'password' => bcrypt('vuefilemanager'), + ]); + + $user + ->settings() + ->create([ + 'storage_capacity' => 5, + 'name' => 'Admin', + ]); + + // Show user credentials + $this->info('Default admin account created. Email: admin@vuefilemanager.com and Password: vuefilemanager'); + } + + /** + * Migrate database and generate application keys + */ + private function migrate_and_generate(): void + { + // Migrate database + $this->call('migrate:fresh', [ + '--force' => true + ]); + + // Generate app key + $this->call('key:generate', [ + '--force' => true + ]); + } + + /** + * Clear app cache + */ + private function clear_cache(): void + { + $this->call('cache:clear'); + $this->call('config:clear'); + $this->call('view:clear'); + } +} diff --git a/app/Console/Kernel.php b/app/Console/Kernel.php index 3124ec7f..aa353d19 100644 --- a/app/Console/Kernel.php +++ b/app/Console/Kernel.php @@ -3,6 +3,7 @@ namespace App\Console; use App\Console\Commands\SetupDevEnvironment; +use App\Console\Commands\SetupProdEnvironment; use App\Services\SchedulerService; use Illuminate\Console\Scheduling\Schedule; use Illuminate\Foundation\Console\Kernel as ConsoleKernel; @@ -16,6 +17,7 @@ class Kernel extends ConsoleKernel */ protected $commands = [ SetupDevEnvironment::class, + SetupProdEnvironment::class, ]; /**