feat(deployments): docker tabanlı proje yönetim ve otomatik deploy sistemi ekle
Docker Compose projeleri için tam kapsamlı yönetim paneli ve otomatik deployment altyapısı eklendi. Sistem özellikleri: - Belirtilen root dizin altındaki docker-compose dosyası içeren projeleri tarama - Git repo bağlantısı ile branch yönetimi ve klonlama/pull işlemleri - Docker compose up/down komutları ile otomatik deploy - Gitea webhook entegrasyonu ile commit bazlı tetikleme - Deploy geçmişi, log kayıtları ve durum takibi (running/success/failed) - Deploy metrikleri ve dashboard görselleştirmesi - Webhook token ve secret yönetimi ile güvenlik - Proje favicon servisi Teknik değişiklikler: - Backend: deploymentProject, deploymentRun ve settings modelleri eklendi - Backend: deploymentService ile git ve docker işlemleri otomatize edildi - Backend: webhook doğrulaması için signature kontrolü eklendi - Docker: docker-cli ve docker-compose bağımlılıkları eklendi - Frontend: deployments ve settings sayfaları eklendi - Frontend: dashboard'a deploy metrikleri ve aktivite akışı eklendi - API: /api/deployments ve /api/settings yolları eklendi
This commit is contained in:
49
backend/src/models/deploymentProject.ts
Normal file
49
backend/src/models/deploymentProject.ts
Normal file
@@ -0,0 +1,49 @@
|
||||
import mongoose, { Schema, Document } from "mongoose";
|
||||
|
||||
export type ComposeFile = "docker-compose.yml" | "docker-compose.dev.yml";
|
||||
export type DeploymentStatus = "idle" | "running" | "success" | "failed";
|
||||
export type DeploymentEnv = "dev" | "prod";
|
||||
|
||||
export interface DeploymentProjectDocument extends Document {
|
||||
name: string;
|
||||
rootPath: string;
|
||||
repoUrl: string;
|
||||
branch: string;
|
||||
composeFile: ComposeFile;
|
||||
webhookToken: string;
|
||||
env: DeploymentEnv;
|
||||
port?: number;
|
||||
lastDeployAt?: Date;
|
||||
lastStatus: DeploymentStatus;
|
||||
lastMessage?: string;
|
||||
createdAt: Date;
|
||||
updatedAt: Date;
|
||||
}
|
||||
|
||||
const DeploymentProjectSchema = new Schema<DeploymentProjectDocument>(
|
||||
{
|
||||
name: { type: String, required: true, trim: true },
|
||||
rootPath: { type: String, required: true, trim: true },
|
||||
repoUrl: { type: String, required: true, trim: true },
|
||||
branch: { type: String, required: true, trim: true },
|
||||
composeFile: {
|
||||
type: String,
|
||||
required: true,
|
||||
enum: ["docker-compose.yml", "docker-compose.dev.yml"]
|
||||
},
|
||||
webhookToken: { type: String, required: true, unique: true, index: true },
|
||||
env: { type: String, required: true, enum: ["dev", "prod"] },
|
||||
port: { type: Number },
|
||||
lastDeployAt: { type: Date },
|
||||
lastStatus: { type: String, enum: ["idle", "running", "success", "failed"], default: "idle" },
|
||||
lastMessage: { type: String }
|
||||
},
|
||||
{ timestamps: true }
|
||||
);
|
||||
|
||||
DeploymentProjectSchema.index({ rootPath: 1 });
|
||||
|
||||
export const DeploymentProject = mongoose.model<DeploymentProjectDocument>(
|
||||
"DeploymentProject",
|
||||
DeploymentProjectSchema
|
||||
);
|
||||
Reference in New Issue
Block a user