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_ENABLED: "true"
|
||||
KERNEL_AUTOSTART: "true"
|
||||
COOLIFY_API_TOKEN: "${COOLIFY_API_TOKEN:-}"
|
||||
ports:
|
||||
- "5000:5000"
|
||||
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 type { DockerDiscoveryOptions } from './DockerDiscovery';
|
||||
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 { DockerDiscovery } from './discovery/DockerDiscovery';
|
||||
import { StaticDiscovery } from './discovery/StaticDiscovery';
|
||||
import { CoolifyDiscovery } from './discovery/CoolifyDiscovery';
|
||||
import { RegistryConfig, RegisteredService } from './registry/types';
|
||||
|
||||
// Suporte a ESM e CommonJS (build do Docker)
|
||||
|
|
@ -104,7 +105,11 @@ export class ArcadiaKernel {
|
|||
this.serviceRegistry = new ServiceRegistry({
|
||||
config: this.options.registry.config,
|
||||
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
|
||||
],
|
||||
});
|
||||
|
|
|
|||
Loading…
Reference in New Issue