5.6 KiB
Contribution
First, thanks for considering to contribute to my project. It really means a lot! :)
You can ask for guidance anytime on our Discord server in the #contribution channel.
Setup your development environment
Github codespaces
If you have github codespaces enabled then you can just create a codespace and run pnpm dev to run your the dev environment. All the required dependencies and packages has been configured for you already.
Gitpod
If you have a Gitpod, you can just create a workspace from this repository, run pnpm install && pnpm db:push && pnpm db:seed and then pnpm dev. All the required dependencies and packages has been configured for you already.
Local Machine
At the moment, Coolify
doesn't support Windows. You must useLinuxorMacOSor consider using Gitpod or Github Codespaces.
-
Due to the lock file, this repository is best with pnpm. I recommend you try and use
pnpmbecause it is cool and efficient! -
You need to have Docker Engine installed locally.
-
You need to have Docker Compose Plugin installed locally.
-
You need to have GIT LFS Support installed locally.
Optional:
- To test Heroku buildpacks, you need pack binary installed locally.
Inside a Docker container
WIP
Setup Coolify
-
Copy
apps/api/.env.templatetoapps/api/.env.templateand set theCOOLIFY_APP_IDenvironment variable to something cool. -
pnpm installto install dependencies. -
pnpm db:pushto o create a local SQlite database.This will apply all migrations at
db/dev.db. -
pnpm db:seedseed the database. -
pnpm devstart coding.
Technical skills required
- Languages: Node.js / Javascript / Typescript
- Framework JS/TS: SvelteKit & Fastify
- Database ORM: 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.
- Add new model with the new service name.
- Make a relationship with
Servicemodel. - In the
Servicemodel, the name of the new field should be with low-capital. - If the service needs a database, define a
publicPortfield 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 Serverin 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
supportedServiceTypesAndVersionsfunction here
Include the new service in queries
At here 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 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 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, define how the service should start. It could be complex and based on
docker-composedefinitions.
See
startUmamiService()function as example.
- At here, add the new start service process to
startServicefunction.
Define the deletion process
Here in removeService add the database deletion process.
Custom logo
SVG is recommended, but you can use PNG as well. It should have the
isAbsolutevariable with the suitable CSS classes, primarily for sizing and positioning.
-
At here include the new logo with
isAbsoluteproperty. -
At here 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
If you need to show more details on the frontend, such as users/passwords, you need to add Svelte component here with an underscore. For example, see other here.
Good job! 👏