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) DNSServers String? isTraefikUsed Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt ipv4 String? ipv6 String? arch String? } model User { id String @id @unique @default(cuid()) email String @unique type String password String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt permission Permission[] teams Team[] } model Permission { id String @id @default(cuid()) userId String teamId String permission String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt team Team @relation(fields: [teamId], references: [id]) user User @relation(fields: [userId], references: [id]) } model Team { id String @id @default(cuid()) name String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt databaseId String? serviceId String? permissions Permission[] sshKey SshKey[] applications Application[] database Database[] destinationDocker DestinationDocker[] gitSources GitSource[] gitHubApps GithubApp[] gitLabApps GitlabApp[] service Service[] users User[] } 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? 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 destinationDockerId String? gitSourceId String? baseImage String? baseBuildImage String? gitSource GitSource? @relation(fields: [gitSourceId], references: [id]) destinationDocker DestinationDocker? @relation(fields: [destinationDockerId], references: [id]) persistentStorage ApplicationPersistentStorage[] settings ApplicationSettings? secrets Secret[] teams Team[] } model ApplicationSettings { id String @id @default(cuid()) applicationId String @unique dualCerts Boolean @default(false) debug Boolean @default(false) previews Boolean @default(false) autodeploy Boolean @default(true) isBot Boolean @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt application Application @relation(fields: [applicationId], references: [id]) } model ApplicationPersistentStorage { id String @id @default(cuid()) applicationId String path String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt application Application @relation(fields: [applicationId], references: [id]) @@unique([applicationId, path]) } model ServicePersistentStorage { id String @id @default(cuid()) serviceId String path String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) @@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 applicationId String application Application @relation(fields: [applicationId], references: [id]) @@unique([name, applicationId, isPRMRSecret]) } model ServiceSecret { id String @id @default(cuid()) name String value String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt serviceId String service Service @relation(fields: [serviceId], references: [id]) @@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) remoteIpAddress String? remoteUser String? remotePort Int? remoteVerified Boolean @default(false) isCoolifyProxyUsed Boolean? @default(false) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt sshKeyId String? sshKey SshKey? @relation(fields: [sshKeyId], references: [id]) sshLocalPort Int? application Application[] database Database[] service Service[] teams Team[] } model SshKey { id String @id @default(cuid()) name String privateKey String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt teamId String? team Team? @relation(fields: [teamId], references: [id]) destinationDocker DestinationDocker[] } model GitSource { id String @id @default(cuid()) name String type String? apiUrl String? htmlUrl String? customPort Int @default(22) organization String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt githubAppId String? @unique gitlabAppId String? @unique gitlabApp GitlabApp? @relation(fields: [gitlabAppId], references: [id]) githubApp GithubApp? @relation(fields: [githubAppId], references: [id]) application Application[] teams Team[] } model GithubApp { id String @id @default(cuid()) name String? @unique appId Int? installationId Int? clientId String? clientSecret String? webhookSecret String? privateKey String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt gitSource GitSource? teams Team[] } model GitlabApp { id String @id @default(cuid()) oauthId Int @unique groupName String? @unique deployKeyId Int? privateSshKey String? publicSshKey String? webhookToken String? appId String? appSecret String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt gitSource GitSource? teams Team[] } 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? destinationDockerId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt destinationDocker DestinationDocker? @relation(fields: [destinationDockerId], references: [id]) settings DatabaseSettings? teams Team[] } model DatabaseSettings { id String @id @default(cuid()) databaseId String @unique isPublic Boolean @default(false) appendOnly Boolean @default(true) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt database Database @relation(fields: [databaseId], references: [id]) } model Service { id String @id @default(cuid()) name String fqdn String? exposePort Int? dualCerts Boolean @default(false) type String? version String? destinationDockerId String? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt destinationDocker DestinationDocker? @relation(fields: [destinationDockerId], references: [id]) fider Fider? ghost Ghost? hasura Hasura? meiliSearch MeiliSearch? minio Minio? moodle Moodle? plausibleAnalytics PlausibleAnalytics? persistentStorage ServicePersistentStorage[] serviceSecret ServiceSecret[] umami Umami? vscodeserver Vscodeserver? wordpress Wordpress? appwrite Appwrite? teams Team[] } 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 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } model Minio { id String @id @default(cuid()) rootUser String rootUserPassword String publicPort Int? apiFqdn String? serviceId String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } model Vscodeserver { id String @id @default(cuid()) password String serviceId String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } 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 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } 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 createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } model MeiliSearch { id String @id @default(cuid()) masterKey String serviceId String @unique createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } model Umami { id String @id @default(cuid()) serviceId String @unique postgresqlUser String postgresqlPassword String postgresqlDatabase String postgresqlPublicPort Int? umamiAdminPassword String hashSalt String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } model Hasura { id String @id @default(cuid()) serviceId String @unique postgresqlUser String postgresqlPassword String postgresqlDatabase String postgresqlPublicPort Int? graphQLAdminPassword String createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } 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) createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } 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? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) } model Appwrite { id String @id @default(cuid()) serviceId String @unique opensslKeyV1 String executorSecret String redisPassword String mariadbHost String? mariadbPort Int @default(3306) mariadbUser String mariadbPassword String mariadbRootUser String mariadbRootUserPassword String mariadbDatabase String mariadbPublicPort Int? createdAt DateTime @default(now()) updatedAt DateTime @updatedAt service Service @relation(fields: [serviceId], references: [id]) }