diff --git a/web/app/Filament/Enums/ServerApplicationType.php b/web/app/Filament/Enums/ServerApplicationType.php index ea4f7894..08619e01 100644 --- a/web/app/Filament/Enums/ServerApplicationType.php +++ b/web/app/Filament/Enums/ServerApplicationType.php @@ -12,6 +12,7 @@ enum ServerApplicationType: string implements HasLabel, HasDescriptions, HasIcon case APACHE_NODEJS = 'apache_nodejs'; case APACHE_PYTHON = 'apache_python'; case APACHE_RUBY = 'apache_ruby'; + case APACHE_DOCKER = 'apache_docker'; public function getLabel(): ?string { @@ -20,6 +21,7 @@ public function getLabel(): ?string self::APACHE_NODEJS => 'Apache + Node.js (Passenger)', self::APACHE_PYTHON => 'Apache + Python (Passenger)', self::APACHE_RUBY => 'Apache + Ruby (Passenger)', + self::APACHE_DOCKER => 'Docker', }; } @@ -30,6 +32,7 @@ public function getDescriptions(): ?string self::APACHE_NODEJS => 'Install applications like Ghost, KeystoneJS, and more.', self::APACHE_PYTHON => 'Install applications like Django, Flask, and more.', self::APACHE_RUBY => 'Install applications like Ruby on Rails, Sinatra, and more.', + self::APACHE_DOCKER => 'Run your own Docker containers.', }; } @@ -40,6 +43,7 @@ public function getIcons(): ?string self::APACHE_NODEJS => 'phyre-nodejs', self::APACHE_PYTHON => 'phyre-python', self::APACHE_RUBY => 'phyre-ruby', + self::APACHE_DOCKER => 'docker-logo', }; } } diff --git a/web/app/Filament/Resources/DomainResource.php b/web/app/Filament/Resources/DomainResource.php index ce7d60fd..c030baae 100644 --- a/web/app/Filament/Resources/DomainResource.php +++ b/web/app/Filament/Resources/DomainResource.php @@ -18,6 +18,7 @@ use Filament\Tables; use Filament\Tables\Table; use JaOcero\RadioDeck\Forms\Components\RadioDeck; +use Modules\Docker\App\Models\DockerContainer; class DomainResource extends Resource { @@ -33,8 +34,17 @@ public static function form(Form $form): Form { $hostingSubscriptions = []; $getHostingSubscriptions = \App\Models\HostingSubscription::all(); - foreach ($getHostingSubscriptions as $hostingSubscription) { - $hostingSubscriptions[$hostingSubscription->id] = $hostingSubscription->domain . ' - '.$hostingSubscription->customer->name; + if (!$getHostingSubscriptions) { + foreach ($getHostingSubscriptions as $hostingSubscription) { + $hostingSubscriptions[$hostingSubscription->id] = $hostingSubscription->domain . ' - ' . $hostingSubscription->customer->name; + } + } + $dockerContainers = []; + $getDockerContainers = DockerContainer::all(); + if ($getDockerContainers) { + foreach ($getDockerContainers as $dockerContainer) { + $dockerContainers[$dockerContainer->id] = $dockerContainer->name; + } } return $form @@ -125,6 +135,16 @@ public static function form(Form $form): Form ->options(SupportedApplicationTypes::getRubyVersions()) ->columns(6) ->required(), + + Select::make('server_application_settings.docker_container_id') + ->hidden(function (Get $get) { + return $get('server_application_type') !== 'apache_docker'; + }) + ->label('Docker Contaier') + ->options($dockerContainers) + ->columns(5) + ->required(), + ]), Tabs\Tab::make('Git') ->schema([ diff --git a/web/app/Models/Domain.php b/web/app/Models/Domain.php index 526cdbda..09d439a0 100644 --- a/web/app/Models/Domain.php +++ b/web/app/Models/Domain.php @@ -8,6 +8,7 @@ use App\ShellApi; use Illuminate\Database\Eloquent\Builder; use Illuminate\Database\Eloquent\Model; +use Modules\Docker\App\Models\DockerContainer; class Domain extends Model { @@ -273,8 +274,21 @@ public function configureVirtualHost() } } + if ($this->server_application_type == 'apache_docker') { + if (isset($this->server_application_settings['docker_container_id'])) { + $findDockerContainer = DockerContainer::where('id', $this->server_application_settings['docker_container_id']) + ->first(); + if ($findDockerContainer) { + $apacheVirtualHostBuilder->setProxyPass('http://127.0.0.1:'.$findDockerContainer->external_port); + $apacheVirtualHostBuilder->setAppType('docker'); + $apacheVirtualHostBuilder->setAppVersion($appVersion); + } + } + } $apacheBaseConfig = $apacheVirtualHostBuilder->buildConfig(); + + dd($apacheBaseConfig); if (!empty($apacheBaseConfig)) { file_put_contents('/etc/apache2/sites-available/'.$this->domain.'.conf', $apacheBaseConfig); diff --git a/web/app/VirtualHosts/ApacheVirtualHostBuilder.php b/web/app/VirtualHosts/ApacheVirtualHostBuilder.php index 4257303f..a796a3e7 100644 --- a/web/app/VirtualHosts/ApacheVirtualHostBuilder.php +++ b/web/app/VirtualHosts/ApacheVirtualHostBuilder.php @@ -35,6 +35,8 @@ class ApacheVirtualHostBuilder public $serverAdmin = null; + public $proxyPass = null; + public function setPort($port) { $this->port = $port; @@ -124,6 +126,11 @@ public function setServerAdmin($email) $this->serverAdmin = $email; } + public function setProxyPass($proxyPass) + { + $this->proxyPass = $proxyPass; + } + public function buildConfig() { $settings = [ @@ -145,6 +152,7 @@ public function buildConfig() 'passengerAppRoot' => $this->passengerAppRoot, 'passengerAppType' => $this->passengerAppType, 'passengerStartupFile' => $this->passengerStartupFile, + 'proxyPass' => $this->proxyPass, ]; $apacheVirtualHostConfigs = app()->virtualHostManager->getConfigs($this->additionalServices); diff --git a/web/resources/views/actions/samples/ubuntu/apache2-conf.blade.php b/web/resources/views/actions/samples/ubuntu/apache2-conf.blade.php index dfc20345..1b04197a 100644 --- a/web/resources/views/actions/samples/ubuntu/apache2-conf.blade.php +++ b/web/resources/views/actions/samples/ubuntu/apache2-conf.blade.php @@ -37,6 +37,12 @@ @endif + @if (!empty($proxyPass)) + + ProxyPass / {{$proxyPass}} + + @endif + Options Indexes FollowSymLinks MultiViews @if($appType == 'php') Includes ExecCGI @endif