2023-11-20 09:32:06 +00:00
< div >
2024-02-05 13:40:54 +00:00
< form wire : submit . prevent = 'submit' class = " flex flex-col " >
2023-08-16 15:18:50 +00:00
< div class = " flex gap-2 " >
< h2 > General </ h2 >
2024-02-17 15:43:49 +00:00
@ if ( $server -> id === 0 )
2024-09-20 16:14:52 +00:00
< x - modal - confirmation title = " Confirm Server Settings Change? " buttonTitle = " Save " submitAction = " submit "
: actions = " [
'You could lose a lot of functionalities if you change the server details of the server where Coolify is running on.' ,
] " :confirmWithText= " false " :confirmWithPassword= " false " step2ButtonText= " Save " />
2023-08-16 15:18:50 +00:00
@ else
2024-08-26 13:26:08 +00:00
< x - forms . button type = " submit " > Save </ x - forms . button >
@ if ( $server -> isFunctional ())
< x - slide - over closeWithX fullScreen >
< x - slot : title > Validate & configure </ x - slot : title >
< x - slot : content >
< livewire : server . validate - and - install : server = " $server " ask />
</ x - slot : content >
< x - forms . button @ click = " slideOverOpen=true " wire : click . prevent = 'validateServer' isHighlighted >
Revalidate server
</ x - forms . button >
</ x - slide - over >
@ endif
@ endif
</ div >
@ if ( $server -> isFunctional ())
Server is reachable and validated .
@ else
You can ' t use this server until it is validated .
@ endif
@ if (( ! $server -> settings -> is_reachable || ! $server -> settings -> is_usable ) && $server -> id !== 0 )
2024-02-05 13:40:54 +00:00
< x - slide - over closeWithX fullScreen >
2024-02-15 13:14:11 +00:00
< x - slot : title > Validate & configure </ x - slot : title >
2024-02-05 13:40:54 +00:00
< x - slot : content >
2024-08-26 13:26:08 +00:00
< livewire : server . validate - and - install : server = " $server " />
2024-02-05 13:40:54 +00:00
</ x - slot : content >
2024-08-26 13:26:08 +00:00
< x - forms . button @ click = " slideOverOpen=true "
2024-09-20 16:14:52 +00:00
class = " mt-8 mb-4 w-full font-bold box-without-bg bg-coollabs hover:bg-coollabs-100 "
2024-08-26 13:26:08 +00:00
wire : click . prevent = 'validateServer' isHighlighted >
Validate Server & Install Docker Engine
2024-02-05 13:40:54 +00:00
</ x - forms . button >
</ x - slide - over >
2024-08-26 13:26:08 +00:00
@ if ( $server -> validation_logs )
< h4 > Previous Validation Logs </ h4 >
< div class = " pb-8 " >
{ !! $server -> validation_logs !! }
</ div >
2024-07-23 12:20:53 +00:00
@ endif
2024-08-16 15:53:45 +00:00
@ endif
@ if (( ! $server -> settings -> is_reachable || ! $server -> settings -> is_usable ) && $server -> id === 0 )
2024-08-26 13:26:08 +00:00
< x - forms . button class = " mt-8 mb-4 font-bold box-without-bg bg-coollabs hover:bg-coollabs-100 "
wire : click . prevent = 'checkLocalhostConnection' isHighlighted >
Validate Server
</ x - forms . button >
2023-10-11 11:30:36 +00:00
@ endif
2024-02-26 09:25:21 +00:00
@ if ( $server -> isForceDisabled () && isCloud ())
2024-08-26 13:26:08 +00:00
< div class = " pt-4 font-bold text-red-500 " > The system has disabled the server because you have exceeded the
number of servers for which you have paid .</ div >
2024-02-26 09:25:21 +00:00
@ endif
2023-08-16 15:18:50 +00:00
< div class = " flex flex-col gap-2 pt-4 " >
2024-09-20 16:14:52 +00:00
< div class = " flex flex-col gap-2 w-full lg:flex-row " >
2023-08-16 15:18:50 +00:00
< x - forms . input id = " server.name " label = " Name " required />
< x - forms . input id = " server.description " label = " Description " />
2024-01-16 14:19:14 +00:00
@ if ( ! $server -> settings -> is_swarm_worker && ! $server -> settings -> is_build_server )
2024-08-26 13:26:08 +00:00
< x - forms . input placeholder = " https://example.com " id = " wildcard_domain " label = " Wildcard Domain "
helper = 'A wildcard domain allows you to receive a randomly generated domain for your new applications. <br><br>For instance, if you set "https://example.com" as your wildcard domain, your applications will receive domains like "https://randomId.example.com".' />
2023-12-18 13:01:25 +00:00
@ endif
2024-08-26 13:26:08 +00:00
2023-08-16 15:18:50 +00:00
</ div >
2024-09-20 16:14:52 +00:00
< div class = " flex flex-col gap-2 w-full lg:flex-row " >
2024-08-06 11:18:57 +00:00
< x - forms . input type = " password " id = " server.ip " label = " IP Address/Domain "
2024-09-23 17:57:42 +00:00
helper = " An IP Address (127.0.0.1) or domain (example.com). Make sure there is no protocol like http(s):// so you provide a FQDN not a URL. " required />
2023-08-16 15:18:50 +00:00
< div class = " flex gap-2 " >
< x - forms . input id = " server.user " label = " User " required />
< x - forms . input type = " number " id = " server.port " label = " Port " required />
2023-06-23 06:58:32 +00:00
</ div >
2023-04-25 08:47:13 +00:00
</ div >
2024-08-26 13:26:08 +00:00
< div class = " w-full " x - data = " {
open : false ,
search : '{{ $server->settings->server_timezone ?: ' ' }}' ,
timezones : @ js ( $timezones ),
placeholder : '{{ $server->settings->server_timezone ? ' Search timezone ... ' : ' Select Server Timezone ' }}' ,
init () {
this . $watch ( 'search' , value => {
if ( value === '' ) {
this . open = true ;
}
})
}
} " >
< div class = " flex items-center mb-1 " >
< label for = " server.settings.server_timezone " > Server
Timezone </ label >
< x - helper class = " ml-2 " helper = " Server's timezone. This is used for backups, cron jobs, etc. " />
2024-08-16 15:53:45 +00:00
</ div >
2024-08-26 13:26:08 +00:00
< div class = " relative " >
2024-09-20 16:14:52 +00:00
< div class = " inline-flex relative items-center w-64 " >
2024-10-01 09:55:01 +00:00
< input autocomplete = " off " wire : dirty . class . remove = 'dark:focus:ring-coolgray-300 dark:ring-coolgray-300'
2024-08-26 13:26:08 +00:00
wire : dirty . class = " dark:focus:ring-warning dark:ring-warning " x - model = " search "
2024-09-20 16:14:52 +00:00
@ focus = " open = true " @ click . away = " open = false " @ input = " open = true " class = " w-full input "
2024-08-26 13:26:08 +00:00
: placeholder = " placeholder " wire : model . debounce . 300 ms = " server.settings.server_timezone " >
2024-09-20 16:14:52 +00:00
< svg class = " absolute right-0 mr-2 w-4 h-4 " xmlns = " http://www.w3.org/2000/svg " fill = " none "
2024-08-26 13:26:08 +00:00
viewBox = " 0 0 24 24 " stroke - width = " 1.5 " stroke = " currentColor " @ click = " open = true " >
< path stroke - linecap = " round " stroke - linejoin = " round "
d = " M8.25 15L12 18.75 15.75 15m-7.5-6L12 5.25 15.75 9 " />
</ svg >
</ div >
< div x - show = " open "
2024-09-20 16:14:52 +00:00
class = " overflow-auto overflow-x-hidden absolute z-50 mt-1 w-64 max-h-60 bg-white rounded-md border shadow-lg dark:bg-coolgray-100 dark:border-coolgray-200 scrollbar " >
2024-08-26 13:26:08 +00:00
< template
x - for = " timezone in timezones.filter(tz => tz.toLowerCase().includes(search.toLowerCase())) "
: key = " timezone " >
< div @ click = " search = timezone; open = false; $wire .set('server.settings.server_timezone', timezone) "
2024-09-20 16:14:52 +00:00
class = " px-4 py-2 text-gray-800 cursor-pointer hover:bg-gray-100 dark:hover:bg-coolgray-300 dark:text-gray-200 "
2024-08-26 13:26:08 +00:00
x - text = " timezone " ></ div >
</ template >
</ div >
2024-08-16 15:53:45 +00:00
</ div >
2024-08-26 13:26:08 +00:00
</ div >
2024-09-23 16:50:08 +00:00
2024-09-23 21:18:23 +00:00
< div class = " { { $server->isFunctional () ? 'w-96' : 'w-full' }} " >
2024-09-12 13:50:22 +00:00
@ if ( ! $server -> isLocalhost ())
< x - forms . checkbox instantSave id = " server.settings.is_build_server "
label = " Use it as a build server? " />
< div class = " flex flex-col gap-2 pt-6 " >
2024-09-23 21:18:23 +00:00
< div class = " flex gap-1 items-center " >
2024-09-12 13:50:22 +00:00
< h3 class = " text-lg font-semibold " > Cloudflare Tunnels </ h3 >
2024-08-26 13:26:08 +00:00
< x - helper class = " inline-flex "
2024-09-12 13:50:22 +00:00
helper = " If you are using Cloudflare Tunnels, enable this. It will proxy all SSH requests to your server through Cloudflare.<br> You then can close your server's SSH port in the firewall of your hosting provider.<br><span class='dark:text-warning'>If you choose manual configuration, Coolify does not install or set up Cloudflare (cloudflared) on your server.</span> " />
2024-08-26 13:26:08 +00:00
</ div >
@ if ( $server -> settings -> is_cloudflare_tunnel )
2024-09-23 21:18:23 +00:00
< div class = " w-64 " >
< x - forms . checkbox instantSave id = " server.settings.is_cloudflare_tunnel " label = " Enabled " />
</ div >
2024-09-12 13:50:22 +00:00
@ elseif ( ! $server -> isFunctional ())
2024-09-23 21:18:23 +00:00
< div class = " p-4 mb-4 w-full text-sm text-yellow-800 bg-yellow-100 rounded dark:bg-yellow-900 dark:text-yellow-300 " >
2024-09-28 09:12:03 +00:00
To < span class = " font-semibold " > automatically </ span > configure Cloudflare Tunnels , please validate your server first .</ span > Then you will need a Cloudflare token and an SSH domain configured .
2024-09-23 21:18:23 +00:00
< br />
To < span class = " font-semibold " > manually </ span > configure Cloudflare Tunnels , please click < span wire : click = " manualCloudflareConfig " class = " underline cursor-pointer " > here </ span > , then you should validate the server .
< br />< br />
For more information , please read our < a href = " https://coolify.io/docs/knowledge-base/cloudflare/tunnels/ " target = " _blank " class = " font-medium underline hover:text-yellow-600 dark:hover:text-yellow-200 " > documentation </ a >.
2024-09-12 13:50:22 +00:00
</ div >
@ endif
@ if ( ! $server -> settings -> is_cloudflare_tunnel && $server -> isFunctional ())
2024-10-02 11:36:09 +00:00
< x - modal - input buttonTitle = " Automated Configuration " title = " Cloudflare Tunnels " class = " w-full " : closeOutside = " false " >
2024-08-26 13:26:08 +00:00
< livewire : server . configure - cloudflare - tunnels : server_id = " $server->id " />
</ x - modal - input >
@ endif
2024-09-23 21:18:23 +00:00
@ if ( $server -> isFunctional () &&! $server -> settings -> is_cloudflare_tunnel )
< div wire : click = " manualCloudflareConfig " class = " w-full underline cursor-pointer " >
2024-09-12 13:50:22 +00:00
I have configured Cloudflare Tunnels manually
2024-08-26 13:26:08 +00:00
</ div >
@ endif
2024-09-23 16:50:08 +00:00
2024-08-26 13:26:08 +00:00
</ div >
2024-09-23 21:18:23 +00:00
@ if ( ! $server -> isBuildServer () && ! $server -> settings -> is_cloudflare_tunnel )
2024-09-12 13:50:22 +00:00
< h3 class = " pt-6 " > Swarm < span class = " text-xs text-neutral-500 " > ( experimental ) </ span ></ h3 >
< div class = " pb-4 " > Read the docs < a class = 'underline dark:text-white'
href = 'https://coolify.io/docs/knowledge-base/docker/swarm' target = '_blank' > here </ a >.
</ div >
@ if ( $server -> settings -> is_swarm_worker )
< x - forms . checkbox disabled instantSave type = " checkbox "
id = " server.settings.is_swarm_manager "
helper = " For more information, please read the documentation <a class='dark:text-white' href='https://coolify.io/docs/knowledge-base/docker/swarm' target='_blank'>here</a>. "
label = " Is it a Swarm Manager? " />
@ else
< x - forms . checkbox instantSave type = " checkbox " id = " server.settings.is_swarm_manager "
helper = " For more information, please read the documentation <a class='dark:text-white' href='https://coolify.io/docs/knowledge-base/docker/swarm' target='_blank'>here</a>. "
label = " Is it a Swarm Manager? " />
@ endif
@ if ( $server -> settings -> is_swarm_manager )
< x - forms . checkbox disabled instantSave type = " checkbox "
id = " server.settings.is_swarm_worker "
helper = " For more information, please read the documentation <a class='dark:text-white' href='https://coolify.io/docs/knowledge-base/docker/swarm' target='_blank'>here</a>. "
label = " Is it a Swarm Worker? " />
@ else
< x - forms . checkbox instantSave type = " checkbox " id = " server.settings.is_swarm_worker "
helper = " For more information, please read the documentation <a class='dark:text-white' href='https://coolify.io/docs/knowledge-base/docker/swarm' target='_blank'>here</a>. "
label = " Is it a Swarm Worker? " />
@ endif
2024-08-26 13:26:08 +00:00
@ endif
2023-11-28 14:49:24 +00:00
@ endif
</ div >
2023-08-16 15:18:50 +00:00
</ div >
2023-10-09 09:00:18 +00:00
2023-09-12 11:14:01 +00:00
@ if ( $server -> isFunctional ())
2024-08-26 10:23:03 +00:00
< h3 class = " pt-4 " > Settings </ h3 >
2024-09-22 18:02:51 +00:00
< div class = " flex flex-col gap-4 " >
2024-09-06 06:46:27 +00:00
< div class = " flex flex-col gap-2 " >
2024-09-22 18:02:51 +00:00
< div class = " flex flex-wrap items-center gap-4 " >
2024-09-06 06:46:27 +00:00
< div class = " w-64 " >
< x - forms . checkbox
2024-09-24 11:06:03 +00:00
helper = " Enabling Force Docker Cleanup or manually triggering a cleanup will perform the following actions:
2024-09-22 18:26:45 +00:00
< ul class = 'list-disc pl-4 mt-2' >
< li > Removes stopped containers manged by Coolify ( as containers are none persistent , no data will be lost ) .</ li >
< li > Deletes unused images .</ li >
< li > Clears build cache .</ li >
< li > Removes old versions of the Coolify helper image .</ li >
< li > Optionally delete unused volumes ( if enabled in advanced options ) .</ li >
< li > Optionally remove unused networks ( if enabled in advanced options ) .</ li >
</ ul > "
2024-09-06 06:46:27 +00:00
instantSave id = " server.settings.force_docker_cleanup " label = " Force Docker Cleanup " />
</ div >
2024-09-24 11:06:03 +00:00
< x - modal - confirmation
title = " Confirm Docker Cleanup? "
buttonTitle = " Trigger Docker Cleanup "
submitAction = " manualCleanup "
: actions = " [
'Permanently deletes all stopped containers managed by Coolify (as containers are non-persistent, no data will be lost)' ,
'Permanently deletes all unused images' ,
'Clears build cache' ,
'Removes old versions of the Coolify helper image' ,
'Optionally permanently deletes all unused volumes (if enabled in advanced options).' ,
'Optionally permanently deletes all unused networks (if enabled in advanced options).'
] "
: confirmWithText = " false "
: confirmWithPassword = " false "
step2ButtonText = " Trigger Docker Cleanup "
/>
2024-09-22 18:02:51 +00:00
</ div >
@ if ( $server -> settings -> force_docker_cleanup )
< x - forms . input placeholder = " */10 * * * * " id = " server.settings.docker_cleanup_frequency "
label = " Docker cleanup frequency " required
helper = " Cron expression for Docker Cleanup.<br>You can use every_minute, hourly, daily, weekly, monthly, yearly.<br><br>Default is every night at midnight. " />
@ else
2024-09-06 06:46:27 +00:00
< x - forms . input id = " server.settings.docker_cleanup_threshold "
label = " Docker cleanup threshold (%) " required
helper = " The Docker cleanup tasks will run when the disk usage exceeds this threshold. " />
2024-09-22 18:02:51 +00:00
@ endif
< div x - data = " { open: false } " class = " mt-4 max-w-md " >
< button @ click = " open = !open " type = " button " class = " flex items-center justify-between w-full text-left text-sm font-medium text-gray-700 dark:text-gray-300 hover:text-gray-900 dark:hover:text-gray-100 " >
< span > Advanced Options </ span >
< svg : class = " { 'rotate-180': open} " class = " w-5 h-5 transition-transform duration-200 " xmlns = " http://www.w3.org/2000/svg " viewBox = " 0 0 20 20 " fill = " currentColor " >
< path fill - rule = " evenodd " d = " M5.293 7.293a1 1 0 011.414 0L10 10.586l3.293-3.293a1 1 0 111.414 1.414l-4 4a1 1 0 01-1.414 0l-4-4a1 1 0 010-1.414z " clip - rule = " evenodd " />
</ svg >
</ button >
< div x - show = " open " class = " mt-2 space-y-2 " >
2024-09-22 18:26:45 +00:00
< p class = " text-sm text-gray-600 dark:text-gray-400 mb-2 " >< strong > Warning : Enable these options only if you fully understand their implications and consequences !</ strong >< br > Improper use will result in data loss and could cause functional issues .</ p >
2024-09-22 18:02:51 +00:00
< x - forms . checkbox instantSave id = " server.settings.delete_unused_volumes " label = " Delete Unused Volumes "
2024-09-22 18:26:45 +00:00
helper = " This option will remove all unused Docker volumes during cleanup.<br><br><strong>Warning: Data form stopped containers will be lost!</strong><br><br>Consequences include:<br>
< ul class = 'list-disc pl-4 mt-2' >
< li > Volumes not attached to running containers will be deleted and data will be permanently lost ( stopped containers are affected ) .</ li >
< li > Data from stopped containers volumes will be permanently lost .</ li >
< li > No way to recover deleted volume data .</ li >
</ ul > "
/>
2024-09-22 18:02:51 +00:00
< x - forms . checkbox instantSave id = " server.settings.delete_unused_networks " label = " Delete Unused Networks "
2024-09-22 18:26:45 +00:00
helper = " This option will remove all unused Docker networks during cleanup.<br><br><strong>Warning: Functionality may be lost and containers may not be able to communicate with each other!</strong><br><br>Consequences include:<br>
< ul class = 'list-disc pl-4 mt-2' >
< li > Networks not attached to running containers will be permanently deleted ( stopped containers are affected ) .</ li >
< li > Custom networks for stopped containers will be permanently deleted .</ li >
< li > Functionality may be lost and containers may not be able to communicate with each other .</ li >
2024-09-28 09:12:03 +00:00
</ ul > "
2024-09-22 18:26:45 +00:00
/>
2024-09-22 18:02:51 +00:00
</ div >
2024-08-26 10:23:03 +00:00
</ div >
2024-07-18 12:38:56 +00:00
</ div >
2024-09-28 09:12:03 +00:00
2024-09-22 18:02:51 +00:00
< div class = " flex flex-wrap gap-4 sm:flex-nowrap " >
2024-09-06 06:46:27 +00:00
< x - forms . input id = " server.settings.concurrent_builds " label = " Number of concurrent builds " required
helper = " You can specify the number of simultaneous build processes/deployments that should run concurrently. " />
< x - forms . input id = " server.settings.dynamic_timeout " label = " Deployment timeout (seconds) " required
helper = " You can define the maximum duration for a deployment to run before timing it out. " />
2024-07-18 12:38:56 +00:00
</ div >
2024-09-06 06:46:27 +00:00
</ div >
2024-09-20 16:14:52 +00:00
< div class = " flex gap-2 items-center pt-4 pb-2 " >
2024-09-06 06:46:27 +00:00
< h3 > Sentinel </ h3 >
{{ -- @ if ( $server -> isSentinelEnabled ()) -- }}
{{ -- < x - forms . button wire : click = 'restartSentinel' > Restart </ x - forms . button > -- }}
{{ -- @ endif -- }}
</ div >
< div > Metrics are disabled until a few bugs are fixed .</ div >
{{ -- < div class = " w-64 " >
2024-06-20 11:17:06 +00:00
< x - forms . checkbox instantSave id = " server.settings.is_metrics_enabled " label = " Enable Metrics " />
2024-06-18 14:42:42 +00:00
</ div >
< div class = " pt-4 " >
< div class = " flex flex-wrap gap-2 sm:flex-nowrap " >
< x - forms . input type = " password " id = " server.settings.metrics_token " label = " Metrics token " required
2024-09-06 06:46:27 +00:00
helper = " Token for collector (Sentinel). " />
2024-06-18 14:42:42 +00:00
< x - forms . input id = " server.settings.metrics_refresh_rate_seconds " label = " Metrics rate (seconds) "
2024-09-06 06:46:27 +00:00
required
helper = " The interval for gathering metrics. Lower means more disk space will be used. " />
2024-06-18 14:42:42 +00:00
< x - forms . input id = " server.settings.metrics_history_days " label = " Metrics history (days) " required
2024-09-06 06:46:27 +00:00
helper = " How many days should the metrics data should be reserved. " />
2024-06-18 14:42:42 +00:00
</ div >
2024-07-12 13:05:12 +00:00
</ div > -- }}
2024-09-06 06:46:27 +00:00
@ endif
2023-08-16 15:18:50 +00:00
</ form >
2024-08-16 15:53:45 +00:00
</ div >