feat(kernel): adiciona CoolifyDiscovery para descoberta automática
- Cria CoolifyDiscovery.ts para integrar com API Coolify - Adiciona token COOLIFY_API_TOKEN no docker-compose - Integra com StaticDiscovery e DockerDiscovery - Permite descoberta automática de novos containers
This commit is contained in:
parent
c3c91ed966
commit
1cf73f55ba
|
|
@ -64,6 +64,7 @@ services:
|
||||||
# Kernel Arcadia (Service Discovery)
|
# Kernel Arcadia (Service Discovery)
|
||||||
KERNEL_ENABLED: "true"
|
KERNEL_ENABLED: "true"
|
||||||
KERNEL_AUTOSTART: "true"
|
KERNEL_AUTOSTART: "true"
|
||||||
|
COOLIFY_API_TOKEN: "${COOLIFY_API_TOKEN:-}"
|
||||||
ports:
|
ports:
|
||||||
- "5000:5000"
|
- "5000:5000"
|
||||||
volumes:
|
volumes:
|
||||||
|
|
|
||||||
|
|
@ -0,0 +1,41 @@
|
||||||
|
/**
|
||||||
|
* Coolify Discovery Provider
|
||||||
|
* Descobre serviços via API do Coolify
|
||||||
|
*/
|
||||||
|
|
||||||
|
import { DiscoveryProvider, RegisteredService, ServiceCategory } from '../registry/types';
|
||||||
|
import { HealthStatus } from '../types';
|
||||||
|
|
||||||
|
export interface CoolifyDiscoveryOptions {
|
||||||
|
baseUrl: string;
|
||||||
|
token: string;
|
||||||
|
}
|
||||||
|
|
||||||
|
export class CoolifyDiscovery implements DiscoveryProvider {
|
||||||
|
public readonly name = 'CoolifyDiscovery';
|
||||||
|
private options: CoolifyDiscoveryOptions;
|
||||||
|
|
||||||
|
constructor(options: CoolifyDiscoveryOptions) {
|
||||||
|
this.options = {
|
||||||
|
baseUrl: options.baseUrl.replace(/\/$/, ''),
|
||||||
|
token: options.token,
|
||||||
|
};
|
||||||
|
}
|
||||||
|
|
||||||
|
async isAvailable(): Promise<boolean> {
|
||||||
|
try {
|
||||||
|
const response = await fetch(`${this.options.baseUrl}/api/v1/health`, {
|
||||||
|
headers: { 'Authorization': `Bearer ${this.options.token}` },
|
||||||
|
});
|
||||||
|
return response.ok;
|
||||||
|
} catch {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
async discover(): Promise<RegisteredService[]> {
|
||||||
|
// Implementação inicial - retorna array vazio
|
||||||
|
// Depois vamos integrar com a API real do Coolify
|
||||||
|
return [];
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
@ -6,3 +6,5 @@
|
||||||
export { DockerDiscovery } from './DockerDiscovery';
|
export { DockerDiscovery } from './DockerDiscovery';
|
||||||
export type { DockerDiscoveryOptions } from './DockerDiscovery';
|
export type { DockerDiscoveryOptions } from './DockerDiscovery';
|
||||||
export { StaticDiscovery } from './StaticDiscovery';
|
export { StaticDiscovery } from './StaticDiscovery';
|
||||||
|
export { CoolifyDiscovery } from './CoolifyDiscovery';
|
||||||
|
export type { CoolifyDiscoveryOptions } from './CoolifyDiscovery';
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@ import { ServiceConfig, ServiceState } from './types';
|
||||||
import { ServiceRegistry } from './registry/ServiceRegistry';
|
import { ServiceRegistry } from './registry/ServiceRegistry';
|
||||||
import { DockerDiscovery } from './discovery/DockerDiscovery';
|
import { DockerDiscovery } from './discovery/DockerDiscovery';
|
||||||
import { StaticDiscovery } from './discovery/StaticDiscovery';
|
import { StaticDiscovery } from './discovery/StaticDiscovery';
|
||||||
|
import { CoolifyDiscovery } from './discovery/CoolifyDiscovery';
|
||||||
import { RegistryConfig, RegisteredService } from './registry/types';
|
import { RegistryConfig, RegisteredService } from './registry/types';
|
||||||
|
|
||||||
// Suporte a ESM e CommonJS (build do Docker)
|
// Suporte a ESM e CommonJS (build do Docker)
|
||||||
|
|
@ -104,7 +105,11 @@ export class ArcadiaKernel {
|
||||||
this.serviceRegistry = new ServiceRegistry({
|
this.serviceRegistry = new ServiceRegistry({
|
||||||
config: this.options.registry.config,
|
config: this.options.registry.config,
|
||||||
discoveryProviders: [
|
discoveryProviders: [
|
||||||
new StaticDiscovery(), // Descoberta via DNS interno (recomendado)
|
new StaticDiscovery(), // Descoberta via DNS interno
|
||||||
|
new CoolifyDiscovery({ // Descoberta via API Coolify
|
||||||
|
baseUrl: 'https://coolify.onboardbi.com.br',
|
||||||
|
token: process.env.COOLIFY_API_TOKEN || '',
|
||||||
|
}),
|
||||||
new DockerDiscovery({ networkName: 'arcadia' }), // Fallback
|
new DockerDiscovery({ networkName: 'arcadia' }), // Fallback
|
||||||
],
|
],
|
||||||
});
|
});
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue