2023-08-29 14:31:46 +00:00
@ php use App\Enums\ProxyTypes ; @ endphp
2024-03-25 09:41:44 +00:00
< section class = " flex flex-col h-full lg:items-center lg:justify-center " >
2024-04-25 12:32:37 +00:00
< div
class = " flex flex-col items-center justify-center p-10 mx-2 mt-10 bg-white border rounded-lg shadow lg:p-20 dark:bg-transparent dark:border-none max-w-7xl " >
2024-03-25 13:44:31 +00:00
@ if ( $currentState === 'welcome' )
2024-03-25 09:41:44 +00:00
< h1 class = " text-3xl font-bold lg:text-5xl " > Welcome to Coolify </ h1 >
2024-03-26 09:24:53 +00:00
< div class = " py-6 text-center lg:text-xl " > Let me help you set up the basics .</ div >
2023-08-30 09:06:44 +00:00
< div class = " flex justify-center " >
2024-04-25 12:32:37 +00:00
< x - forms . button class = " justify-center w-64 box-boarding "
wire : click = " $set ('currentState','explanation') " > Get
2024-02-05 13:40:54 +00:00
Started
2023-08-30 12:46:51 +00:00
</ x - forms . button >
2023-08-30 09:06:44 +00:00
</ div >
2024-03-25 13:44:31 +00:00
@ elseif ( $currentState === 'explanation' )
< x - boarding - step title = " What is Coolify? " >
< x - slot : question >
Coolify is an all - in - one application to automate tasks on your servers , deploy application with
Git
integrations , deploy databases and services , monitor these resources with notifications and
alerts
without vendor lock - in
and < a href = " https://coolify.io " class = " dark:text-white hover:underline " > much much more </ a >.
< br >< br >
< span class = " text-xl " >
< x - highlighted text = " Self-hosting with superpowers! " /></ span >
</ x - slot : question >
< x - slot : explanation >
< p >< x - highlighted text = " Task automation: " /> You don ' t need to manage your servers anymore .
Coolify does
it for you .</ p >
< p >< x - highlighted text = " No vendor lock-in: " /> All configurations are stored on your servers , so
everything works without a connection to Coolify ( except integrations and automations ) .</ p >
< p >< x - highlighted text = " Monitoring: " /> You can get notified on your favourite platforms
( Discord ,
Telegram , Email , etc . ) when something goes wrong , or an action is needed from your side .</ p >
</ x - slot : explanation >
< x - slot : actions >
2024-03-26 09:24:53 +00:00
< x - forms . button class = " justify-center lg:w-64 box-boarding " wire : click = " explanation " > Next
2024-03-25 13:44:31 +00:00
</ x - forms . button >
</ x - slot : actions >
</ x - boarding - step >
@ elseif ( $currentState === 'select-server-type' )
< x - boarding - step title = " Server " >
< x - slot : question >
Do you want to deploy your resources to your < x - highlighted text = " Localhost " />
or to a < x - highlighted text = " Remote Server " /> ?
</ x - slot : question >
< x - slot : actions >
2024-03-26 09:24:53 +00:00
< x - forms . button class = " justify-center w-64 box-boarding " wire : target = " setServerType('localhost') "
2024-03-25 13:44:31 +00:00
wire : click = " setServerType('localhost') " > Localhost
</ x - forms . button >
2023-09-18 11:01:01 +00:00
2024-03-26 09:24:53 +00:00
< x - forms . button class = " justify-center w-64 box-boarding " wire : target = " setServerType('remote') "
2024-03-25 13:44:31 +00:00
wire : click = " setServerType('remote') " > Remote Server
</ x - forms . button >
@ if ( ! $serverReachable )
Localhost is not reachable with the following public key .
< br /> < br />
Please make sure you have the correct public key in your ~/. ssh / authorized_keys file for
user
'root' or skip the boarding process and add a new private key manually to Coolify and to the
server .
< br />
Check this < a target = " _blank " class = " underline "
2024-04-25 12:32:37 +00:00
href = " https://coolify.io/docs/knowledge-base/server/openssh " > documentation </ a > for further
help .
2024-03-25 13:44:31 +00:00
< x - forms . input readonly id = " serverPublicKey " ></ x - forms . input >
2024-03-26 09:24:53 +00:00
< x - forms . button class = " lg:w-64 box-boarding " wire : target = " setServerType('localhost') "
2024-03-25 13:44:31 +00:00
wire : click = " setServerType('localhost') " > Check again
2023-09-18 11:01:01 +00:00
</ x - forms . button >
2024-03-25 13:44:31 +00:00
@ endif
</ x - slot : actions >
< x - slot : explanation >
< p > Servers are the main building blocks , as they will host your applications , databases ,
services , called resources . Any CPU intensive process will use the server ' s CPU where you
are deploying your resources .</ p >
< p >< x - highlighted text = " Localhost " /> is the server where Coolify is running on . It is not
recommended to use one server
for everything .</ p >
< p >< x - highlighted text = " A remote server " /> is a server reachable through SSH . It can be hosted
at home , or from any cloud
provider .</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ elseif ( $currentState === 'private-key' )
< x - boarding - step title = " SSH Key " >
< x - slot : question >
Do you have your own SSH Private Key ?
</ x - slot : question >
< x - slot : actions >
2024-03-26 09:24:53 +00:00
< x - forms . button class = " justify-center lg:w-64 box-boarding " wire : target = " setPrivateKey('own') "
2024-03-25 13:44:31 +00:00
wire : click = " setPrivateKey('own') " > Yes
</ x - forms . button >
2024-03-26 09:24:53 +00:00
< x - forms . button class = " justify-center lg:w-64 box-boarding " wire : target = " setPrivateKey('create') "
2024-03-25 13:44:31 +00:00
wire : click = " setPrivateKey('create') " > No ( create one for me )
</ x - forms . button >
@ if ( count ( $privateKeys ) > 0 )
< form wire : submit = 'selectExistingPrivateKey' class = " flex flex-col w-full gap-4 lg:pr-10 " >
< x - forms . select label = " Existing SSH Keys " id = 'selectedExistingPrivateKey' >
@ foreach ( $privateKeys as $privateKey )
< option wire : key = " { { $loop->index }} " value = " { { $privateKey->id }} " >
{{ $privateKey -> name }} </ option >
@ endforeach
</ x - forms . select >
< x - forms . button type = " submit " > Use this SSH Key </ x - forms . button >
</ form >
@ endif
</ x - slot : actions >
< x - slot : explanation >
< p > SSH Keys are used to connect to a remote server through a secure shell , called SSH .</ p >
< p > You can use your own ssh private key , or you can let Coolify to create one for you .</ p >
< p > In both ways , you need to add the public version of your ssh private key to the remote
server ' s
< code class = " dark:text-warning " >~/. ssh / authorized_keys </ code > file .
</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ elseif ( $currentState === 'select-existing-server' )
< x - boarding - step title = " Select a server " >
< x - slot : question >
There are already servers available for your Team . Do you want to use one of them ?
</ x - slot : question >
< x - slot : actions >
< div class = " flex flex-col gap-4 " >
< div >
2024-04-25 12:32:37 +00:00
< x - forms . button class = " justify-center w-64 box-boarding " wire : click = " createNewServer " > No
( create
2024-03-25 13:44:31 +00:00
one
for
me )
2024-02-12 10:46:36 +00:00
</ x - forms . button >
2024-03-25 13:44:31 +00:00
</ div >
< div >
< form wire : submit = 'selectExistingServer' class = " flex flex-col w-full gap-4 lg:w-96 " >
< x - forms . select label = " Existing servers " class = " w-96 " id = 'selectedExistingServer' >
@ foreach ( $servers as $server )
< option wire : key = " { { $loop->index }} " value = " { { $server->id }} " >
{{ $server -> name }} </ option >
2024-02-12 10:46:36 +00:00
@ endforeach
</ x - forms . select >
2024-03-25 13:44:31 +00:00
< x - forms . button type = " submit " > Use this Server </ x - forms . button >
2024-02-12 10:46:36 +00:00
</ form >
</ div >
2024-03-25 13:44:31 +00:00
</ div >
@ if ( ! $serverReachable )
This server is not reachable with the following public key .
< br /> < br />
Please make sure you have the correct public key in your ~/. ssh / authorized_keys file for
user
'root' or skip the boarding process and add a new private key manually to Coolify and to the
server .
< x - forms . input readonly id = " serverPublicKey " ></ x - forms . input >
2024-04-25 12:32:37 +00:00
< x - forms . button class = " w-64 box-boarding " wire : target = " validateServer "
wire : click = " validateServer " > Check
2024-03-25 13:44:31 +00:00
again
</ x - forms . button >
@ endif
</ x - slot : actions >
< x - slot : explanation >
< p > Private Keys are used to connect to a remote server through a secure shell , called SSH .</ p >
< p > You can use your own private key , or you can let Coolify to create one for you .</ p >
< p > In both ways , you need to add the public version of your private key to the remote server ' s
< code >~/. ssh / authorized_keys </ code > file .
</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ elseif ( $currentState === 'create-private-key' )
< x - boarding - step title = " Create Private Key " >
< x - slot : question >
Please let me know your key details .
</ x - slot : question >
< x - slot : actions >
< form wire : submit = 'savePrivateKey' class = " flex flex-col w-full gap-4 lg:pr-10 " >
< x - forms . input required placeholder = " Choose a name for your Private Key. Could be anything. "
label = " Name " id = " privateKeyName " />
< x - forms . input placeholder = " Description, so others will know more about this. "
label = " Description " id = " privateKeyDescription " />
< x - forms . textarea required placeholder = " -----BEGIN OPENSSH PRIVATE KEY----- " label = " Private Key "
id = " privateKey " />
@ if ( $privateKeyType === 'create' )
< x - forms . textarea rows = " 7 " readonly label = " Public Key " id = " publicKey " />
< span class = " font-bold dark:text-warning " > ACTION REQUIRED : Copy the 'Public Key' to your
server ' s
~/. ssh / authorized_keys
file .</ span >
2023-08-30 09:06:44 +00:00
@ endif
2024-03-25 13:44:31 +00:00
< x - forms . button type = " submit " > Save </ x - forms . button >
</ form >
</ x - slot : actions >
< x - slot : explanation >
< p > Private Keys are used to connect to a remote server through a secure shell , called SSH .</ p >
< p > You can use your own private key , or you can let Coolify to create one for you .</ p >
< p > In both ways , you need to add the public version of your private key to the remote server ' s
< code >~/. ssh / authorized_keys </ code > file .
</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ elseif ( $currentState === 'create-server' )
< x - boarding - step title = " Create Server " >
< x - slot : question >
Please let me know your server details .
</ x - slot : question >
< x - slot : actions >
< form wire : submit = 'saveServer' class = " flex flex-col w-full gap-4 lg:pr-10 " >
< div class = " flex flex-col gap-2 lg:flex-row " >
< x - forms . input required placeholder = " Choose a name for your Server. Could be anything. "
label = " Name " id = " remoteServerName " />
2023-08-30 09:06:44 +00:00
< x - forms . input placeholder = " Description, so others will know more about this. "
2024-03-25 13:44:31 +00:00
label = " Description " id = " remoteServerDescription " />
</ div >
< div class = " flex flex-col gap-2 lg:flex-row " >
< x - forms . input required placeholder = " 127.0.0.1 " label = " IP Address " id = " remoteServerHost " />
< x - forms . input required placeholder = " Port number of your server. Default is 22. "
label = " Port " id = " remoteServerPort " />
2024-04-25 12:32:37 +00:00
< div class = " w-full " >
< x - forms . input required placeholder = " User to connect to your server. Default is root. "
label = " User " id = " remoteServerUser " />
< div class = " text-xs dark:text-warning text-coollabs " > Non - root user is experimental : < a
class = " font-bold underline " target = " _blank "
href = " https://coolify.io/docs/knowledge-base/server/non-root-user " > docs </ a >.
</ div >
</ div >
2024-03-25 13:44:31 +00:00
</ div >
< div class = " lg:w-64 " >
< x - forms . checkbox
helper = " If you are using Cloudflare Tunnels, enable this. It will proxy all ssh requests to your server through Cloudflare.<br><span class='dark:text-warning'>Coolify does not install/setup Cloudflare (cloudflared) on your server.</span> "
id = " isCloudflareTunnel " label = " Cloudflare Tunnel " />
</ div >
< x - forms . button type = " submit " > Continue </ x - forms . button >
</ form >
</ x - slot : actions >
< x - slot : explanation >
< p > Username should be < x - highlighted text = " root " /> for now . We are working on to use
non - root users .</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ elseif ( $currentState === 'validate-server' )
< x - boarding - step title = " Validate & Configure Server " >
< x - slot : question >
I need to validate your server ( connection , Docker Engine , etc ) and configure if something is
missing for me . Are you okay with this ?
</ x - slot : question >
< x - slot : actions >
< x - slide - over closeWithX fullScreen >
< x - slot : title > Validate & configure </ x - slot : title >
< x - slot : content >
< livewire : server . validate - and - install : server = " $this->createdServer " />
</ x - slot : content >
2024-03-26 09:24:53 +00:00
< x - forms . button @ click = " slideOverOpen=true " class = " w-full font-bold box-boarding lg:w-96 "
2024-03-25 13:44:31 +00:00
wire : click . prevent = 'installServer' isHighlighted >
Let ' s do it !
</ x - forms . button >
</ x - slide - over >
</ x - slot : actions >
< x - slot : explanation >
< p > This will install the latest Docker Engine on your server , configure a few things to be able
to run optimal .< br >< br > Minimum Docker Engine version is : 22 < br >< br > To manually install
Docker
Engine , check < a target = " _blank " class = " underline dark:text-warning "
href = " https://docs.docker.com/engine/install/#server " > this
documentation </ a >.</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ elseif ( $currentState === 'create-project' )
< x - boarding - step title = " Project " >
< x - slot : question >
@ if ( count ( $projects ) > 0 )
You already have some projects . Do you want to use one of them or should I create a new one
for
you ?
@ else
Let ' s create an initial project for you . You can change all the details later on .
@ endif
</ x - slot : question >
< x - slot : actions >
2024-03-26 09:24:53 +00:00
< x - forms . button class = " justify-center w-64 box-boarding " wire : click = " createNewProject " > Create new
2024-03-25 13:44:31 +00:00
project !</ x - forms . button >
< div >
2023-08-30 09:06:44 +00:00
@ if ( count ( $projects ) > 0 )
2024-03-25 13:44:31 +00:00
< form wire : submit = 'selectExistingProject' class = " flex flex-col w-full gap-4 lg:w-96 " >
< x - forms . select label = " Existing projects " class = " w-96 " id = 'selectedProject' >
@ foreach ( $projects as $project )
< option wire : key = " { { $loop->index }} " value = " { { $project->id }} " >
{{ $project -> name }} </ option >
@ endforeach
</ x - forms . select >
< x - forms . button type = " submit " > Use this Project </ x - forms . button >
</ form >
2023-08-30 09:06:44 +00:00
@ endif
2024-03-25 13:34:11 +00:00
</ div >
2024-03-25 13:44:31 +00:00
</ x - slot : actions >
< x - slot : explanation >
< p > Projects contain several resources combined into one virtual group . There are no
limitations on the number of projects you can add .</ p >
< p > Each project should have at least one environment , this allows you to create a production &
staging version of the same application , but grouped separately .</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ elseif ( $currentState === 'create-resource' )
< x - boarding - step title = " Resources " >
< x - slot : question >
Let ' s go to the new resource page , where you can create your first resource .
</ x - slot : question >
< x - slot : actions >
2024-03-26 09:24:53 +00:00
< div class = " items-center justify-center w-64 box-boarding " wire : click = " showNewResource " > Let ' s do
2024-03-25 13:44:31 +00:00
it !</ div >
</ x - slot : actions >
< x - slot : explanation >
< p > A resource could be an application , a database or a service ( like WordPress ) .</ p >
</ x - slot : explanation >
</ x - boarding - step >
@ endif
</ div >
< div class = " flex flex-col justify-center gap-4 pt-4 lg:gap-2 lg:flex " >
< div class = " flex justify-center w-full gap-2 " >
< div class = " cursor-pointer hover:underline dark:hover:text-white " wire : click = 'skipBoarding' > Skip
onboarding </ div >
< div class = " cursor-pointer hover:underline dark:hover:text-white " wire : click = 'restartBoarding' > Restart
onboarding </ div >
2024-03-20 14:46:59 +00:00
</ div >
2024-03-25 13:44:31 +00:00
< x - modal - input title = " How can we help? " >
< x - slot : content >
< div class = " w-full text-center cursor-pointer hover:underline dark:hover:text-white "
title = " Send us feedback or get help! " >
Feedback
</ div >
</ x - slot : content >
< livewire : help />
</ x - modal - input >
</ div >
2023-08-29 14:31:46 +00:00
</ div >
2024-03-20 14:46:59 +00:00
</ section >