diff --git a/app/Livewire/Boarding/Index.php b/app/Livewire/Boarding/Index.php index e6f4c1d7b..15f0cab85 100644 --- a/app/Livewire/Boarding/Index.php +++ b/app/Livewire/Boarding/Index.php @@ -143,6 +143,11 @@ public function mount() $this->projects = Project::ownedByCurrentTeam(['name'])->get(); } } + + // Load projects when on create-project state (for page refresh) + if ($this->currentState === 'create-project' && $this->projects->isEmpty()) { + $this->projects = Project::ownedByCurrentTeam(['name'])->get(); + } } public function explanation() @@ -182,36 +187,12 @@ public function setServerType(string $type) return $this->validateServer('localhost'); } elseif ($this->selectedServerType === 'remote') { $this->privateKeys = PrivateKey::ownedByCurrentTeam(['name'])->where('id', '!=', 0)->get(); - if ($this->privateKeys->count() > 0) { - $this->selectedExistingPrivateKey = $this->privateKeys->first()->id; - } - $this->servers = Server::ownedByCurrentTeam(['name'])->where('id', '!=', 0)->get(); - if ($this->servers->count() > 0) { - $this->selectedExistingServer = $this->servers->first()->id; - $this->updateServerDetails(); - $this->currentState = 'select-existing-server'; - - return; - } + // Don't auto-select - let user explicitly choose from dropdown + // Onboarding always creates new servers, skip existing server selection $this->currentState = 'private-key'; } } - public function selectExistingServer() - { - $this->createdServer = Server::find($this->selectedExistingServer); - if (! $this->createdServer) { - $this->dispatch('error', 'Server is not found.'); - $this->currentState = 'private-key'; - - return; - } - $this->selectedExistingPrivateKey = $this->createdServer->privateKey->id; - $this->serverPublicKey = $this->createdServer->privateKey->getPublicKey(); - $this->updateServerDetails(); - $this->currentState = 'validate-server'; - } - private function updateServerDetails() { if ($this->createdServer) { @@ -229,7 +210,7 @@ public function getProxyType() public function selectExistingPrivateKey() { if (is_null($this->selectedExistingPrivateKey)) { - $this->restartBoarding(); + $this->dispatch('error', 'Please select a private key.'); return; } diff --git a/resources/views/components/boarding-progress.blade.php b/resources/views/components/boarding-progress.blade.php index a946a7471..dec34abac 100644 --- a/resources/views/components/boarding-progress.blade.php +++ b/resources/views/components/boarding-progress.blade.php @@ -7,8 +7,8 @@
@if ($i < $currentStep) @if ($i < $totalSteps)
+ {{ $i < $currentStep ? 'bg-success' : 'bg-neutral-200 dark:bg-coolgray-300' }}">
@endif
diff --git a/resources/views/components/boarding-step.blade.php b/resources/views/components/boarding-step.blade.php index 3e6dc92e5..716987baf 100644 --- a/resources/views/components/boarding-step.blade.php +++ b/resources/views/components/boarding-step.blade.php @@ -1,5 +1,5 @@
-
+

{{ $title }}

@isset($question) @@ -16,7 +16,7 @@
@isset($explanation) -
+

Technical Details

diff --git a/resources/views/livewire/boarding/index.blade.php b/resources/views/livewire/boarding/index.blade.php index e396611a8..f5b31746c 100644 --- a/resources/views/livewire/boarding/index.blade.php +++ b/resources/views/livewire/boarding/index.blade.php @@ -1,759 +1,738 @@ @php use App\Enums\ProxyTypes; @endphp Onboarding | Coolify - -
-
- @if ($currentState === 'welcome') -
-
-

Welcome to Coolify

-

- Connect your first server and start deploying in minutes -

-
- -
-

- What You'll Set Up -

-
-
-
- - - -
-
-
Server Connection
-
Connect via SSH to deploy your resources
-
-
-
-
- - - -
-
-
Docker Environment
-
Automated installation and configuration
-
-
-
-
- - - -
-
-
Project Structure
-
Organize your applications and resources
-
-
-
-
- -
- - Start Setup - -
-
- @elseif ($currentState === 'explanation') - - - - Coolify automates deployment and infrastructure management on your own servers. Deploy applications - from Git, manage databases, and monitor everything—without vendor lock-in. - - -

- Coolify handles server configuration, Docker management, and - deployments automatically. -

-

- All data and configurations live on your infrastructure. - Works offline except for external integrations. -

-

- Get real-time notifications via Discord, Telegram, - Email, and other platforms. -

-
- - - Continue - - -
- @elseif ($currentState === 'select-server-type') - - - - Select where to deploy your applications and databases. You can add more servers later. - - -
- - - + +
+
+ @if ($currentState === 'welcome') +
+
+

Welcome to Coolify

+

+ Connect your first server and start deploying in minutes +

- @if (!$serverReachable) -
-

Server is not reachable

-

Please check the connection details below and correct them if they are - incorrect.

- -
- -
- -

- Non-root user is experimental: - docs -

-
-
- -
-

If the connection details are correct, please ensure:

-
    -
  • The correct public key is in your ~/.ssh/authorized_keys - file for the specified user
  • -
  • Or skip the boarding process and manually add a new private key to Coolify and - the server
  • -
-
- -

- For more help, check this documentation. -

- - - - - Check Again - -
- @endif - - -

- host your applications, databases, and services (collectively - called resources). All CPU-intensive operations run on the target server. -

-

- The machine running Coolify. Not recommended for production - workloads due to resource contention. -

-

- Any SSH-accessible server—cloud providers (AWS, Hetzner, - DigitalOcean), bare metal, or self-hosted infrastructure. -

-
- - @elseif ($currentState === 'private-key') - - - - Configure SSH key-based authentication for secure server access. - - - @if ($privateKeys && $privateKeys->count() > 0) -
-
-
- - @foreach ($privateKeys as $privateKey) - - @endforeach - - Use Selected Key -
-
-
-
-
-
-
-
- OR -
-
-
-
- @endif -
- -
- - - -
-

Use Existing Key

-

I have my own SSH key

-
-
-
- -
- - - -
-

Generate New Key

-

Create ED25519 key pair

-
-
-
-
-
- -

- Uses public-key cryptography for secure, - password-less server access. -

-

- Add the public key to your server's - ~/.ssh/authorized_keys - file. -

-

- Coolify generates ED25519 keys by default for optimal - security and performance. -

-
-
- @elseif ($currentState === 'select-existing-server') - - - There are already servers available for your Team. Do you want to use one of them? - - -
-
- No - (create one for me) - -
-
-
- - @foreach ($servers as $server) - - @endforeach - - Use this Server -
-
-
- @if (!$serverReachable) -
-

Server is not reachable

-

Please check the connection details below and correct them if they are - incorrect.

- -
- -
- -

- Non-root user is experimental: - docs -

-
-
- -
-

If the connection details are correct, please ensure:

-
    -
  • The correct public key is in your ~/.ssh/authorized_keys - file for the specified user
  • -
  • Or skip the boarding process and manually add a new private key to Coolify and - the server
  • -
-
- -

- For more help, check this documentation. -

- - - - - Check again - -
- @endif -
- -

Private Keys are used to connect to a remote server through a secure shell, called SSH.

-

You can use your own private key, or you can let Coolify to create one for you.

-

In both ways, you need to add the public version of your private key to the remote server's - ~/.ssh/authorized_keys file. -

-
-
- @elseif ($currentState === 'create-private-key') - - - - Configure your SSH key for server authentication. - - -
- - - @if ($privateKeyType === 'create') - - - @else - - @endif - @if ($privateKeyType === 'create') -
-
- +
+

+ What You'll Set Up +

+
+
+
+ +
+
+
Server Connection
+
Connect via SSH to deploy your resources +
+
+
+
+
+ + + +
+
+
Docker Environment
+
Automated installation and configuration +
+
+
+
+
+ + + +
+
+
Project Structure
+
Organize your applications and resources +
+
+
+
+
+ +
+ + Start Setup + +
+
+ @elseif ($currentState === 'explanation') + + + + Coolify automates deployment and infrastructure management on your own servers. Deploy applications + from Git, manage databases, and monitor everything—without vendor lock-in. + + +

+ Coolify handles server configuration, Docker management, + and + deployments automatically. +

+

+ All data and configurations live on your infrastructure. + Works offline except for external integrations. +

+

+ Get real-time notifications via Discord, Telegram, + Email, and other platforms. +

+
+ + + Continue + + +
+ @elseif ($currentState === 'select-server-type') + + + + Select where to deploy your applications and databases. You can add more servers later. + + +
+ + + + + + @can('viewAny', App\Models\CloudProviderToken::class) + + +
+
+
+ + + + + + Recommended + +
+
+

Hetzner Cloud

+

+ Deploy servers directly from your Hetzner Cloud account. +

+
+
+
+
+ +
+ @endcan +
+ + @if (!$serverReachable) +
+

Server is not reachable

+

Please check the connection details below and correct them if they are + incorrect.

+ +
+ +
+ +

+ Non-root user is experimental: + docs +

+
+
+ +
+

If the connection details are correct, please ensure:

+
    +
  • The correct public key is in your ~/.ssh/authorized_keys + file for the specified user
  • +
  • Or skip the boarding process and manually add a new private key to Coolify and + the server
  • +
+
+ +

+ For more help, check this documentation. +

+ + + + + Check Again + +
+ @endif +
+ +

+ host your applications, databases, and services (collectively + called resources). All CPU-intensive operations run on the target server. +

+

+ The machine running Coolify. Not recommended for production + workloads due to resource contention. +

+

+ Any SSH-accessible server—cloud providers (AWS, Hetzner, + DigitalOcean), bare metal, or self-hosted infrastructure. +

+
+
+ @elseif ($currentState === 'private-key') + + + + Configure SSH key-based authentication for secure server access. + + + @if ($privateKeys && $privateKeys->count() > 0) +
+
+ + + + @foreach ($privateKeys as $privateKey) + + @endforeach + + Use Selected Key + +
+
+
+
+
+
+
+ OR +
+
+
+
+ @endif +
+ +
+ + + +
+

Use Existing Key

+

I have my own SSH key

+
+
+
+ +
+ + + +
+

Generate New Key

+

Create ED25519 key pair

+
+
+
+
+
+ +

+ Uses public-key cryptography for secure, + password-less server access. +

+

+ Add the public key to your server's + ~/.ssh/authorized_keys + file. +

+

+ Coolify generates ED25519 keys by default for optimal + security and performance. +

+
+
+ @elseif ($currentState === 'create-private-key') + + + + Configure your SSH key for server authentication. + + +
+ + + @if ($privateKeyType === 'create') + + + @else + + @endif + @if ($privateKeyType === 'create') +
+
+ + + +
+

Action Required

+

+ Copy the public key above and add it to your server's + ~/.ssh/authorized_keys + file. +

+
+
+
+ @endif + Save SSH Key + +
+ +

+ Private keys are encrypted at rest in Coolify's database. +

+

+ Deploy the public key to + ~/.ssh/authorized_keys + on your target server for the specified user. +

+

+ Supports RSA, ED25519, ECDSA, and DSA key types in OpenSSH + format. +

+
+
+ @elseif ($currentState === 'create-server') + + + + Provide connection details for your remote server. + + +
+
+ + +
+ + +
+ +
+ +
+ +

+ Non-root user support is experimental. + Learn + more

- @endif - Save SSH Key - -
- -

- Private keys are encrypted at rest in Coolify's database. -

-

- Deploy the public key to - ~/.ssh/authorized_keys - on your target server for the specified user. -

-

- Supports RSA, ED25519, ECDSA, and DSA key types in OpenSSH - format. -

-
-
- @elseif ($currentState === 'create-server') - - - - Provide connection details for your remote server. - - -
-
- - -
- - -
- -
- -
- -

- Non-root user support is experimental. - Learn more -

-
-
-
- Validate Connection - -
- -

- Server must be accessible via SSH on the - specified port (default 22). -

-

- Use IP addresses for direct connections or ensure - DNS resolution is configured. -

-

- Root or sudo-enabled users recommended for full Docker - management capabilities. -

-
-
- @elseif ($currentState === 'validate-server') - - - - Coolify will automatically install Docker {{ $minDockerVersion }}+ if not present. - - -
-
-

Validation Steps

-
-
-
- - - + Validate Connection + + + +

+ Server must be accessible via SSH on the + specified port (default 22). +

+

+ Use IP addresses for direct connections or ensure + DNS resolution is configured. +

+

+ Root or sudo-enabled users recommended for full + Docker + management capabilities. +

+
+ + @elseif ($currentState === 'validate-server') + + + + Coolify will automatically install Docker {{ $minDockerVersion }}+ if not present. + + +
+
+

Validation Steps

+
+
+
+ + + +
+
+
Test SSH Connection
+
Verify key-based authentication
+
-
-
Test SSH Connection
-
Verify key-based authentication
+
+
+ + + +
+
+
Check OS Compatibility +
+
Verify supported Linux distribution +
+
-
-
-
- - - +
+
+ + + +
+
+
Install Docker Engine
+
Auto-install if version + {{ $minDockerVersion }}+ not + found +
+
-
-
Check OS Compatibility
-
Verify supported Linux distribution
-
-
-
-
- - - -
-
-
Install Docker Engine
-
Auto-install if version {{ $minDockerVersion }}+ not - found
-
-
-
-
- - - -
-
-
Configure Network
-
Set up Docker networks and proxy
+
+
+ + + +
+
+
Configure Network
+
Set up Docker networks and proxy +
+
+ + + Server Validation + + + + + Start Validation + +
- - - Server Validation - - - - - Start Validation - - -
- - -

- Coolify installs Docker Engine, Docker Compose, and - configures system requirements automatically. -

-

- Minimum Docker Engine {{ $minDockerVersion }}.x - required. - Manual installation guide -

-

- Sets up Docker networks, proxy configuration, and - resource monitoring. -

-
- - @elseif ($currentState === 'create-project') - - - - @if ($projects && $projects->count() > 0) - You have existing projects. Select one or create a new project to organize your resources. - @else - Create your first project to organize applications, databases, and services. - @endif - - -
- - Create "My First Project" - - + + +

+ Coolify installs Docker Engine, Docker Compose, and + configures system requirements automatically. +

+

+ Minimum Docker Engine {{ $minDockerVersion }}.x + required. + Manual installation guide +

+

+ Sets up Docker networks, proxy configuration, and + resource monitoring. +

+
+ + @elseif ($currentState === 'create-project') + + + @if ($projects && $projects->count() > 0) -
-
-
-
-
- Or use existing -
-
-
- - @foreach ($projects as $project) - - @endforeach - - Use Selected Project -
+ You have existing projects. Select one or create a new project to organize your resources. + @else + Create your first project to organize applications, databases, and services. @endif -
-
- -

- Group related resources (apps, databases, services) - into logical projects. -

-

- Each project includes a production environment by default. - Add staging, development, or custom environments as needed. -

-

- Projects inherit team permissions and can be managed - collaboratively. -

-
-
- @elseif ($currentState === 'create-resource') - -
-
-
- - - -
-

Setup Complete!

-

- Your server is connected and ready. Start deploying your first resource. -

-
+ + +
+ + Create "My First Project" + -
-

- What's Configured -

-
-
-
- - - + @if ($projects && $projects->count() > 0) +
+
+
+
+
+ Or use existing +
+
+
+ + @foreach ($projects as $project) + + @endforeach + + Use Selected Project +
+ @endif +
+ + +

+ Group related resources (apps, databases, + services) + into logical projects. +

+

+ Each project includes a production environment by + default. + Add staging, development, or custom environments as needed. +

+

+ Projects inherit team permissions and can be managed + collaboratively. +

+
+ + @elseif ($currentState === 'create-resource') + +
+
+
+ + + +
+

Setup Complete!

+

+ Your server is connected and ready. Start deploying your first resource. +

+
+ +
+

+ What's Configured +

+
+
+
+ + + +
+
+
Server: {{ $createdServer->name }} +
+
{{ $createdServer->ip }}
+
-
-
Server: {{ $createdServer->name }}
-
{{ $createdServer->ip }}
-
-
-
-
- - - -
-
-
Project: {{ $createdProject->name }}
-
Production environment ready
-
-
-
-
- - - -
-
-
Docker Engine
-
Installed and running
+
+
+ + + +
+
+
Project: + {{ $createdProject->name }} +
+
Production environment ready
+
+
+
+
+ + + +
+
+
Docker Engine
+
Installed and running
+
+ +
+ + Deploy Your First Resource + + +
+ @endif +
-
- - Deploy Your First Resource - - +
+ + + + + +
@endif -
- - @if ($currentState !== 'welcome' && $currentState !== 'create-resource') -
-
- - -
- - - - - - -
- @endif -
+
\ No newline at end of file