diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index 52c6d91d4..3825ddaf3 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -53,69 +53,5 @@ ## Technical skills required - **Database ORM**: [Prisma.io](https://www.prisma.io/) - **Docker Engine API** -## Add a new service -### Which service is eligable to add to Coolify? -The following statements needs to be true: - -- Self-hostable -- Open-source -- Maintained (I do not want to add software full of bugs) - -### Create Prisma / Database schema for the new service. -All data that needs to be persist for a service should be saved to the database in `cleartext` or `encrypted`. - -very password/api key/passphrase needs to be encrypted. If you are not sure, whether it should be encrypted or not, just encrypt it. - -Update Prisma schema in [src/apps/api/prisma/schema.prisma](https://github.com/coollabsio/coolify/blob/main/apps/api/prisma/schema.prisma). - -- Add new model with the new service name. -- Make a relationship with `Service` model. -- In the `Service` model, the name of the new field should be with low-capital. -- If the service needs a database, define a `publicPort` field to be able to make it's database public, example field name in case of PostgreSQL: `postgresqlPublicPort`. It should be a optional field. - -Once done, create Prisma schema with `pnpm db:push`. -> You may also need to restart `Typescript Language Server` in your IDE to get the new types. - -### Add available versions - -Versions are hardcoded into Coolify at the moment and based on Docker image tags. -- Update `supportedServiceTypesAndVersions` function [here](apps/api/src/lib/services/supportedVersions.ts) - -### Include the new service in queries - -At [here](apps/api/src/lib/services/common.ts) in `includeServices` function add the new table name, so it will be included in all places in the database queries where it is required. - -### Define auto-generated fields - -At [here](apps/api/src/lib/services/common.ts) in `configureServiceType` function add the initial auto-generated details such as password, users etc, and the encryption process of secrets (if applicable). - -### Define input field details - -At [here](apps/api/src/lib/services/serviceFields.ts) add details about the input fields shown in the UI, so every component (API/UI) will know what to do with the values (decrypt/show it by default/readonly/etc). - -### Define the start process - -- At [here](apps/api/src/lib/services/handlers.ts), define how the service should start. It could be complex and based on `docker-compose` definitions. - -> See `startUmamiService()` function as example. - -- At [here](apps/api/src/routes/api/v1/services/handlers.ts), add the new start service process to `startService` function. - -### Define the deletion process - -[Here](apps/api/src/lib/services/common.ts) in `removeService` add the database deletion process. - -### Custom logo - -- At [here](apps/ui/src/lib/components/svg/services) add the service custom log as a Svelte component and export it [here](apps/ui/src/lib/components/svg/services/index.ts). - -> SVG is recommended, but you can use PNG as well. It should have the `isAbsolute` variable with the suitable CSS classes, primarily for sizing and positioning. - -- At [here](apps/ui/src/routes/services/[id]/_ServiceLinks.svelte) add links to the documentation of the service. - -### Custom fields on the UI -By default the URL and name are shown on the UI. Everything else needs to be added [here](apps/ui/src/lib/components/Services) - -> If you need to show more details on the frontend, such as users/passwords, you need to add Svelte component [here](apps/ui/src/lib/components/Services). For example, see other [here](apps/ui/src/lib/components/Services/Umami.svelte). - -Good job! 👏 \ No newline at end of file +## How to add a new service? +You can find all details [here](https://github.com/coollabsio/coolify-community-templates) \ No newline at end of file