- Support azure, bitbucket, github, gitlab, google providers - Add authentication page to settings Co-authored-by: Suraj Kumar <srjkmr1024@gmail.com> Co-authored-by: Michael Castanieto <mcastanieto@gmail.com> Co-authored-by: Mike Kim <m.kim4247@gmail.com>
		
			
				
	
	
		
			206 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
			
		
		
	
	
			206 lines
		
	
	
		
			7.6 KiB
		
	
	
	
		
			PHP
		
	
	
	
	
	
<?php
 | 
						|
 | 
						|
namespace Database\Seeders;
 | 
						|
 | 
						|
use App\Data\ServerMetadata;
 | 
						|
use App\Enums\ProxyStatus;
 | 
						|
use App\Enums\ProxyTypes;
 | 
						|
use App\Models\GithubApp;
 | 
						|
use App\Models\GitlabApp;
 | 
						|
use App\Models\InstanceSettings;
 | 
						|
use App\Models\PrivateKey;
 | 
						|
use App\Models\Server;
 | 
						|
use App\Models\StandaloneDocker;
 | 
						|
use App\Models\Team;
 | 
						|
use App\Models\User;
 | 
						|
use Illuminate\Database\Seeder;
 | 
						|
use Illuminate\Support\Facades\DB;
 | 
						|
use Illuminate\Support\Facades\Process;
 | 
						|
use Illuminate\Support\Facades\Storage;
 | 
						|
 | 
						|
class ProductionSeeder extends Seeder
 | 
						|
{
 | 
						|
    public function run(): void
 | 
						|
    {
 | 
						|
        if (isCloud()) {
 | 
						|
            echo "Running in cloud mode.\n";
 | 
						|
        } else {
 | 
						|
            echo "Running in self-hosted mode.\n";
 | 
						|
        }
 | 
						|
 | 
						|
        // Fix for 4.0.0-beta.37
 | 
						|
        if (User::find(0) !== null && Team::find(0) !== null) {
 | 
						|
            if (DB::table('team_user')->where('user_id', 0)->first() === null) {
 | 
						|
                DB::table('team_user')->insert([
 | 
						|
                    'user_id' => 0,
 | 
						|
                    'team_id' => 0,
 | 
						|
                    'role' => 'owner',
 | 
						|
                    'created_at' => now(),
 | 
						|
                    'updated_at' => now(),
 | 
						|
                ]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (InstanceSettings::find(0) == null) {
 | 
						|
            InstanceSettings::create([
 | 
						|
                'id' => 0
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
        if (GithubApp::find(0) == null) {
 | 
						|
            GithubApp::create([
 | 
						|
                'id' => 0,
 | 
						|
                'name' => 'Public GitHub',
 | 
						|
                'api_url' => 'https://api.github.com',
 | 
						|
                'html_url' => 'https://github.com',
 | 
						|
                'is_public' => true,
 | 
						|
                'team_id' => 0,
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
        if (GitlabApp::find(0) == null) {
 | 
						|
            GitlabApp::create([
 | 
						|
                'id' => 0,
 | 
						|
                'name' => 'Public GitLab',
 | 
						|
                'api_url' => 'https://gitlab.com/api/v4',
 | 
						|
                'html_url' => 'https://gitlab.com',
 | 
						|
                'is_public' => true,
 | 
						|
                'team_id' => 0,
 | 
						|
            ]);
 | 
						|
        }
 | 
						|
 | 
						|
        if (!isCloud() && config('coolify.is_windows_docker_desktop') == false) {
 | 
						|
            echo "Checking localhost key.\n";
 | 
						|
            // Save SSH Keys for the Coolify Host
 | 
						|
            $coolify_key_name = "id.root@host.docker.internal";
 | 
						|
            $coolify_key = Storage::disk('ssh-keys')->get("{$coolify_key_name}");
 | 
						|
 | 
						|
            if ($coolify_key) {
 | 
						|
                PrivateKey::updateOrCreate(
 | 
						|
                    [
 | 
						|
                        'id' => 0,
 | 
						|
                        'team_id' => 0,
 | 
						|
                    ],
 | 
						|
                    [
 | 
						|
                        'name' => 'localhost\'s key',
 | 
						|
                        'description' => 'The private key for the Coolify host machine (localhost).', 'private_key' => $coolify_key
 | 
						|
                    ]
 | 
						|
                );
 | 
						|
            } else {
 | 
						|
                echo "No SSH key found for the Coolify host machine (localhost).\n";
 | 
						|
                echo "Please generate one and save it in /data/coolify/ssh/keys/{$coolify_key_name}\n";
 | 
						|
                echo "Then try to install again.\n";
 | 
						|
                exit(1);
 | 
						|
            }
 | 
						|
            // Add Coolify host (localhost) as Server if it doesn't exist
 | 
						|
            if (Server::find(0) == null) {
 | 
						|
                $server_details = [
 | 
						|
                    'id' => 0,
 | 
						|
                    'name' => "localhost",
 | 
						|
                    'description' => "This is the server where Coolify is running on. Don't delete this!",
 | 
						|
                    'user' => 'root',
 | 
						|
                    'ip' => "host.docker.internal",
 | 
						|
                    'team_id' => 0,
 | 
						|
                    'private_key_id' => 0
 | 
						|
                ];
 | 
						|
                $server_details['proxy'] = ServerMetadata::from([
 | 
						|
                    'type' => ProxyTypes::TRAEFIK_V2->value,
 | 
						|
                    'status' => ProxyStatus::EXITED->value
 | 
						|
                ]);
 | 
						|
                $server = Server::create($server_details);
 | 
						|
                $server->settings->is_reachable = true;
 | 
						|
                $server->settings->is_usable = true;
 | 
						|
                $server->settings->save();
 | 
						|
            } else {
 | 
						|
                $server = Server::find(0);
 | 
						|
                $server->settings->is_reachable = true;
 | 
						|
                $server->settings->is_usable = true;
 | 
						|
                $server->settings->save();
 | 
						|
            }
 | 
						|
            if (StandaloneDocker::find(0) == null) {
 | 
						|
                StandaloneDocker::create([
 | 
						|
                    'id' => 0,
 | 
						|
                    'name' => 'localhost-coolify',
 | 
						|
                    'network' => 'coolify',
 | 
						|
                    'server_id' => 0,
 | 
						|
                ]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
        if (config('coolify.is_windows_docker_desktop')) {
 | 
						|
            PrivateKey::updateOrCreate(
 | 
						|
                [
 | 
						|
                    'id' => 0,
 | 
						|
                    'team_id' => 0,
 | 
						|
                ],
 | 
						|
                [
 | 
						|
                    "name" => "Testing-host",
 | 
						|
                    "description" => "This is a a docker container with SSH access",
 | 
						|
                    "private_key" => "-----BEGIN OPENSSH PRIVATE KEY-----
 | 
						|
b3BlbnNzaC1rZXktdjEAAAAABG5vbmUAAAAEbm9uZQAAAAAAAAABAAAAMwAAAAtzc2gtZW
 | 
						|
QyNTUxOQAAACBbhpqHhqv6aI67Mj9abM3DVbmcfYhZAhC7ca4d9UCevAAAAJi/QySHv0Mk
 | 
						|
hwAAAAtzc2gtZWQyNTUxOQAAACBbhpqHhqv6aI67Mj9abM3DVbmcfYhZAhC7ca4d9UCevA
 | 
						|
AAAECBQw4jg1WRT2IGHMncCiZhURCts2s24HoDS0thHnnRKVuGmoeGq/pojrsyP1pszcNV
 | 
						|
uZx9iFkCELtxrh31QJ68AAAAEXNhaWxANzZmZjY2ZDJlMmRkAQIDBA==
 | 
						|
-----END OPENSSH PRIVATE KEY-----
 | 
						|
"
 | 
						|
                ]
 | 
						|
            );
 | 
						|
            if (Server::find(0) == null) {
 | 
						|
                $server_details = [
 | 
						|
                    'id' => 0,
 | 
						|
                    'uuid' => 'coolify-testing-host',
 | 
						|
                    'name' => "localhost",
 | 
						|
                    'description' => "This is the server where Coolify is running on. Don't delete this!",
 | 
						|
                    'user' => 'root',
 | 
						|
                    'ip' => "coolify-testing-host",
 | 
						|
                    'team_id' => 0,
 | 
						|
                    'private_key_id' => 0
 | 
						|
                ];
 | 
						|
                $server_details['proxy'] = ServerMetadata::from([
 | 
						|
                    'type' => ProxyTypes::TRAEFIK_V2->value,
 | 
						|
                    'status' => ProxyStatus::EXITED->value
 | 
						|
                ]);
 | 
						|
                $server = Server::create($server_details);
 | 
						|
                $server->settings->is_reachable = true;
 | 
						|
                $server->settings->is_usable = true;
 | 
						|
                $server->settings->save();
 | 
						|
            } else {
 | 
						|
                $server = Server::find(0);
 | 
						|
                $server->settings->is_reachable = true;
 | 
						|
                $server->settings->is_usable = true;
 | 
						|
                $server->settings->save();
 | 
						|
            }
 | 
						|
            if (StandaloneDocker::find(0) == null) {
 | 
						|
                StandaloneDocker::create([
 | 
						|
                    'id' => 0,
 | 
						|
                    'name' => 'localhost-coolify',
 | 
						|
                    'network' => 'coolify',
 | 
						|
                    'server_id' => 0,
 | 
						|
                ]);
 | 
						|
            }
 | 
						|
        }
 | 
						|
 | 
						|
        try {
 | 
						|
            $settings = InstanceSettings::get();
 | 
						|
            if (is_null($settings->public_ipv4)) {
 | 
						|
                $ipv4 = Process::run('curl -4s https://ifconfig.io')->output();
 | 
						|
                if ($ipv4) {
 | 
						|
                    $ipv4 = trim($ipv4);
 | 
						|
                    $ipv4 = filter_var($ipv4, FILTER_VALIDATE_IP);
 | 
						|
                    $settings->update(['public_ipv4' => $ipv4]);
 | 
						|
                }
 | 
						|
            }
 | 
						|
            if (is_null($settings->public_ipv6)) {
 | 
						|
                $ipv6 = Process::run('curl -6s https://ifconfig.io')->output();
 | 
						|
                if ($ipv6) {
 | 
						|
                    $ipv6 = trim($ipv6);
 | 
						|
                    $ipv6 = filter_var($ipv6, FILTER_VALIDATE_IP);
 | 
						|
                    $settings->update(['public_ipv6' => $ipv6]);
 | 
						|
                }
 | 
						|
            }
 | 
						|
        } catch (\Throwable $e) {
 | 
						|
            echo "Error: {$e->getMessage()}\n";
 | 
						|
        }
 | 
						|
 | 
						|
        $oauth_settings_seeder = new OauthSettingSeeder();
 | 
						|
        $oauth_settings_seeder->run();
 | 
						|
    }
 | 
						|
}
 |