coolify 项目代码结构


coolify 是基于svelte kit 开发的,项目结构遵循了svelte kit 的布局以及开发模式

参考集成模式

构建说明

coolify 使用了js 的不少新特性,推荐使用node 16 以及以上版本,不然运行会有问题

关于svelte kit 的一些说明

svelte kit 使用了类似react next 的开发模式,支持服务端以及客户端处理,对于路由包含了
两类(page以及endpoint)page 是以.svelte 结尾的,如果是.js 以及.ts 就做为endpoint (同时需要暴露为handler)
svelte kit 包含了一个潜在的约定,比如我们开发的模块会放到lib 目录下,为了方便使用我们可以基于别名进行引用

coolify 模块结构

  • 参考目录结构
    实际上与next 的套路类似,文件夹的划分与支持的功能模块是一致的
 
├── app.d.ts
├── app.html
├── hooks.ts
├── lib
│   ├── api.ts
│   ├── buildPacks
│   │   ├── common.ts
│   │   ├── docker.ts
│   │   ├── gatsby.ts
│   │   ├── index.ts
│   │   ├── nestjs.ts
│   │   ├── nextjs.ts
│   │   ├── node.ts
│   │   ├── nuxtjs.ts
│   │   ├── php.ts
│   │   ├── python.ts
│   │   ├── react.ts
│   │   ├── rust.ts
│   │   ├── static.ts
│   │   ├── svelte.ts
│   │   └── vuejs.ts
│   ├── common.ts
│   ├── components
│   │   ├── CopyPasswordField.svelte
│   │   ├── DatabaseLinks.svelte
│   │   ├── DeleteIcon.svelte
│   │   ├── Explainer.svelte
│   │   ├── Loading.svelte
│   │   ├── ServiceLinks.svelte
│   │   ├── Setting.svelte
│   │   ├── common.ts
│   │   ├── svg
│   │   │   ├── applications
│   │   │   │   ├── Astro.svelte
│   │   │   │   ├── Docker.svelte
│   │   │   │   ├── Eleventy.svelte
│   │   │   │   ├── Gatsby.svelte
│   │   │   │   ├── Nestjs.svelte
│   │   │   │   ├── Nextjs.svelte
│   │   │   │   ├── Nodejs.svelte
│   │   │   │   ├── Nuxtjs.svelte
│   │   │   │   ├── PHP.svelte
│   │   │   │   ├── Python.svelte
│   │   │   │   ├── React.svelte
│   │   │   │   ├── Rust.svelte
│   │   │   │   ├── Static.svelte
│   │   │   │   ├── Svelte.svelte
│   │   │   │   └── Vuejs.svelte
│   │   │   ├── databases
│   │   │   │   ├── Clickhouse.svelte
│   │   │   │   ├── CouchDB.svelte
│   │   │   │   ├── MongoDB.svelte
│   │   │   │   ├── MySQL.svelte
│   │   │   │   ├── PostgreSQL.svelte
│   │   │   │   └── Redis.svelte
│   │   │   └── services
│   │   │       ├── Ghost.svelte
│   │   │       ├── LanguageTool.svelte
│   │   │       ├── MeiliSearch.svelte
│   │   │       ├── MinIO.svelte
│   │   │       ├── N8n.svelte
│   │   │       ├── NocoDB.svelte
│   │   │       ├── PlausibleAnalytics.svelte
│   │   │       ├── UptimeKuma.svelte
│   │   │       ├── VSCodeServer.svelte
│   │   │       ├── VaultWarden.svelte
│   │   │       └── Wordpress.svelte
│   │   └── templates.ts
│   ├── crypto.ts
│   ├── database
│   │   ├── applications.ts
│   │   ├── checks.ts
│   │   ├── common.ts
│   │   ├── databases.ts
│   │   ├── destinations.ts
│   │   ├── gitSources.ts
│   │   ├── github.ts
│   │   ├── gitlab.ts
│   │   ├── index.ts
│   │   ├── logs.ts
│   │   ├── secrets.ts
│   │   ├── services.ts
│   │   ├── settings.ts
│   │   ├── teams.ts
│   │   └── users.ts
│   ├── dayjs.ts
│   ├── docker.ts
│   ├── form.ts
│   ├── haproxy
│   │   ├── configuration.ts
│   │   └── index.ts
│   ├── importers
│   │   ├── github.ts
│   │   ├── gitlab.ts
│   │   └── index.ts
│   ├── letsencrypt
│   │   └── index.ts
│   ├── queues
│   │   ├── builder.ts
│   │   ├── cleanup.ts
│   │   ├── index.ts
│   │   ├── logger.ts
│   │   ├── proxy.ts
│   │   ├── ssl.ts
│   │   └── sslrenewal.ts
│   ├── settings.ts
│   ├── store.ts
│   └── types
│       └── composeFile.ts
├── routes
│   ├── __error.svelte
│   ├── __layout.svelte
│   ├── applications
│   │   ├── [id]
│   │   │   ├── __layout.svelte
│   │   │   ├── check.json.ts
│   │   │   ├── configuration
│   │   │   │   ├── _BuildPack.svelte
│   │   │   │   ├── _GithubRepositories.svelte
│   │   │   │   ├── _GitlabRepositories.svelte
│   │   │   │   ├── buildpack.json.ts
│   │   │   │   ├── buildpack.svelte
│   │   │   │   ├── deploykey.json.ts
│   │   │   │   ├── destination.json.ts
│   │   │   │   ├── destination.svelte
│   │   │   │   ├── githubToken.json.ts
│   │   │   │   ├── repository.json.ts
│   │   │   │   ├── repository.svelte
│   │   │   │   ├── source.json.ts
│   │   │   │   ├── source.svelte
│   │   │   │   └── sshkey.json.ts
│   │   │   ├── delete.json.ts
│   │   │   ├── deploy.json.ts
│   │   │   ├── index.json.ts
│   │   │   ├── index.svelte
│   │   │   ├── logs
│   │   │   │   ├── _Loading.svelte
│   │   │   │   ├── build
│   │   │   │   │   ├── _BuildLog.svelte
│   │   │   │   │   ├── build.json.ts
│   │   │   │   │   ├── index.json.ts
│   │   │   │   │   └── index.svelte
│   │   │   │   ├── index.json.ts
│   │   │   │   └── index.svelte
│   │   │   ├── previews
│   │   │   │   ├── index.json.ts
│   │   │   │   └── index.svelte
│   │   │   ├── secrets
│   │   │   │   ├── _BatchSecrets.svelte
│   │   │   │   ├── _Secret.svelte
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── index.svelte
│   │   │   │   └── utils.ts
│   │   │   ├── settings.json.ts
│   │   │   ├── stop.json.ts
│   │   │   └── storage
│   │   │       ├── _Storage.svelte
│   │   │       ├── index.json.ts
│   │   │       └── index.svelte
│   │   ├── index.svelte
│   │   ├── index.ts
│   │   └── new.ts
│   ├── common
│   │   └── getUniqueName.json.ts
│   ├── dashboard.json.ts
│   ├── databases
│   │   ├── [id]
│   │   │   ├── _Databases
│   │   │   │   ├── _CouchDb.svelte
│   │   │   │   ├── _Databases.svelte
│   │   │   │   ├── _MongoDB.svelte
│   │   │   │   ├── _MySQL.svelte
│   │   │   │   ├── _PostgreSQL.svelte
│   │   │   │   └── _Redis.svelte
│   │   │   ├── __layout.svelte
│   │   │   ├── configuration
│   │   │   │   ├── destination.json.ts
│   │   │   │   ├── destination.svelte
│   │   │   │   ├── type.json.ts
│   │   │   │   ├── type.svelte
│   │   │   │   ├── version.json.ts
│   │   │   │   └── version.svelte
│   │   │   ├── delete.json.ts
│   │   │   ├── index.json.ts
│   │   │   ├── index.svelte
│   │   │   ├── settings.json.ts
│   │   │   ├── start.json.ts
│   │   │   └── stop.json.ts
│   │   ├── index.svelte
│   │   ├── index.ts
│   │   └── new.ts
│   ├── destinations
│   │   ├── [id]
│   │   │   ├── _FoundApp.svelte
│   │   │   ├── _LocalDocker.svelte
│   │   │   ├── _RemoteDocker.svelte
│   │   │   ├── __layout.svelte
│   │   │   ├── index.json.ts
│   │   │   ├── index.svelte
│   │   │   ├── restart.json.ts
│   │   │   ├── scan.json.ts
│   │   │   ├── settings.json.ts
│   │   │   ├── start.json.ts
│   │   │   └── stop.json.ts
│   │   ├── index.json.ts
│   │   └── index.svelte
│   ├── iam
│   │   ├── index.json.ts
│   │   ├── index.svelte
│   │   ├── password.json.ts
│   │   └── team
│   │       └── [id]
│   │           ├── __layout.svelte
│   │           ├── index.json.ts
│   │           ├── index.svelte
│   │           ├── invitation
│   │           │   ├── accept.json.ts
│   │           │   ├── invite.json.ts
│   │           │   └── revoke.json.ts
│   │           ├── permission
│   │           │   └── change.json.ts
│   │           └── remove
│   │               └── user.json.ts
│   ├── index.svelte
│   ├── login
│   │   ├── index.json.ts
│   │   └── index.svelte
│   ├── logout
│   │   └── index.json.ts
│   ├── new
│   │   ├── destination
│   │   │   ├── _LocalDocker.svelte
│   │   │   ├── _RemoteDocker.svelte
│   │   │   ├── check.json.ts
│   │   │   ├── docker.json.ts
│   │   │   └── index.svelte
│   │   └── team
│   │       ├── index.json.ts
│   │       └── index.svelte
│   ├── register
│   │   ├── index.svelte
│   │   └── index.ts
│   ├── reset
│   │   ├── index.json.ts
│   │   ├── index.svelte
│   │   └── password.json.ts
│   ├── services
│   │   ├── [id]
│   │   │   ├── _Services
│   │   │   │   ├── _Ghost.svelte
│   │   │   │   ├── _MeiliSearch.svelte
│   │   │   │   ├── _MinIO.svelte
│   │   │   │   ├── _PlausibleAnalytics.svelte
│   │   │   │   ├── _Services.svelte
│   │   │   │   ├── _VSCodeServer.svelte
│   │   │   │   └── _Wordpress.svelte
│   │   │   ├── __layout.svelte
│   │   │   ├── check.json.ts
│   │   │   ├── configuration
│   │   │   │   ├── destination.json.ts
│   │   │   │   ├── destination.svelte
│   │   │   │   ├── type.json.ts
│   │   │   │   ├── type.svelte
│   │   │   │   ├── version.json.ts
│   │   │   │   └── version.svelte
│   │   │   ├── delete.json.ts
│   │   │   ├── ghost
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── index.json.ts
│   │   │   ├── index.svelte
│   │   │   ├── languagetool
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── meilisearch
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── minio
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── n8n
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── nocodb
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── plausibleanalytics
│   │   │   │   ├── activate.json.ts
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── secrets
│   │   │   │   ├── _Secret.svelte
│   │   │   │   ├── index.json.ts
│   │   │   │   └── index.svelte
│   │   │   ├── settings.json.ts
│   │   │   ├── uptimekuma
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── vaultwarden
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   ├── vscodeserver
│   │   │   │   ├── index.json.ts
│   │   │   │   ├── start.json.ts
│   │   │   │   └── stop.json.ts
│   │   │   └── wordpress
│   │   │       ├── index.json.ts
│   │   │       ├── settings.json.ts
│   │   │       ├── start.json.ts
│   │   │       └── stop.json.ts
│   │   ├── index.svelte
│   │   ├── index.ts
│   │   └── new.ts
│   ├── settings
│   │   ├── check.json.ts
│   │   ├── index.json.ts
│   │   └── index.svelte
│   ├── sources
│   │   ├── [id]
│   │   │   ├── _Github.svelte
│   │   │   ├── _Gitlab.svelte
│   │   │   ├── __layout.svelte
│   │   │   ├── check.json.ts
│   │   │   ├── github.json.ts
│   │   │   ├── gitlab.json.ts
│   │   │   ├── index.json.ts
│   │   │   ├── index.svelte
│   │   │   └── newGithubApp.svelte
│   │   ├── index.json.ts
│   │   ├── index.svelte
│   │   └── new.ts
│   ├── undead.json.ts
│   ├── update.json.ts
│   └── webhooks
│       ├── github
│       │   ├── events.ts
│       │   ├── index.ts
│       │   └── install.ts
│       ├── gitlab
│       │   ├── events.ts
│       │   └── index.ts
│       └── success
│           └── index.svelte
└── tailwind.css

说明

coolify 代码结构还是很简单的,属于一个中规中矩的svelte kit 项目结构,后续会从源码上分析下实现机制

参考资料

https://github.com/coollabsio/coolify
https://kit.svelte.dev/
https://kit.svelte.dev/docs/introduction
https://kit.svelte.dev/docs/routing
https://kit.svelte.dev/docs/types#sveltejs-kit-requesthandler