feat: gzip enabled & stipprefix setting

refactor: code
This commit is contained in:
Andras Bacsai
2024-03-04 10:46:13 +01:00
parent cee6b54033
commit 8385bbb0a0
32 changed files with 154 additions and 62 deletions

View File

@@ -71,7 +71,7 @@ class StartMariadb
if (!is_null($this->database->limits_cpuset)) { if (!is_null($this->database->limits_cpuset)) {
data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset); data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset);
} }
if ($this->database->destination->server->isLogDrainEnabled() && $this->database->isLogDrainEnabled()) { if ($this->database->destination->server->is_log_drain_enabled() && $this->database->is_log_drain_enabled()) {
$docker_compose['services'][$container_name]['logging'] = [ $docker_compose['services'][$container_name]['logging'] = [
'driver' => 'fluentd', 'driver' => 'fluentd',
'options' => [ 'options' => [

View File

@@ -78,7 +78,7 @@ class StartMongodb
if (!is_null($this->database->limits_cpuset)) { if (!is_null($this->database->limits_cpuset)) {
data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset); data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset);
} }
if ($this->database->destination->server->isLogDrainEnabled() && $this->database->isLogDrainEnabled()) { if ($this->database->destination->server->is_log_drain_enabled() && $this->database->is_log_drain_enabled()) {
$docker_compose['services'][$container_name]['logging'] = [ $docker_compose['services'][$container_name]['logging'] = [
'driver' => 'fluentd', 'driver' => 'fluentd',
'options' => [ 'options' => [

View File

@@ -71,7 +71,7 @@ class StartMysql
if (!is_null($this->database->limits_cpuset)) { if (!is_null($this->database->limits_cpuset)) {
data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset); data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset);
} }
if ($this->database->destination->server->isLogDrainEnabled() && $this->database->isLogDrainEnabled()) { if ($this->database->destination->server->is_log_drain_enabled() && $this->database->is_log_drain_enabled()) {
$docker_compose['services'][$container_name]['logging'] = [ $docker_compose['services'][$container_name]['logging'] = [
'driver' => 'fluentd', 'driver' => 'fluentd',
'options' => [ 'options' => [

View File

@@ -77,7 +77,7 @@ class StartPostgresql
if (!is_null($this->database->limits_cpuset)) { if (!is_null($this->database->limits_cpuset)) {
data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset); data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset);
} }
if ($this->database->destination->server->isLogDrainEnabled() && $this->database->isLogDrainEnabled()) { if ($this->database->destination->server->is_log_drain_enabled() && $this->database->is_log_drain_enabled()) {
ray('Log Drain Enabled'); ray('Log Drain Enabled');
$docker_compose['services'][$container_name]['logging'] = [ $docker_compose['services'][$container_name]['logging'] = [
'driver' => 'fluentd', 'driver' => 'fluentd',

View File

@@ -81,7 +81,7 @@ class StartRedis
if (!is_null($this->database->limits_cpuset)) { if (!is_null($this->database->limits_cpuset)) {
data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset); data_set($docker_compose, "services.{$container_name}.cpuset", $this->database->limits_cpuset);
} }
if ($this->database->destination->server->isLogDrainEnabled() && $this->database->isLogDrainEnabled()) { if ($this->database->destination->server->is_log_drain_enabled() && $this->database->is_log_drain_enabled()) {
$docker_compose['services'][$container_name]['logging'] = [ $docker_compose['services'][$container_name]['logging'] = [
'driver' => 'fluentd', 'driver' => 'fluentd',
'options' => [ 'options' => [

View File

@@ -77,7 +77,7 @@ class Kernel extends ConsoleKernel
// ray('dispatching container status job in ' . $randomSeconds . ' seconds'); // ray('dispatching container status job in ' . $randomSeconds . ' seconds');
// dispatch($job); // dispatch($job);
// })->name('container-status-' . $server->id)->everyMinute()->onOneServer(); // })->name('container-status-' . $server->id)->everyMinute()->onOneServer();
if ($server->isLogDrainEnabled()) { if ($server->is_log_drain_enabled()) {
$schedule->job(new CheckLogDrainContainerJob($server))->everyMinute()->onOneServer(); $schedule->job(new CheckLogDrainContainerJob($server))->everyMinute()->onOneServer();
// $schedule // $schedule
// ->call(function () use ($server) { // ->call(function () use ($server) {

View File

@@ -1185,7 +1185,7 @@ class ApplicationDeploymentJob implements ShouldQueue, ShouldBeEncrypted
} else { } else {
$docker_compose['services'][$this->container_name]['labels'] = $labels; $docker_compose['services'][$this->container_name]['labels'] = $labels;
} }
if ($this->server->isLogDrainEnabled() && $this->application->isLogDrainEnabled()) { if ($this->server->is_log_drain_enabled() && $this->application->is_log_drain_enabled()) {
$docker_compose['services'][$this->container_name]['logging'] = [ $docker_compose['services'][$this->container_name]['logging'] = [
'driver' => 'fluentd', 'driver' => 'fluentd',
'options' => [ 'options' => [

View File

@@ -319,7 +319,7 @@ class DatabaseBackupJob implements ShouldQueue, ShouldBeEncrypted
private function backup_standalone_mongodb(string $databaseWithCollections): void private function backup_standalone_mongodb(string $databaseWithCollections): void
{ {
try { try {
$url = $this->database->getDbUrl(useInternal: true); $url = $this->database->get_db_url(useInternal: true);
if ($databaseWithCollections === 'all') { if ($databaseWithCollections === 'all') {
$commands[] = "mkdir -p " . $this->backup_dir; $commands[] = "mkdir -p " . $this->backup_dir;
$commands[] = "docker exec $this->container_name mongodump --authenticationDatabase=admin --uri=$url --gzip --archive > $this->backup_location"; $commands[] = "docker exec $this->container_name mongodump --authenticationDatabase=admin --uri=$url --gzip --archive > $this->backup_location";

View File

@@ -9,6 +9,8 @@ class Advanced extends Component
{ {
public Application $application; public Application $application;
public bool $is_force_https_enabled; public bool $is_force_https_enabled;
public bool $is_gzip_enabled;
public bool $is_stripprefix_enabled;
protected $rules = [ protected $rules = [
'application.settings.is_git_submodules_enabled' => 'boolean|required', 'application.settings.is_git_submodules_enabled' => 'boolean|required',
'application.settings.is_git_lfs_enabled' => 'boolean|required', 'application.settings.is_git_lfs_enabled' => 'boolean|required',
@@ -19,6 +21,8 @@ class Advanced extends Component
'application.settings.is_gpu_enabled' => 'boolean|required', 'application.settings.is_gpu_enabled' => 'boolean|required',
'application.settings.is_build_server_enabled' => 'boolean|required', 'application.settings.is_build_server_enabled' => 'boolean|required',
'application.settings.is_consistent_container_name_enabled' => 'boolean|required', 'application.settings.is_consistent_container_name_enabled' => 'boolean|required',
'application.settings.is_gzip_enabled' => 'boolean|required',
'application.settings.is_stripprefix_enabled' => 'boolean|required',
'application.settings.gpu_driver' => 'string|required', 'application.settings.gpu_driver' => 'string|required',
'application.settings.gpu_count' => 'string|required', 'application.settings.gpu_count' => 'string|required',
'application.settings.gpu_device_ids' => 'string|required', 'application.settings.gpu_device_ids' => 'string|required',
@@ -26,11 +30,13 @@ class Advanced extends Component
]; ];
public function mount() { public function mount() {
$this->is_force_https_enabled = $this->application->settings->is_force_https_enabled; $this->is_force_https_enabled = $this->application->settings->is_force_https_enabled;
$this->is_gzip_enabled = $this->application->settings->is_gzip_enabled;
$this->is_stripprefix_enabled = $this->application->settings->is_stripprefix_enabled;
} }
public function instantSave() public function instantSave()
{ {
if ($this->application->isLogDrainEnabled()) { if ($this->application->is_log_drain_enabled()) {
if (!$this->application->destination->server->isLogDrainEnabled()) { if (!$this->application->destination->server->is_log_drain_enabled()) {
$this->application->settings->is_log_drain_enabled = false; $this->application->settings->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on this server.'); $this->dispatch('error', 'Log drain is not enabled on this server.');
return; return;
@@ -40,6 +46,14 @@ class Advanced extends Component
$this->application->settings->is_force_https_enabled = $this->is_force_https_enabled; $this->application->settings->is_force_https_enabled = $this->is_force_https_enabled;
$this->dispatch('resetDefaultLabels', false); $this->dispatch('resetDefaultLabels', false);
} }
if ($this->application->settings->is_gzip_enabled !== $this->is_gzip_enabled) {
$this->application->settings->is_gzip_enabled = $this->is_gzip_enabled;
$this->dispatch('resetDefaultLabels', false);
}
if ($this->application->settings->is_stripprefix_enabled !== $this->is_stripprefix_enabled) {
$this->application->settings->is_stripprefix_enabled = $this->is_stripprefix_enabled;
$this->dispatch('resetDefaultLabels', false);
}
$this->application->settings->save(); $this->application->settings->save();
$this->dispatch('success', 'Settings saved.'); $this->dispatch('success', 'Settings saved.');
} }

View File

@@ -46,14 +46,14 @@ class General extends Component
public function mount() public function mount()
{ {
$this->db_url = $this->database->getDbUrl(true); $this->db_url = $this->database->get_db_url(true);
if ($this->database->is_public) { if ($this->database->is_public) {
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
} }
} }
public function instantSaveAdvanced() { public function instantSaveAdvanced() {
try { try {
if (!$this->database->destination->server->isLogDrainEnabled()) { if (!$this->database->destination->server->is_log_drain_enabled()) {
$this->database->is_log_drain_enabled = false; $this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.'); $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
return; return;
@@ -93,7 +93,7 @@ class General extends Component
return; return;
} }
StartDatabaseProxy::run($this->database); StartDatabaseProxy::run($this->database);
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
$this->dispatch('success', 'Database is now publicly accessible.'); $this->dispatch('success', 'Database is now publicly accessible.');
} else { } else {
StopDatabaseProxy::run($this->database); StopDatabaseProxy::run($this->database);

View File

@@ -44,15 +44,15 @@ class General extends Component
public function mount() public function mount()
{ {
$this->db_url = $this->database->getDbUrl(true); $this->db_url = $this->database->get_db_url(true);
if ($this->database->is_public) { if ($this->database->is_public) {
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
} }
} }
public function instantSaveAdvanced() public function instantSaveAdvanced()
{ {
try { try {
if (!$this->database->destination->server->isLogDrainEnabled()) { if (!$this->database->destination->server->is_log_drain_enabled()) {
$this->database->is_log_drain_enabled = false; $this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.'); $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
return; return;
@@ -95,7 +95,7 @@ class General extends Component
return; return;
} }
StartDatabaseProxy::run($this->database); StartDatabaseProxy::run($this->database);
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
$this->dispatch('success', 'Database is now publicly accessible.'); $this->dispatch('success', 'Database is now publicly accessible.');
} else { } else {
StopDatabaseProxy::run($this->database); StopDatabaseProxy::run($this->database);

View File

@@ -46,15 +46,15 @@ class General extends Component
public function mount() public function mount()
{ {
$this->db_url = $this->database->getDbUrl(true); $this->db_url = $this->database->get_db_url(true);
if ($this->database->is_public) { if ($this->database->is_public) {
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
} }
} }
public function instantSaveAdvanced() public function instantSaveAdvanced()
{ {
try { try {
if (!$this->database->destination->server->isLogDrainEnabled()) { if (!$this->database->destination->server->is_log_drain_enabled()) {
$this->database->is_log_drain_enabled = false; $this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.'); $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
return; return;
@@ -94,7 +94,7 @@ class General extends Component
return; return;
} }
StartDatabaseProxy::run($this->database); StartDatabaseProxy::run($this->database);
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
$this->dispatch('success', 'Database is now publicly accessible.'); $this->dispatch('success', 'Database is now publicly accessible.');
} else { } else {
StopDatabaseProxy::run($this->database); StopDatabaseProxy::run($this->database);

View File

@@ -53,14 +53,14 @@ class General extends Component
]; ];
public function mount() public function mount()
{ {
$this->db_url = $this->database->getDbUrl(true); $this->db_url = $this->database->get_db_url(true);
if ($this->database->is_public) { if ($this->database->is_public) {
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
} }
} }
public function instantSaveAdvanced() { public function instantSaveAdvanced() {
try { try {
if (!$this->database->destination->server->isLogDrainEnabled()) { if (!$this->database->destination->server->is_log_drain_enabled()) {
$this->database->is_log_drain_enabled = false; $this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.'); $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
return; return;
@@ -87,7 +87,7 @@ class General extends Component
return; return;
} }
StartDatabaseProxy::run($this->database); StartDatabaseProxy::run($this->database);
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
$this->dispatch('success', 'Database is now publicly accessible.'); $this->dispatch('success', 'Database is now publicly accessible.');
} else { } else {
StopDatabaseProxy::run($this->database); StopDatabaseProxy::run($this->database);

View File

@@ -39,14 +39,14 @@ class General extends Component
]; ];
public function mount() public function mount()
{ {
$this->db_url = $this->database->getDbUrl(true); $this->db_url = $this->database->get_db_url(true);
if ($this->database->is_public) { if ($this->database->is_public) {
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
} }
} }
public function instantSaveAdvanced() { public function instantSaveAdvanced() {
try { try {
if (!$this->database->destination->server->isLogDrainEnabled()) { if (!$this->database->destination->server->is_log_drain_enabled()) {
$this->database->is_log_drain_enabled = false; $this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.'); $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
return; return;
@@ -86,7 +86,7 @@ class General extends Component
return; return;
} }
StartDatabaseProxy::run($this->database); StartDatabaseProxy::run($this->database);
$this->db_url_public = $this->database->getDbUrl(); $this->db_url_public = $this->database->get_db_url();
$this->dispatch('success', 'Database is now publicly accessible.'); $this->dispatch('success', 'Database is now publicly accessible.');
} else { } else {
StopDatabaseProxy::run($this->database); StopDatabaseProxy::run($this->database);

View File

@@ -36,7 +36,7 @@ class Database extends Component
} }
public function instantSaveAdvanced() public function instantSaveAdvanced()
{ {
if (!$this->database->service->destination->server->isLogDrainEnabled()) { if (!$this->database->service->destination->server->is_log_drain_enabled()) {
$this->database->is_log_drain_enabled = false; $this->database->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.'); $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
return; return;

View File

@@ -18,6 +18,7 @@ class ServiceApplicationView extends Component
'application.required_fqdn' => 'required|boolean', 'application.required_fqdn' => 'required|boolean',
'application.is_log_drain_enabled' => 'nullable|boolean', 'application.is_log_drain_enabled' => 'nullable|boolean',
'application.is_gzip_enabled' => 'nullable|boolean', 'application.is_gzip_enabled' => 'nullable|boolean',
'application.is_stripprefix_enabled' => 'nullable|boolean',
]; ];
public function render() public function render()
{ {
@@ -29,7 +30,7 @@ class ServiceApplicationView extends Component
} }
public function instantSaveAdvanced() public function instantSaveAdvanced()
{ {
if (!$this->application->service->destination->server->isLogDrainEnabled()) { if (!$this->application->service->destination->server->is_log_drain_enabled()) {
$this->application->is_log_drain_enabled = false; $this->application->is_log_drain_enabled = false;
$this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.'); $this->dispatch('error', 'Log drain is not enabled on the server. Please enable it first.');
return; return;

View File

@@ -54,7 +54,7 @@ class LogDrains extends Component
{ {
try { try {
InstallLogDrain::run($this->server); InstallLogDrain::run($this->server);
if (!$this->server->isLogDrainEnabled()) { if (!$this->server->is_log_drain_enabled()) {
$this->dispatch('serverRefresh'); $this->dispatch('serverRefresh');
$this->dispatch('success', 'Log drain service stopped.'); $this->dispatch('success', 'Log drain service stopped.');
return; return;

View File

@@ -80,6 +80,18 @@ class Application extends BaseModel
} }
return false; return false;
} }
public function is_force_https_enabled()
{
return data_get($this, 'settings.is_force_https_enabled', false);
}
public function is_stripprefix_enabled()
{
return data_get($this, 'settings.is_stripprefix_enabled', true);
}
public function is_gzip_enabled()
{
return data_get($this, 'settings.is_gzip_enabled', true);
}
public function link() public function link()
{ {
if (data_get($this, 'environment.project.uuid')) { if (data_get($this, 'environment.project.uuid')) {
@@ -481,7 +493,7 @@ class Application extends BaseModel
{ {
return application_configuration_dir() . "/{$this->uuid}"; return application_configuration_dir() . "/{$this->uuid}";
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'settings.is_log_drain_enabled', false); return data_get($this, 'settings.is_log_drain_enabled', false);
} }

View File

@@ -405,7 +405,7 @@ class Server extends BaseModel
{ {
return $this->settings->is_reachable && $this->settings->is_usable && !$this->settings->force_disabled; return $this->settings->is_reachable && $this->settings->is_usable && !$this->settings->force_disabled;
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return $this->settings->is_logdrain_newrelic_enabled || $this->settings->is_logdrain_highlight_enabled || $this->settings->is_logdrain_axiom_enabled || $this->settings->is_logdrain_custom_enabled; return $this->settings->is_logdrain_newrelic_enabled || $this->settings->is_logdrain_highlight_enabled || $this->settings->is_logdrain_axiom_enabled || $this->settings->is_logdrain_custom_enabled;
} }

View File

@@ -19,11 +19,15 @@ class ServiceApplication extends BaseModel
$service->fileStorages()->delete(); $service->fileStorages()->delete();
}); });
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'is_log_drain_enabled', false); return data_get($this, 'is_log_drain_enabled', false);
} }
public function isGzipEnabled() public function is_stripprefix_enabled()
{
return data_get($this, 'is_stripprefix_enabled', true);
}
public function is_gzip_enabled()
{ {
return data_get($this, 'is_gzip_enabled', true); return data_get($this, 'is_gzip_enabled', true);
} }

View File

@@ -17,11 +17,11 @@ class ServiceDatabase extends BaseModel
$service->fileStorages()->delete(); $service->fileStorages()->delete();
}); });
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'is_log_drain_enabled', false); return data_get($this, 'is_log_drain_enabled', false);
} }
public function isGzipEnabled() public function is_gzip_enabled()
{ {
return true; return true;
} }

View File

@@ -100,7 +100,7 @@ class StandaloneMariadb extends BaseModel
} }
return null; return null;
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'is_log_drain_enabled', false); return data_get($this, 'is_log_drain_enabled', false);
} }
@@ -126,7 +126,7 @@ class StandaloneMariadb extends BaseModel
); );
} }
public function getDbUrl(bool $useInternal = false): string public function get_db_url(bool $useInternal = false): string
{ {
if ($this->is_public && !$useInternal) { if ($this->is_public && !$useInternal) {
return "mysql://{$this->mariadb_user}:{$this->mariadb_password}@{$this->destination->server->getIp}:{$this->public_port}/{$this->mariadb_database}"; return "mysql://{$this->mariadb_user}:{$this->mariadb_password}@{$this->destination->server->getIp}:{$this->public_port}/{$this->mariadb_database}";

View File

@@ -92,7 +92,7 @@ class StandaloneMongodb extends BaseModel
{ {
return data_get($this, 'environment.project.team'); return data_get($this, 'environment.project.team');
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'is_log_drain_enabled', false); return data_get($this, 'is_log_drain_enabled', false);
} }
@@ -142,7 +142,7 @@ class StandaloneMongodb extends BaseModel
{ {
return 'standalone-mongodb'; return 'standalone-mongodb';
} }
public function getDbUrl(bool $useInternal = false) public function get_db_url(bool $useInternal = false)
{ {
if ($this->is_public && !$useInternal) { if ($this->is_public && !$useInternal) {
return "mongodb://{$this->mongo_initdb_root_username}:{$this->mongo_initdb_root_password}@{$this->destination->server->getIp}:{$this->public_port}/?directConnection=true"; return "mongodb://{$this->mongo_initdb_root_username}:{$this->mongo_initdb_root_password}@{$this->destination->server->getIp}:{$this->public_port}/?directConnection=true";

View File

@@ -105,7 +105,7 @@ class StandaloneMysql extends BaseModel
return 'standalone-mysql'; return 'standalone-mysql';
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'is_log_drain_enabled', false); return data_get($this, 'is_log_drain_enabled', false);
} }
@@ -127,7 +127,7 @@ class StandaloneMysql extends BaseModel
); );
} }
public function getDbUrl(bool $useInternal = false): string public function get_db_url(bool $useInternal = false): string
{ {
if ($this->is_public && !$useInternal) { if ($this->is_public && !$useInternal) {
return "mysql://{$this->mysql_user}:{$this->mysql_password}@{$this->destination->server->getIp}:{$this->public_port}/{$this->mysql_database}"; return "mysql://{$this->mysql_user}:{$this->mysql_password}@{$this->destination->server->getIp}:{$this->public_port}/{$this->mysql_database}";

View File

@@ -97,7 +97,7 @@ class StandalonePostgresql extends BaseModel
} }
return null; return null;
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'is_log_drain_enabled', false); return data_get($this, 'is_log_drain_enabled', false);
} }
@@ -126,7 +126,7 @@ class StandalonePostgresql extends BaseModel
{ {
return 'standalone-postgresql'; return 'standalone-postgresql';
} }
public function getDbUrl(bool $useInternal = false): string public function get_db_url(bool $useInternal = false): string
{ {
if ($this->is_public && !$useInternal) { if ($this->is_public && !$useInternal) {
return "postgres://{$this->postgres_user}:{$this->postgres_password}@{$this->destination->server->getIp}:{$this->public_port}/{$this->postgres_db}"; return "postgres://{$this->postgres_user}:{$this->postgres_password}@{$this->destination->server->getIp}:{$this->public_port}/{$this->postgres_db}";

View File

@@ -96,7 +96,7 @@ class StandaloneRedis extends BaseModel
} }
return null; return null;
} }
public function isLogDrainEnabled() public function is_log_drain_enabled()
{ {
return data_get($this, 'is_log_drain_enabled', false); return data_get($this, 'is_log_drain_enabled', false);
} }
@@ -122,7 +122,7 @@ class StandaloneRedis extends BaseModel
{ {
return 'standalone-redis'; return 'standalone-redis';
} }
public function getDbUrl(bool $useInternal = false): string public function get_db_url(bool $useInternal = false): string
{ {
if ($this->is_public && !$useInternal) { if ($this->is_public && !$useInternal) {
return "redis://:{$this->redis_password}@{$this->destination->server->getIp}:{$this->public_port}/0"; return "redis://:{$this->redis_password}@{$this->destination->server->getIp}:{$this->public_port}/0";

View File

@@ -215,7 +215,7 @@ function generateServiceSpecificFqdns(ServiceApplication|Application $resource,
} }
return $payload; return $payload;
} }
function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_https_enabled = false, $onlyPort = null, ?Collection $serviceLabels = null, ?bool $is_gzip_enabled = true, ?string $service_name = null) function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_https_enabled = false, $onlyPort = null, ?Collection $serviceLabels = null, ?bool $is_gzip_enabled = true, ?bool $is_stripprefix_enabled = true, ?string $service_name = null)
{ {
$labels = collect([]); $labels = collect([]);
$labels->push('traefik.enable=true'); $labels->push('traefik.enable=true');
@@ -281,8 +281,10 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
$labels->push("traefik.http.services.{$https_label}.loadbalancer.server.port=$port"); $labels->push("traefik.http.services.{$https_label}.loadbalancer.server.port=$port");
} }
if ($path !== '/') { if ($path !== '/') {
$labels->push("traefik.http.middlewares.{$https_label}-stripprefix.stripprefix.prefixes={$path}"); if ($is_stripprefix_enabled) {
$middlewares = collect(["{$https_label}-stripprefix"]); $labels->push("traefik.http.middlewares.{$https_label}-stripprefix.stripprefix.prefixes={$path}");
$middlewares = collect(["{$https_label}-stripprefix"]);
}
if ($is_gzip_enabled) { if ($is_gzip_enabled) {
$middlewares->push('gzip'); $middlewares->push('gzip');
} }
@@ -334,8 +336,10 @@ function fqdnLabelsForTraefik(string $uuid, Collection $domains, bool $is_force_
$labels->push("traefik.http.routers.{$http_label}.service={$http_label}"); $labels->push("traefik.http.routers.{$http_label}.service={$http_label}");
} }
if ($path !== '/') { if ($path !== '/') {
$labels->push("traefik.http.middlewares.{$http_label}-stripprefix.stripprefix.prefixes={$path}"); if ($is_stripprefix_enabled) {
$middlewares = collect(["{$http_label}-stripprefix"]); $labels->push("traefik.http.middlewares.{$http_label}-stripprefix.stripprefix.prefixes={$path}");
$middlewares = collect(["{$http_label}-stripprefix"]);
}
if ($is_gzip_enabled) { if ($is_gzip_enabled) {
$middlewares->push('gzip'); $middlewares->push('gzip');
} }
@@ -392,7 +396,14 @@ function generateLabelsApplication(Application $application, ?ApplicationPreview
$domains = Str::of(data_get($application, 'fqdn'))->explode(','); $domains = Str::of(data_get($application, 'fqdn'))->explode(',');
} }
// Add Traefik labels no matter which proxy is selected // Add Traefik labels no matter which proxy is selected
$labels = $labels->merge(fqdnLabelsForTraefik($appUuid, $domains, $application->settings->is_force_https_enabled, $onlyPort)); $labels = $labels->merge(fqdnLabelsForTraefik(
uuid: $appUuid,
domains: $domains,
onlyPort: $onlyPort,
is_force_https_enabled: $application->is_force_https_enabled(),
is_gzip_enabled: $application->is_gzip_enabled(),
is_stripprefix_enabled: $application->is_stripprefix_enabled()
));
} }
return $labels->all(); return $labels->all();
} }

View File

@@ -1047,10 +1047,17 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
$serviceLabels = $serviceLabels->merge($defaultLabels); $serviceLabels = $serviceLabels->merge($defaultLabels);
if (!$isDatabase && $fqdns->count() > 0) { if (!$isDatabase && $fqdns->count() > 0) {
if ($fqdns) { if ($fqdns) {
$serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik($resource->uuid, $fqdns, true, serviceLabels: $serviceLabels, is_gzip_enabled: $savedService->isGzipEnabled(), service_name: $serviceName)); $serviceLabels = $serviceLabels->merge(fqdnLabelsForTraefik(
uuid: $resource->uuid,
domains: $fqdns,
is_force_https_enabled: true,
serviceLabels: $serviceLabels,
is_gzip_enabled: $savedService->is_gzip_enabled(),
is_stripprefix_enabled: $savedService->is_stripprefix_enabled(),
service_name: $serviceName));
} }
} }
if ($resource->server->isLogDrainEnabled() && $savedService->isLogDrainEnabled()) { if ($resource->server->is_log_drain_enabled() && $savedService->is_log_drain_enabled()) {
data_set($service, 'logging', [ data_set($service, 'logging', [
'driver' => 'fluentd', 'driver' => 'fluentd',
'options' => [ 'options' => [
@@ -1494,7 +1501,7 @@ function parseDockerComposeFile(Service|Application $resource, bool $isNew = fal
$defaultLabels = defaultLabels($resource->id, $containerName, $pull_request_id, type: 'application'); $defaultLabels = defaultLabels($resource->id, $containerName, $pull_request_id, type: 'application');
$serviceLabels = $serviceLabels->merge($defaultLabels); $serviceLabels = $serviceLabels->merge($defaultLabels);
if ($server->isLogDrainEnabled() && $resource->isLogDrainEnabled()) { if ($server->is_log_drain_enabled() && $resource->is_log_drain_enabled()) {
data_set($service, 'logging', [ data_set($service, 'logging', [
'driver' => 'fluentd', 'driver' => 'fluentd',
'options' => [ 'options' => [

View File

@@ -0,0 +1,36 @@
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
return new class extends Migration
{
/**
* Run the migrations.
*/
public function up(): void
{
Schema::table('application_settings', function (Blueprint $table) {
$table->boolean('is_gzip_enabled')->default(true);
$table->boolean('is_stripprefix_enabled')->default(true);
});
Schema::table('service_applications', function (Blueprint $table) {
$table->boolean('is_stripprefix_enabled')->default(true);
});
}
/**
* Reverse the migrations.
*/
public function down(): void
{
Schema::table('application_settings', function (Blueprint $table) {
$table->dropColumn('is_gzip_enabled');
$table->dropColumn('is_stripprefix_enabled');
});
Schema::table('service_applications', function (Blueprint $table) {
$table->dropColumn('is_stripprefix_enabled');
});
}
};

View File

@@ -20,6 +20,11 @@
helper="The deployed container will have the same name ({{ $application->uuid }}). <span class='font-bold text-warning'>You will lose the rolling update feature!</span>" helper="The deployed container will have the same name ({{ $application->uuid }}). <span class='font-bold text-warning'>You will lose the rolling update feature!</span>"
instantSave id="application.settings.is_consistent_container_name_enabled" instantSave id="application.settings.is_consistent_container_name_enabled"
label="Consistent Container Names" /> label="Consistent Container Names" />
<x-forms.checkbox label="Enable gzip compression"
helper="You can disable gzip compression if you want. Some services are compressing data by default. In this case, you do not need this."
instantSave id="is_gzip_enabled" />
<x-forms.checkbox helper="Strip Prefix is used to remove prefixes from paths. Like /api/ to /api."
instantSave id="is_stripprefix_enabled" label="Strip Prefixes" />
<h3>Logs</h3> <h3>Logs</h3>
@if (!$application->settings->is_raw_compose_deployment_enabled) @if (!$application->settings->is_raw_compose_deployment_enabled)
<x-forms.checkbox helper="Drain logs to your configured log drain endpoint in your Server settings." <x-forms.checkbox helper="Drain logs to your configured log drain endpoint in your Server settings."

View File

@@ -34,7 +34,9 @@
<h3 class="pt-2">Advanced</h3> <h3 class="pt-2">Advanced</h3>
<div class="w-96"> <div class="w-96">
<x-forms.checkbox instantSave id="application.is_gzip_enabled" label="Enable gzip compression" <x-forms.checkbox instantSave id="application.is_gzip_enabled" label="Enable gzip compression"
helper="You can disable gzip compression if you want. Some services are compressing data by default. In this case, you do not need this." /> helper="You can disable gzip compression if you want. Some services are compressing data by default. In this case, you do not need this." />
<x-forms.checkbox instantSave id="application.is_stripprefix_enabled" label="Strip Prefixes"
helper="Strip Prefix is used to remove prefixes from paths. Like /api/ to /api." />
<x-forms.checkbox instantSave label="Exclude from service status" <x-forms.checkbox instantSave label="Exclude from service status"
helper="If you do not need to monitor this resource, enable. Useful if this service is optional." helper="If you do not need to monitor this resource, enable. Useful if this service is optional."
id="application.exclude_from_status"></x-forms.checkbox> id="application.exclude_from_status"></x-forms.checkbox>

View File

@@ -12,7 +12,7 @@
</div> </div>
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col w-full gap-2 xl:flex-row"> <div class="flex flex-col w-full gap-2 xl:flex-row">
@if ($server->isLogDrainEnabled()) @if ($server->is_log_drain_enabled())
<x-forms.input disabled type="password" required <x-forms.input disabled type="password" required
id="server.settings.logdrain_newrelic_license_key" label="License Key" /> id="server.settings.logdrain_newrelic_license_key" label="License Key" />
<x-forms.input disabled required id="server.settings.logdrain_newrelic_base_uri" <x-forms.input disabled required id="server.settings.logdrain_newrelic_base_uri"
@@ -44,7 +44,7 @@
<form wire:submit='submit("axiom")' class="flex flex-col"> <form wire:submit='submit("axiom")' class="flex flex-col">
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
<div class="flex flex-col w-full gap-2 xl:flex-row"> <div class="flex flex-col w-full gap-2 xl:flex-row">
@if ($server->isLogDrainEnabled()) @if ($server->is_log_drain_enabled())
<x-forms.input disabled type="password" required id="server.settings.logdrain_axiom_api_key" <x-forms.input disabled type="password" required id="server.settings.logdrain_axiom_api_key"
label="API Key" /> label="API Key" />
<x-forms.input disabled required id="server.settings.logdrain_axiom_dataset_name" <x-forms.input disabled required id="server.settings.logdrain_axiom_dataset_name"
@@ -88,7 +88,7 @@
</div> </div>
<form wire:submit='submit("custom")' class="flex flex-col"> <form wire:submit='submit("custom")' class="flex flex-col">
<div class="flex flex-col gap-4"> <div class="flex flex-col gap-4">
@if ($server->isLogDrainEnabled()) @if ($server->is_log_drain_enabled())
<x-forms.textarea disabled rows="6" required id="server.settings.logdrain_custom_config" <x-forms.textarea disabled rows="6" required id="server.settings.logdrain_custom_config"
label="Custom FluentBit Configuration" /> label="Custom FluentBit Configuration" />
<x-forms.textarea disabled id="server.settings.logdrain_custom_config_parser" <x-forms.textarea disabled id="server.settings.logdrain_custom_config_parser"