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