@@ -67,7 +67,7 @@ Special thanks to our biggest sponsors!
|
|||||||
* [Juxtdigital](https://juxtdigital.dev/?ref=coolify.io) - A digital agency offering web development, design, and digital marketing services for businesses.
|
* [Juxtdigital](https://juxtdigital.dev/?ref=coolify.io) - A digital agency offering web development, design, and digital marketing services for businesses.
|
||||||
* [Saasykit](https://saasykit.com/?ref=coolify.io) - A Laravel-based boilerplate providing essential components and features for building SaaS applications quickly.
|
* [Saasykit](https://saasykit.com/?ref=coolify.io) - A Laravel-based boilerplate providing essential components and features for building SaaS applications quickly.
|
||||||
* [Massivegrid](https://massivegrid.com/?ref=coolify.io) - A cloud hosting provider offering scalable infrastructure solutions for businesses of all sizes.
|
* [Massivegrid](https://massivegrid.com/?ref=coolify.io) - A cloud hosting provider offering scalable infrastructure solutions for businesses of all sizes.
|
||||||
* [LiquidWeb](https://liquidweb.com/?utm_source=coolify.io) - Fast web hosting provider.
|
* [LiquidWeb](https://liquidweb.com/?utm_source=coolify.io) - A Fast web hosting provider.
|
||||||
|
|
||||||
|
|
||||||
## Github Sponsors ($40+)
|
## Github Sponsors ($40+)
|
||||||
|
@@ -253,6 +253,9 @@ class ApplicationDeploymentJob implements ShouldBeEncrypted, ShouldQueue
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
|
// Make sure the private key is stored in the filesystem
|
||||||
|
$this->server->privateKey->storeInFileSystem();
|
||||||
|
|
||||||
// Generate custom host<->ip mapping
|
// Generate custom host<->ip mapping
|
||||||
$allContainers = instant_remote_process(["docker network inspect {$this->destination->network} -f '{{json .Containers}}' "], $this->server);
|
$allContainers = instant_remote_process(["docker network inspect {$this->destination->network} -f '{{json .Containers}}' "], $this->server);
|
||||||
|
|
||||||
@@ -2281,7 +2284,7 @@ COPY ./nginx.conf /etc/nginx/conf.d/default.conf");
|
|||||||
} else {
|
} else {
|
||||||
if ($this->use_build_server) {
|
if ($this->use_build_server) {
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
["{$this->coolify_variables} docker compose --project-name {$this->application->uuid} --project-directory {$this->configuration_dir} -f {$this->configuration_dir}{$this->docker_compose_location} up --build -d", 'hidden' => true],
|
["{$this->coolify_variables} docker compose --project-name {$this->application->uuid} --project-directory {$this->configuration_dir} -f {$this->configuration_dir}{$this->docker_compose_location} up --pull always --build -d", 'hidden' => true],
|
||||||
);
|
);
|
||||||
} else {
|
} else {
|
||||||
$this->execute_remote_command(
|
$this->execute_remote_command(
|
||||||
|
@@ -24,6 +24,7 @@ class SendMessageToSlackJob implements ShouldQueue
|
|||||||
public function handle(): void
|
public function handle(): void
|
||||||
{
|
{
|
||||||
Http::post($this->webhookUrl, [
|
Http::post($this->webhookUrl, [
|
||||||
|
'text' => $this->message->title,
|
||||||
'blocks' => [
|
'blocks' => [
|
||||||
[
|
[
|
||||||
'type' => 'section',
|
'type' => 'section',
|
||||||
|
@@ -53,13 +53,13 @@ class DeploymentNavbar extends Component
|
|||||||
public function cancel()
|
public function cancel()
|
||||||
{
|
{
|
||||||
$kill_command = "docker rm -f {$this->application_deployment_queue->deployment_uuid}";
|
$kill_command = "docker rm -f {$this->application_deployment_queue->deployment_uuid}";
|
||||||
$build_server_id = $this->application_deployment_queue->build_server_id;
|
$build_server_id = $this->application_deployment_queue->build_server_id ?? $this->application->destination->server_id;
|
||||||
$server_id = $this->application_deployment_queue->server_id ?? $this->application->destination->server_id;
|
$server_id = $this->application_deployment_queue->server_id ?? $this->application->destination->server_id;
|
||||||
try {
|
try {
|
||||||
if ($this->application->settings->is_build_server_enabled) {
|
if ($this->application->settings->is_build_server_enabled) {
|
||||||
$server = Server::find($build_server_id);
|
$server = Server::ownedByCurrentTeam()->find($build_server_id);
|
||||||
} else {
|
} else {
|
||||||
$server = Server::find($server_id);
|
$server = Server::ownedByCurrentTeam()->find($server_id);
|
||||||
}
|
}
|
||||||
if ($this->application_deployment_queue->logs) {
|
if ($this->application_deployment_queue->logs) {
|
||||||
$previous_logs = json_decode($this->application_deployment_queue->logs, associative: true, flags: JSON_THROW_ON_ERROR);
|
$previous_logs = json_decode($this->application_deployment_queue->logs, associative: true, flags: JSON_THROW_ON_ERROR);
|
||||||
|
@@ -33,17 +33,30 @@ class GithubApp extends BaseModel
|
|||||||
|
|
||||||
public static function ownedByCurrentTeam()
|
public static function ownedByCurrentTeam()
|
||||||
{
|
{
|
||||||
return GithubApp::whereTeamId(currentTeam()->id);
|
return GithubApp::where(function ($query) {
|
||||||
|
$query->where('team_id', currentTeam()->id)
|
||||||
|
->orWhere('is_system_wide', true);
|
||||||
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function public()
|
public static function public()
|
||||||
{
|
{
|
||||||
return GithubApp::whereTeamId(currentTeam()->id)->whereisPublic(true)->whereNotNull('app_id')->get();
|
return GithubApp::where(function ($query) {
|
||||||
|
$query->where(function ($q) {
|
||||||
|
$q->where('team_id', currentTeam()->id)
|
||||||
|
->orWhere('is_system_wide', true);
|
||||||
|
})->where('is_public', true);
|
||||||
|
})->whereNotNull('app_id')->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public static function private()
|
public static function private()
|
||||||
{
|
{
|
||||||
return GithubApp::whereTeamId(currentTeam()->id)->whereisPublic(false)->whereNotNull('app_id')->get();
|
return GithubApp::where(function ($query) {
|
||||||
|
$query->where(function ($q) {
|
||||||
|
$q->where('team_id', currentTeam()->id)
|
||||||
|
->orWhere('is_system_wide', true);
|
||||||
|
})->where('is_public', false);
|
||||||
|
})->whereNotNull('app_id')->get();
|
||||||
}
|
}
|
||||||
|
|
||||||
public function team()
|
public function team()
|
||||||
|
@@ -43,8 +43,18 @@ class S3Storage extends BaseModel
|
|||||||
public function testConnection(bool $shouldSave = false)
|
public function testConnection(bool $shouldSave = false)
|
||||||
{
|
{
|
||||||
try {
|
try {
|
||||||
set_s3_target($this);
|
$disk = Storage::build([
|
||||||
Storage::disk('custom-s3')->files();
|
'driver' => 's3',
|
||||||
|
'region' => $this['region'],
|
||||||
|
'key' => $this['key'],
|
||||||
|
'secret' => $this['secret'],
|
||||||
|
'bucket' => $this['bucket'],
|
||||||
|
'endpoint' => $this['endpoint'],
|
||||||
|
'use_path_style_endpoint' => true,
|
||||||
|
]);
|
||||||
|
// Test the connection by listing files with ListObjectsV2 (S3)
|
||||||
|
$disk->files();
|
||||||
|
|
||||||
$this->unusable_email_sent = false;
|
$this->unusable_email_sent = false;
|
||||||
$this->is_usable = true;
|
$this->is_usable = true;
|
||||||
} catch (\Throwable $e) {
|
} catch (\Throwable $e) {
|
||||||
@@ -53,13 +63,14 @@ class S3Storage extends BaseModel
|
|||||||
$mail = new MailMessage;
|
$mail = new MailMessage;
|
||||||
$mail->subject('Coolify: S3 Storage Connection Error');
|
$mail->subject('Coolify: S3 Storage Connection Error');
|
||||||
$mail->view('emails.s3-connection-error', ['name' => $this->name, 'reason' => $e->getMessage(), 'url' => route('storage.show', ['storage_uuid' => $this->uuid])]);
|
$mail->view('emails.s3-connection-error', ['name' => $this->name, 'reason' => $e->getMessage(), 'url' => route('storage.show', ['storage_uuid' => $this->uuid])]);
|
||||||
$users = collect([]);
|
|
||||||
$members = $this->team->members()->get();
|
// Load the team with its members and their roles explicitly
|
||||||
foreach ($members as $user) {
|
$team = $this->team()->with(['members' => function ($query) {
|
||||||
if ($user->isAdmin()) {
|
$query->withPivot('role');
|
||||||
$users->push($user);
|
}])->first();
|
||||||
}
|
|
||||||
}
|
// Get admins directly from the pivot relationship for this specific team
|
||||||
|
$users = $team->members()->wherePivotIn('role', ['admin', 'owner'])->get(['users.id', 'users.email']);
|
||||||
foreach ($users as $user) {
|
foreach ($users as $user) {
|
||||||
send_user_an_email($mail, $user->email);
|
send_user_an_email($mail, $user->email);
|
||||||
}
|
}
|
||||||
|
@@ -248,15 +248,17 @@ class Team extends Model implements SendsDiscord, SendsEmail, SendsPushover, Sen
|
|||||||
{
|
{
|
||||||
$sources = collect([]);
|
$sources = collect([]);
|
||||||
$github_apps = GithubApp::where(function ($query) {
|
$github_apps = GithubApp::where(function ($query) {
|
||||||
$query->where('team_id', $this->id)
|
$query->where(function ($q) {
|
||||||
->Where('is_public', false)
|
$q->where('team_id', $this->id)
|
||||||
->orWhere('is_system_wide', true);
|
->orWhere('is_system_wide', true);
|
||||||
|
})->where('is_public', false);
|
||||||
})->get();
|
})->get();
|
||||||
|
|
||||||
$gitlab_apps = GitlabApp::where(function ($query) {
|
$gitlab_apps = GitlabApp::where(function ($query) {
|
||||||
$query->where('team_id', $this->id)
|
$query->where(function ($q) {
|
||||||
->Where('is_public', false)
|
$q->where('team_id', $this->id)
|
||||||
->orWhere('is_system_wide', true);
|
->orWhere('is_system_wide', true);
|
||||||
|
})->where('is_public', false);
|
||||||
})->get();
|
})->get();
|
||||||
|
|
||||||
return $sources->merge($github_apps)->merge($gitlab_apps);
|
return $sources->merge($github_apps)->merge($gitlab_apps);
|
||||||
|
@@ -80,7 +80,7 @@ class HighDiskUsage extends CustomEmailNotification
|
|||||||
$description .= "Tips for cleanup: https://coolify.io/docs/knowledge-base/server/automated-cleanup\n";
|
$description .= "Tips for cleanup: https://coolify.io/docs/knowledge-base/server/automated-cleanup\n";
|
||||||
$description .= "Change settings:\n";
|
$description .= "Change settings:\n";
|
||||||
$description .= '- Threshold: '.base_url().'/server/'.$this->server->uuid."#advanced\n";
|
$description .= '- Threshold: '.base_url().'/server/'.$this->server->uuid."#advanced\n";
|
||||||
$description .= '- Notifications: '.base_url().'/notifications/discord';
|
$description .= '- Notifications: '.base_url().'/notifications/slack';
|
||||||
|
|
||||||
return new SlackMessage(
|
return new SlackMessage(
|
||||||
title: 'High disk usage detected',
|
title: 'High disk usage detected',
|
||||||
|
@@ -1,17 +0,0 @@
|
|||||||
<?php
|
|
||||||
|
|
||||||
use App\Models\S3Storage;
|
|
||||||
|
|
||||||
function set_s3_target(S3Storage $s3)
|
|
||||||
{
|
|
||||||
config()->set('filesystems.disks.custom-s3', [
|
|
||||||
'driver' => 's3',
|
|
||||||
'region' => $s3['region'],
|
|
||||||
'key' => $s3['key'],
|
|
||||||
'secret' => $s3['secret'],
|
|
||||||
'bucket' => $s3['bucket'],
|
|
||||||
'endpoint' => $s3['endpoint'],
|
|
||||||
'use_path_style_endpoint' => true,
|
|
||||||
'aws_url' => $s3->awsUrl(),
|
|
||||||
]);
|
|
||||||
}
|
|
@@ -2,7 +2,7 @@
|
|||||||
|
|
||||||
return [
|
return [
|
||||||
'coolify' => [
|
'coolify' => [
|
||||||
'version' => '4.0.0-beta.391',
|
'version' => '4.0.0-beta.392',
|
||||||
'helper_version' => '1.0.6',
|
'helper_version' => '1.0.6',
|
||||||
'realtime_version' => '1.0.5',
|
'realtime_version' => '1.0.5',
|
||||||
'self_hosted' => env('SELF_HOSTED', true),
|
'self_hosted' => env('SELF_HOSTED', true),
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"auth.login": "تسجيل الدخول",
|
"auth.login": "تسجيل الدخول",
|
||||||
|
"auth.login.authentik": "تسجيل الدخول باستخدام Authentik",
|
||||||
"auth.login.azure": "تسجيل الدخول باستخدام Microsoft",
|
"auth.login.azure": "تسجيل الدخول باستخدام Microsoft",
|
||||||
"auth.login.bitbucket": "تسجيل الدخول باستخدام Bitbucket",
|
"auth.login.bitbucket": "تسجيل الدخول باستخدام Bitbucket",
|
||||||
"auth.login.github": "تسجيل الدخول باستخدام GitHub",
|
"auth.login.github": "تسجيل الدخول باستخدام GitHub",
|
||||||
@@ -34,5 +35,6 @@
|
|||||||
"resource.delete_volumes": "حذف جميع المجلدات والملفات المرتبطة بهذا المورد بشكل دائم.",
|
"resource.delete_volumes": "حذف جميع المجلدات والملفات المرتبطة بهذا المورد بشكل دائم.",
|
||||||
"resource.delete_connected_networks": "حذف جميع الشبكات غير المحددة مسبقًا والمرتبطة بهذا المورد بشكل دائم.",
|
"resource.delete_connected_networks": "حذف جميع الشبكات غير المحددة مسبقًا والمرتبطة بهذا المورد بشكل دائم.",
|
||||||
"resource.delete_configurations": "حذف جميع ملفات التعريف من الخادم بشكل دائم.",
|
"resource.delete_configurations": "حذف جميع ملفات التعريف من الخادم بشكل دائم.",
|
||||||
"database.delete_backups_locally": "حذف كافة النسخ الاحتياطية نهائيًا من التخزين المحلي."
|
"database.delete_backups_locally": "حذف كافة النسخ الاحتياطية نهائيًا من التخزين المحلي.",
|
||||||
|
"warning.sslipdomain": "تم حفظ ملفات التعريف الخاصة بك، ولكن استخدام نطاق sslip مع https <span class='dark:text-red-500 text-red-500 font-bold'>غير</span> مستحسن، لأن خوادم Let's Encrypt مع هذا النطاق العام محدودة المعدل (ستفشل عملية التحقق من شهادة SSL). <br><br>استخدم نطاقك الخاص بدلاً من ذلك."
|
||||||
}
|
}
|
||||||
|
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"auth.login": "Connexion",
|
"auth.login": "Connexion",
|
||||||
|
"auth.login.authentik": "Connexion avec Authentik",
|
||||||
"auth.login.azure": "Connexion avec Microsoft",
|
"auth.login.azure": "Connexion avec Microsoft",
|
||||||
"auth.login.bitbucket": "Connexion avec Bitbucket",
|
"auth.login.bitbucket": "Connexion avec Bitbucket",
|
||||||
"auth.login.github": "Connexion avec GitHub",
|
"auth.login.github": "Connexion avec GitHub",
|
||||||
@@ -34,5 +35,6 @@
|
|||||||
"resource.delete_volumes": "Supprimer définitivement tous les volumes associés à cette ressource.",
|
"resource.delete_volumes": "Supprimer définitivement tous les volumes associés à cette ressource.",
|
||||||
"resource.delete_connected_networks": "Supprimer définitivement tous les réseaux non-prédéfinis associés à cette ressource.",
|
"resource.delete_connected_networks": "Supprimer définitivement tous les réseaux non-prédéfinis associés à cette ressource.",
|
||||||
"resource.delete_configurations": "Supprimer définitivement tous les fichiers de configuration du serveur.",
|
"resource.delete_configurations": "Supprimer définitivement tous les fichiers de configuration du serveur.",
|
||||||
"database.delete_backups_locally": "Toutes les sauvegardes seront définitivement supprimées du stockage local."
|
"database.delete_backups_locally": "Toutes les sauvegardes seront définitivement supprimées du stockage local.",
|
||||||
|
"warning.sslipdomain": "Votre configuration est enregistrée, mais l'utilisation du domaine sslip avec https <span class='dark:text-red-500 text-red-500 font-bold'>N'EST PAS</span> recommandée, car les serveurs Let's Encrypt avec ce domaine public sont limités en taux (la validation du certificat SSL échouera). <br><br>Utilisez plutôt votre propre domaine."
|
||||||
}
|
}
|
||||||
|
11
lang/it.json
11
lang/it.json
@@ -1,5 +1,6 @@
|
|||||||
{
|
{
|
||||||
"auth.login": "Accedi",
|
"auth.login": "Accedi",
|
||||||
|
"auth.login.authentik": "Accedi con Authentik",
|
||||||
"auth.login.azure": "Accedi con Microsoft",
|
"auth.login.azure": "Accedi con Microsoft",
|
||||||
"auth.login.bitbucket": "Accedi con Bitbucket",
|
"auth.login.bitbucket": "Accedi con Bitbucket",
|
||||||
"auth.login.github": "Accedi con GitHub",
|
"auth.login.github": "Accedi con GitHub",
|
||||||
@@ -27,5 +28,13 @@
|
|||||||
"input.code": "Codice monouso",
|
"input.code": "Codice monouso",
|
||||||
"input.recovery_code": "Codice di recupero",
|
"input.recovery_code": "Codice di recupero",
|
||||||
"button.save": "Salva",
|
"button.save": "Salva",
|
||||||
"repository.url": "<span class='text-helper'>Esempi</span><br>Per i repository pubblici, utilizza <span class='text-helper'>https://...</span>.<br>Per i repository privati, utilizza <span class='text-helper'>git@...</span>.<br><br>https://github.com/coollabsio/coolify-examples verrà selezionato il branch <span class='text-helper'>main</span><br>https://github.com/coollabsio/coolify-examples/tree/nodejs-fastify verrà selezionato il branch <span class='text-helper'>nodejs-fastify</span>.<br>https://gitea.com/sedlav/expressjs.git verrà selezionato il branch <span class='text-helper'>main</span>.<br>https://gitlab.com/andrasbacsai/nodejs-example.git verrà selezionato il branch <span class='text-helper'>main</span>."
|
"repository.url": "<span class='text-helper'>Esempi</span><br>Per i repository pubblici, utilizza <span class='text-helper'>https://...</span>.<br>Per i repository privati, utilizza <span class='text-helper'>git@...</span>.<br><br>https://github.com/coollabsio/coolify-examples verrà selezionato il branch <span class='text-helper'>main</span><br>https://github.com/coollabsio/coolify-examples/tree/nodejs-fastify verrà selezionato il branch <span class='text-helper'>nodejs-fastify</span>.<br>https://gitea.com/sedlav/expressjs.git verrà selezionato il branch <span class='text-helper'>main</span>.<br>https://gitlab.com/andrasbacsai/nodejs-example.git verrà selezionato il branch <span class='text-helper'>main</span>.",
|
||||||
|
"service.stop": "Questo servizio verrà arrestato.",
|
||||||
|
"resource.docker_cleanup": "Esegui pulizia Docker (rimuove immagini non utilizzate e cache del builder).",
|
||||||
|
"resource.non_persistent": "Tutti i dati non persistenti verranno eliminati.",
|
||||||
|
"resource.delete_volumes": "Elimina definitivamente tutti i volumi associati a questa risorsa.",
|
||||||
|
"resource.delete_connected_networks": "Elimina definitivamente tutte le reti non predefinite associate a questa risorsa.",
|
||||||
|
"resource.delete_configurations": "Elimina definitivamente tutti i file di configurazione dal server.",
|
||||||
|
"database.delete_backups_locally": "Tutti i backup verranno eliminati definitivamente dall'archiviazione locale.",
|
||||||
|
"warning.sslipdomain": "La tua configurazione è stata salvata, ma il dominio sslip con https <span class='dark:text-red-500 text-red-500 font-bold'>NON</span> è raccomandato, poiché i server di Let's Encrypt con questo dominio pubblico hanno limitazioni di frequenza (la convalida del certificato SSL fallirà). <br><br>Utilizza invece il tuo dominio personale."
|
||||||
}
|
}
|
||||||
|
@@ -26,7 +26,7 @@
|
|||||||
@endphp
|
@endphp
|
||||||
@if ($showUnhealthyHelper)
|
@if ($showUnhealthyHelper)
|
||||||
<x-helper
|
<x-helper
|
||||||
helper="Unhealthy state. <span class='dark:text-warning text-coollabs'>This doesn't mean that the resource is malfunctioning.</span><br><br>- If the resource is accessible, it indicates that no health check is configured - it is not mandatory.<br>- If the resource is not accessible (returning 404 or 503), it may indicate that a health check is needed and has not passed. <span class='dark:text-warning text-coollabs'>Your action is required.</span><br><br>More details in the <a href='https://coolify.io/docs/knowledge-base/traefik/healthcheck/' class='underline dark:text-warning text-coollabs' target='_blank'>documentation</a>.">
|
helper="Unhealthy state. <span class='dark:text-warning text-coollabs'>This doesn't mean that the resource is malfunctioning.</span><br><br>- If the resource is accessible, it indicates that no health check is configured - it is not mandatory.<br>- If the resource is not accessible (returning 404 or 503), it may indicate that a health check is needed and has not passed. <span class='dark:text-warning text-coollabs'>Your action is required.</span><br><br>More details in the <a href='https://coolify.io/docs/knowledge-base/proxy/traefik/healthchecks' class='underline dark:text-warning text-coollabs' target='_blank'>documentation</a>.">
|
||||||
<x-slot:icon>
|
<x-slot:icon>
|
||||||
<svg class="hidden w-4 h-4 dark:text-warning lg:block" viewBox="0 0 256 256"
|
<svg class="hidden w-4 h-4 dark:text-warning lg:block" viewBox="0 0 256 256"
|
||||||
xmlns="http://www.w3.org/2000/svg">
|
xmlns="http://www.w3.org/2000/svg">
|
||||||
|
@@ -23,7 +23,7 @@
|
|||||||
if (checkNumber > 5) {
|
if (checkNumber > 5) {
|
||||||
this.popups.realtime = true;
|
this.popups.realtime = true;
|
||||||
console.error(
|
console.error(
|
||||||
'Coolify could not connect to its real-time service. This will cause unusual problems on the UI if not fixed! Please check the related documentation (https://coolify.io/docs/knowledge-base/cloudflare/tunnels) or get help on Discord (https://coollabs.io/discord).)'
|
'Coolify could not connect to its real-time service. This will cause unusual problems on the UI if not fixed! Please check the related documentation (https://coolify.io/docs/knowledge-base/cloudflare/tunnels/overview) or get help on Discord (https://coollabs.io/discord).)'
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -108,16 +108,16 @@
|
|||||||
<div id="logs" class="flex flex-col font-mono">
|
<div id="logs" class="flex flex-col font-mono">
|
||||||
@forelse ($this->logLines as $line)
|
@forelse ($this->logLines as $line)
|
||||||
<div @class([
|
<div @class([
|
||||||
'mt-2' => $line['command'] ?? false,
|
'mt-2' => isset($line['command']) && $line['command'],
|
||||||
'flex gap-2 dark:hover:bg-coolgray-500 hover:bg-gray-100',
|
'flex gap-2 dark:hover:bg-coolgray-500 hover:bg-gray-100',
|
||||||
])>
|
])>
|
||||||
<span x-show="showTimestamps" class="shrink-0 text-gray-500">{{ $line['timestamp'] }}</span>
|
<span x-show="showTimestamps" class="shrink-0 text-gray-500">{{ $line['timestamp'] }}</span>
|
||||||
<span @class([
|
<span @class([
|
||||||
'text-coollabs dark:text-warning' => $line['hidden'],
|
'text-coollabs dark:text-warning' => $line['hidden'],
|
||||||
'text-red-500' => $line['stderr'],
|
'text-red-500' => $line['stderr'],
|
||||||
'font-bold' => $line['command'] ?? false,
|
'font-bold' => isset($line['command']) && $line['command'],
|
||||||
'whitespace-pre-wrap',
|
'whitespace-pre-wrap',
|
||||||
])>{!! $line['line'] !!}</span>
|
])>{!! (isset($line['command']) && $line['command'] ? '[CMD]: ' : '') . trim($line['line']) !!}</span>
|
||||||
</div>
|
</div>
|
||||||
@empty
|
@empty
|
||||||
<span class="font-mono text-neutral-400 mb-2">No logs yet.</span>
|
<span class="font-mono text-neutral-400 mb-2">No logs yet.</span>
|
||||||
|
@@ -31,7 +31,7 @@
|
|||||||
then you should validate the server.
|
then you should validate the server.
|
||||||
<br /><br />
|
<br /><br />
|
||||||
For more information, please read our <a
|
For more information, please read our <a
|
||||||
href="https://coolify.io/docs/knowledge-base/cloudflare/tunnels/" target="_blank"
|
href="https://coolify.io/docs/knowledge-base/cloudflare/tunnels/overview" target="_blank"
|
||||||
class="font-medium underline hover:text-yellow-600 dark:hover:text-yellow-200">documentation</a>.
|
class="font-medium underline hover:text-yellow-600 dark:hover:text-yellow-200">documentation</a>.
|
||||||
</div>
|
</div>
|
||||||
@endif
|
@endif
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<form wire:submit.prevent='submit' class="flex flex-col gap-2 w-full">
|
<form wire:submit.prevent='submit' class="flex flex-col gap-2 w-full">
|
||||||
<x-forms.input id="cloudflare_token" required label="Cloudflare Token" type="password" />
|
<x-forms.input id="cloudflare_token" required label="Cloudflare Token" type="password" />
|
||||||
<x-forms.input id="ssh_domain" label="Configured SSH Domain" required
|
<x-forms.input id="ssh_domain" label="Configured SSH Domain" required
|
||||||
helper="The SSH domain you configured in Cloudflare. Make sure there is no protocol like http(s):// so you provide a FQDN not a URL. <a class='underline dark:text-white' href='https://coolify.io/docs/knowledge-base/cloudflare/tunnels/#automated' target='_blank'>Documentation</a>" />
|
helper="The SSH domain you configured in Cloudflare. Make sure there is no protocol like http(s):// so you provide a FQDN not a URL. <a class='underline dark:text-white' href='https://coolify.io/docs/knowledge-base/cloudflare/tunnels/server-ssh' target='_blank'>Documentation</a>" />
|
||||||
<x-forms.button type="submit" isHighlighted @click="modalOpen=false">Continue</x-forms.button>
|
<x-forms.button type="submit" isHighlighted @click="modalOpen=false">Continue</x-forms.button>
|
||||||
</form>
|
</form>
|
||||||
|
@@ -1,6 +1,6 @@
|
|||||||
<div class="w-full">
|
<div class="w-full">
|
||||||
<div class="mb-4">For more details, please visit the <a class="underline dark:text-warning"
|
<div class="mb-4">For more details, please visit the <a class="underline dark:text-warning"
|
||||||
href="https://coolify.io/docs/knowledge-base/s3" target="_blank">Coolify Docs</a>.</div>
|
href="https://coolify.io/docs/knowledge-base/s3/introduction" target="_blank">Coolify Docs</a>.</div>
|
||||||
<form class="flex flex-col gap-2" wire:submit='submit'>
|
<form class="flex flex-col gap-2" wire:submit='submit'>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<x-forms.input required label="Name" id="name" />
|
<x-forms.input required label="Name" id="name" />
|
||||||
|
@@ -22,7 +22,7 @@
|
|||||||
'If the storage location is in use by any backup jobs those backup jobs will only store the backup locally on the server.',
|
'If the storage location is in use by any backup jobs those backup jobs will only store the backup locally on the server.',
|
||||||
]" confirmationText="{{ $storage->name }}"
|
]" confirmationText="{{ $storage->name }}"
|
||||||
confirmationLabel="Please confirm the execution of the actions by entering the Storage Name below"
|
confirmationLabel="Please confirm the execution of the actions by entering the Storage Name below"
|
||||||
shortConfirmationLabel="Storage Name" :confirmWithPassword="false" step2ButtonText="Permanently Delet" />
|
shortConfirmationLabel="Storage Name" :confirmWithPassword="false" step2ButtonText="Permanently Delete" />
|
||||||
</div>
|
</div>
|
||||||
<div class="flex gap-2">
|
<div class="flex gap-2">
|
||||||
<x-forms.input label="Name" id="storage.name" />
|
<x-forms.input label="Name" id="storage.name" />
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
<div x-data="{ selected: 'monthly' }" class="w-full pb-20">
|
<div x-data="{ selected: 'monthly' }" class="w-full pb-20 pt-10">
|
||||||
<div class="px-6 mx-auto lg:px-8">
|
<div class="px-6 mx-auto lg:px-8">
|
||||||
<div class="flex justify-center">
|
<div class="flex justify-center">
|
||||||
<fieldset
|
<fieldset
|
||||||
|
@@ -27,7 +27,7 @@
|
|||||||
<div>You can't delete your last / personal team.</div>
|
<div>You can't delete your last / personal team.</div>
|
||||||
@elseif(currentTeam()->subscription)
|
@elseif(currentTeam()->subscription)
|
||||||
<div>Please cancel your subscription <a class="underline dark:text-white"
|
<div>Please cancel your subscription <a class="underline dark:text-white"
|
||||||
href="{{ route('subscription.show') }}">here</a> before delete this team.</div>
|
href="{{ route('subscription.show') }}">here</a> before deleting this team.</div>
|
||||||
@else
|
@else
|
||||||
@if (currentTeam()->isEmpty())
|
@if (currentTeam()->isEmpty())
|
||||||
<div class="pb-4">This will delete your team. Beware! There is no coming back!</div>
|
<div class="pb-4">This will delete your team. Beware! There is no coming back!</div>
|
||||||
|
@@ -20,5 +20,4 @@ services:
|
|||||||
- /var/run/docker.sock:/var/run/docker.sock:ro
|
- /var/run/docker.sock:/var/run/docker.sock:ro
|
||||||
environment:
|
environment:
|
||||||
- PORT=45876
|
- PORT=45876
|
||||||
# Public Key from "Add a new system" in the UI and restart the agent
|
- KEY=${KEY}
|
||||||
# - KEY=""
|
|
||||||
|
@@ -1,4 +1,4 @@
|
|||||||
# documentation: https://cal.com/docs
|
# documentation: https://cal.com/docs/developing/introduction
|
||||||
# slogan: Scheduling infrastructure for everyone.
|
# slogan: Scheduling infrastructure for everyone.
|
||||||
# tags: calcom,calendso,scheduling,open,source
|
# tags: calcom,calendso,scheduling,open,source
|
||||||
# logo: svgs/calcom.svg
|
# logo: svgs/calcom.svg
|
||||||
|
@@ -11,7 +11,9 @@ services:
|
|||||||
- SERVICE_FQDN_DUPLICATI_8200
|
- SERVICE_FQDN_DUPLICATI_8200
|
||||||
- PUID=1000
|
- PUID=1000
|
||||||
- PGID=1000
|
- PGID=1000
|
||||||
- TZ=Europe/Madrid
|
- TZ=${TZ:-Europe/London}
|
||||||
|
- SETTINGS_ENCRYPTION_KEY=${SERVICE_PASSWORD_ENCRYPT}
|
||||||
|
- DUPLICATI__WEBSERVICE_PASSWORD=${SERVICE_PASSWORD_WEB}
|
||||||
volumes:
|
volumes:
|
||||||
- duplicati-config:/config
|
- duplicati-config:/config
|
||||||
- duplicati-backups:/backups
|
- duplicati-backups:/backups
|
||||||
|
@@ -63,6 +63,15 @@ services:
|
|||||||
- DISCORD_SERVER_ROLES=${DISCORD_SERVER_ROLES}
|
- DISCORD_SERVER_ROLES=${DISCORD_SERVER_ROLES}
|
||||||
- PGSSLMODE=${PGSSLMODE:-disable}
|
- PGSSLMODE=${PGSSLMODE:-disable}
|
||||||
- FORCE_HTTPS=${FORCE_HTTPS:-true}
|
- FORCE_HTTPS=${FORCE_HTTPS:-true}
|
||||||
|
- SMTP_HOST=${SMTP_HOST}
|
||||||
|
- SMTP_PORT=${SMTP_PORT}
|
||||||
|
- SMTP_USERNAME=${SMTP_USERNAME}
|
||||||
|
- SMTP_PASSWORD=${SMTP_PASSWORD}
|
||||||
|
- SMTP_FROM_EMAIL=${SMTP_FROM_EMAIL}
|
||||||
|
- SMTP_REPLY_EMAIL=${SMTP_REPLY_EMAIL}
|
||||||
|
- SMTP_TLS_CIPHERS=${SMTP_TLS_CIPHERS}
|
||||||
|
- SMTP_SECURE=${SMTP_SECURE}
|
||||||
|
- SMTP_NAME=${SMTP_NAME}
|
||||||
healthcheck:
|
healthcheck:
|
||||||
disable: true
|
disable: true
|
||||||
|
|
||||||
|
@@ -20,7 +20,7 @@ services:
|
|||||||
content: |
|
content: |
|
||||||
---
|
---
|
||||||
# For configuration options and examples, please see:
|
# For configuration options and examples, please see:
|
||||||
# https://gethomepage.dev/latest/configs/bookmarks
|
# https://gethomepage.dev/configs/bookmarks
|
||||||
|
|
||||||
- Developer:
|
- Developer:
|
||||||
- Github:
|
- Github:
|
||||||
@@ -53,7 +53,7 @@ services:
|
|||||||
content: |
|
content: |
|
||||||
---
|
---
|
||||||
# For configuration options and examples, please see:
|
# For configuration options and examples, please see:
|
||||||
# https://gethomepage.dev/latest/configs/docker/
|
# https://gethomepage.dev/configs/docker/
|
||||||
|
|
||||||
# my-docker:
|
# my-docker:
|
||||||
# host: 127.0.0.1
|
# host: 127.0.0.1
|
||||||
@@ -75,7 +75,7 @@ services:
|
|||||||
content: |
|
content: |
|
||||||
---
|
---
|
||||||
# For configuration options and examples, please see:
|
# For configuration options and examples, please see:
|
||||||
# https://gethomepage.dev/latest/configs/services
|
# https://gethomepage.dev/configs/services
|
||||||
|
|
||||||
- My First Group:
|
- My First Group:
|
||||||
- My First Service:
|
- My First Service:
|
||||||
@@ -98,7 +98,7 @@ services:
|
|||||||
content: |
|
content: |
|
||||||
---
|
---
|
||||||
# For configuration options and examples, please see:
|
# For configuration options and examples, please see:
|
||||||
# https://gethomepage.dev/latest/configs/settings
|
# https://gethomepage.dev/configs/settings
|
||||||
|
|
||||||
providers:
|
providers:
|
||||||
openweathermap: openweathermapapikey
|
openweathermap: openweathermapapikey
|
||||||
@@ -110,7 +110,7 @@ services:
|
|||||||
content: |
|
content: |
|
||||||
---
|
---
|
||||||
# For configuration options and examples, please see:
|
# For configuration options and examples, please see:
|
||||||
# https://gethomepage.dev/latest/configs/service-widgets
|
# https://gethomepage.dev/widgets/services
|
||||||
|
|
||||||
- resources:
|
- resources:
|
||||||
cpu: true
|
cpu: true
|
||||||
|
File diff suppressed because one or more lines are too long
@@ -1,10 +1,10 @@
|
|||||||
{
|
{
|
||||||
"coolify": {
|
"coolify": {
|
||||||
"v4": {
|
"v4": {
|
||||||
"version": "4.0.0-beta.391"
|
"version": "4.0.0-beta.392"
|
||||||
},
|
},
|
||||||
"nightly": {
|
"nightly": {
|
||||||
"version": "4.0.0-beta.392"
|
"version": "4.0.0-beta.393"
|
||||||
},
|
},
|
||||||
"helper": {
|
"helper": {
|
||||||
"version": "1.0.6"
|
"version": "1.0.6"
|
||||||
|
Reference in New Issue
Block a user