generator client { provider = "prisma-client-js" binaryTargets = ["native", "linux-musl"] } datasource db { provider = "sqlite" url = env("COOLIFY_DATABASE_URL") } model Setting { id String @id @default(cuid()) fqdn String? @unique isRegistrationEnabled Boolean @default(false) dualCerts Boolean @default(false) minPort Int @default(9000) maxPort Int @default(9100) proxyPassword String proxyUser String proxyHash String? isAutoUpdateEnabled Boolean @default(false) isDNSCheckEnabled Boolean @default(true) isTraefikUsed Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model User { id String @id @unique @default(cuid()) email String @unique type String password String? teams Team[] permission Permission[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Permission { id String @id @default(cuid()) user User @relation(fields: [userId], references: [id]) userId String team Team @relation(fields: [teamId], references: [id]) teamId String permission String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Team { id String @id @default(cuid()) users User[] name String? applications Application[] gitSources GitSource[] gitHubApps GithubApp[] gitLabApps GitlabApp[] destinationDocker DestinationDocker[] permissions Permission[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt database Database[] @relation(references: [id]) databaseId String? service Service[] @relation(references: [id]) serviceId String? } model TeamInvitation { id String @id @default(cuid()) uid String email String teamId String teamName String permission String createdAt DateTime @default(now()) } model Application { id String @id @default(cuid()) name String fqdn String? @unique repository String? configHash String? branch String? buildPack String? projectId Int? port Int? exposePort Int? installCommand String? buildCommand String? startCommand String? baseDirectory String? publishDirectory String? deploymentType String? phpModules String? pythonWSGI String? pythonModule String? pythonVariable String? dockerFileLocation String? denoMainFile String? denoOptions String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt settings ApplicationSettings? teams Team[] destinationDockerId String? destinationDocker DestinationDocker? @relation(fields: [destinationDockerId], references: [id]) gitSourceId String? gitSource GitSource? @relation(fields: [gitSourceId], references: [id]) secrets Secret[] persistentStorage ApplicationPersistentStorage[] baseImage String? baseBuildImage String? } model ApplicationSettings { id String @id @default(cuid()) application Application @relation(fields: [applicationId], references: [id]) applicationId String @unique dualCerts Boolean @default(false) debug Boolean @default(false) previews Boolean @default(false) autodeploy Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model ApplicationPersistentStorage { id String @id @default(cuid()) application Application @relation(fields: [applicationId], references: [id]) applicationId String path String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@unique([applicationId, path]) } model ServicePersistentStorage { id String @id @default(cuid()) service Service @relation(fields: [serviceId], references: [id]) serviceId String path String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt @@unique([serviceId, path]) } model Secret { id String @id @default(cuid()) name String value String isPRMRSecret Boolean @default(false) isBuildSecret Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt application Application @relation(fields: [applicationId], references: [id]) applicationId String @@unique([name, applicationId, isPRMRSecret]) } model ServiceSecret { id String @id @default(cuid()) name String value String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) serviceId String @@unique([name, serviceId]) } model BuildLog { id String @id @default(cuid()) applicationId String? buildId String line String time Int } model Build { id String @id @default(cuid()) type String applicationId String? destinationDockerId String? gitSourceId String? githubAppId String? gitlabAppId String? commit String? branch String? status String? @default("queued") createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model DestinationDocker { id String @id @default(cuid()) network String @unique name String engine String remoteEngine Boolean @default(false) isCoolifyProxyUsed Boolean? @default(false) teams Team[] application Application[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt database Database[] service Service[] } model GitSource { id String @id @default(cuid()) name String teams Team[] type String? apiUrl String? htmlUrl String? customPort Int @default(22) organization String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt githubAppId String? @unique githubApp GithubApp? @relation(fields: [githubAppId], references: [id]) application Application[] gitlabAppId String? @unique gitlabApp GitlabApp? @relation(fields: [gitlabAppId], references: [id]) } model GithubApp { id String @id @default(cuid()) name String? @unique teams Team[] appId Int? installationId Int? clientId String? clientSecret String? webhookSecret String? privateKey String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt gitSource GitSource? } model GitlabApp { id String @id @default(cuid()) oauthId Int @unique groupName String? @unique teams Team[] deployKeyId Int? privateSshKey String? publicSshKey String? webhookToken String? appId String? appSecret String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt gitSource GitSource? } model Database { id String @id @default(cuid()) name String publicPort Int? defaultDatabase String? type String? version String? dbUser String? dbUserPassword String? rootUser String? rootUserPassword String? settings DatabaseSettings? destinationDocker DestinationDocker? @relation(fields: [destinationDockerId], references: [id]) destinationDockerId String? teams Team[] createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model DatabaseSettings { id String @id @default(cuid()) database Database @relation(fields: [databaseId], references: [id]) databaseId String @unique isPublic Boolean @default(false) appendOnly Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Service { id String @id @default(cuid()) name String fqdn String? exposePort Int? dualCerts Boolean @default(false) type String? version String? teams Team[] destinationDockerId String? destinationDocker DestinationDocker? @relation(fields: [destinationDockerId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt plausibleAnalytics PlausibleAnalytics? minio Minio? vscodeserver Vscodeserver? wordpress Wordpress? ghost Ghost? serviceSecret ServiceSecret[] meiliSearch MeiliSearch? persistentStorage ServicePersistentStorage[] umami Umami? hasura Hasura? fider Fider? moodle Moodle? } model PlausibleAnalytics { id String @id @default(cuid()) email String? username String? password String postgresqlUser String postgresqlPassword String postgresqlDatabase String postgresqlPublicPort Int? secretKeyBase String? scriptName String @default("plausible.js") serviceId String @unique service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Minio { id String @id @default(cuid()) rootUser String rootUserPassword String publicPort Int? apiFqdn String? serviceId String @unique service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Vscodeserver { id String @id @default(cuid()) password String serviceId String @unique service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Wordpress { id String @id @default(cuid()) extraConfig String? tablePrefix String? ownMysql Boolean @default(false) mysqlHost String? mysqlPort Int? mysqlUser String mysqlPassword String mysqlRootUser String mysqlRootUserPassword String mysqlDatabase String? mysqlPublicPort Int? ftpEnabled Boolean @default(false) ftpUser String? ftpPassword String? ftpPublicPort Int? ftpHostKey String? ftpHostKeyPrivate String? serviceId String @unique service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Ghost { id String @id @default(cuid()) defaultEmail String defaultPassword String mariadbUser String mariadbPassword String mariadbRootUser String mariadbRootUserPassword String mariadbDatabase String? mariadbPublicPort Int? serviceId String @unique service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model MeiliSearch { id String @id @default(cuid()) masterKey String serviceId String @unique service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Umami { id String @id @default(cuid()) serviceId String @unique postgresqlUser String postgresqlPassword String postgresqlDatabase String postgresqlPublicPort Int? umamiAdminPassword String hashSalt String service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Hasura { id String @id @default(cuid()) serviceId String @unique postgresqlUser String postgresqlPassword String postgresqlDatabase String postgresqlPublicPort Int? graphQLAdminPassword String service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Fider { id String @id @default(cuid()) serviceId String @unique postgresqlUser String postgresqlPassword String postgresqlDatabase String postgresqlPublicPort Int? jwtSecret String emailNoreply String? emailMailgunApiKey String? emailMailgunDomain String? emailMailgunRegion String @default("EU") emailSmtpHost String? emailSmtpPort Int? emailSmtpUser String? emailSmtpPassword String? emailSmtpEnableStartTls Boolean @default(false) service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt } model Moodle { id String @id @default(cuid()) serviceId String @unique defaultUsername String defaultPassword String defaultEmail String mariadbUser String mariadbPassword String mariadbRootUser String mariadbRootUserPassword String mariadbDatabase String mariadbPublicPort Int? service Service @relation(fields: [serviceId], references: [id]) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt }