6.2 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
Container based development flow (recommended and the easiest)
All you need is to intall Docker Engine 20.11+ on your local machine and run pnpm dev:container
. It will build the base image for Coolify and start the development server inside Docker. All required ports (3000, 3001) will be exposed to your host.
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
- Use container based development flow
- Or setup your workspace manually:
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.
Some packages, just
pack
are not installed in this way. You cannot test all the features. Please use the container based development flow.
Local Machine
At the moment, Coolify
doesn't support Windows
. You must useLinux
orMacOS
or consider using Gitpod or Github Codespaces.
Install all the prerequisites manually to your host system. If you would not like to install anything, I suggest to use the container based development flow.
- Due to the lock file, this repository is best with pnpm. I recommend you try and use
pnpm
because 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.template
toapps/api/.env.template
and set theCOOLIFY_APP_ID
environment variable to something cool. -
pnpm install
to install dependencies. -
pnpm db:push
to o create a local SQlite database.This will apply all migrations at
db/dev.db
. -
pnpm db:seed
seed the database. -
pnpm dev
start 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
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
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-compose
definitions.
See
startUmamiService()
function as example.
- At here, add the new start service process to
startService
function.
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
isAbsolute
variable with the suitable CSS classes, primarily for sizing and positioning.
- 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. For example, see other here.
Good job! 👏