2024-04-28 23:57:52 -06:00
# Contributing
Hey, thanks for your interest in contributing to Dokploy! We appreciate your help and taking your time to contribute.
Before you start, please first discuss the feature/bug you want to add with the owners and comunity via github issues.
We have a few guidelines to follow when contributing to this project:
- [Commit Convention ](#commit-convention )
- [Setup ](#setup )
- [Development ](#development )
- [Build ](#build )
- [Pull Request ](#pull-request )
## Commit Convention
2024-07-29 23:08:23 -06:00
Before you create a Pull Request, please make sure your commit message follows the [Conventional Commits ](https://www.conventionalcommits.org/en/v1.0.0/ ) specification.
2024-04-28 23:57:52 -06:00
### Commit Message Format
2024-07-29 23:08:23 -06:00
2024-04-28 23:57:52 -06:00
```
<type>[optional scope]: <description>
[optional body]
[optional footer(s)]
```
#### Type
2024-07-29 23:08:23 -06:00
2024-04-28 23:57:52 -06:00
Must be one of the following:
2024-07-29 23:08:23 -06:00
- **feat**: A new feature
- **fix**: A bug fix
- **docs**: Documentation only changes
- **style**: Changes that do not affect the meaning of the code (white-space, formatting, missing semi-colons, etc)
- **refactor**: A code change that neither fixes a bug nor adds a feature
- **perf**: A code change that improves performance
- **test**: Adding missing tests or correcting existing tests
- **build**: Changes that affect the build system or external dependencies (example scopes: gulp, broccoli, npm)
- **ci**: Changes to our CI configuration files and scripts (example scopes: Travis, Circle, BrowserStack, SauceLabs)
- **chore**: Other changes that don't modify `src` or `test` files
- **revert**: Reverts a previous commit
2024-04-28 23:57:52 -06:00
Example:
2024-07-29 23:08:23 -06:00
2024-04-28 23:57:52 -06:00
```
feat: add new feature
```
## Setup
2024-05-01 20:00:03 -06:00
Before you start, please make the clone based on the `canary` branch, since the `main` branch is the source of truth and should always reflect the latest stable release, also the PRs will be merged to the `canary` branch.
2024-04-28 23:57:52 -06:00
``` bash
git clone https://github.com/dokploy/dokploy.git
cd dokploy
2024-05-01 00:04:20 -06:00
pnpm install
2024-07-29 23:08:23 -06:00
cp apps/dokploy/.env.example apps/dokploy/.env
2024-04-28 23:57:52 -06:00
```
## Development
Is required to have **Docker ** installed on your machine.
2024-05-01 00:04:20 -06:00
### Setup
2024-05-01 01:29:35 -06:00
Run the command that will spin up all the required services and files.
2024-05-01 00:04:20 -06:00
``` bash
2024-07-29 23:08:23 -06:00
pnpm run dokploy:setup
2024-05-01 00:04:20 -06:00
```
2024-10-25 00:21:12 -06:00
Run this script
``` bash
pnpm run server:script
```
2024-05-01 00:04:20 -06:00
Now run the development server.
``` bash
2024-07-29 23:08:23 -06:00
pnpm run dokploy:dev
2024-05-01 00:04:20 -06:00
```
2024-04-28 23:57:52 -06:00
Go to http://localhost:3000 to see the development server
## Build
``` bash
2024-07-29 23:08:23 -06:00
pnpm run dokploy:build
2024-04-28 23:57:52 -06:00
```
## Docker
To build the docker image
2024-07-29 23:08:23 -06:00
2024-04-28 23:57:52 -06:00
``` bash
2024-05-01 00:04:20 -06:00
pnpm run docker:build
2024-04-28 23:57:52 -06:00
```
To push the docker image
2024-07-29 23:08:23 -06:00
2024-04-28 23:57:52 -06:00
``` bash
2024-05-01 00:04:20 -06:00
pnpm run docker:push
2024-04-28 23:57:52 -06:00
```
## Password Reset
In the case you lost your password, you can reset it using the following command
``` bash
2024-05-11 16:58:55 +08:00
pnpm run reset-password
2024-04-28 23:57:52 -06:00
```
If you want to test the webhooks on development mode using localtunnel, make sure to install `localtunnel`
``` bash
bunx lt --port 3000
```
If you run into permission issues of docker run the following command
``` bash
sudo chown -R USERNAME dokploy or sudo chown -R $( whoami) ~/.docker
```
## Application deploy
In case you want to deploy the application on your machine and you selected nixpacks or buildpacks, you need to install first.
``` bash
# Install Nixpacks
curl -sSL https://nixpacks.com/install.sh -o install.sh \
&& chmod +x install.sh \
&& ./install.sh
```
``` bash
# Install Buildpacks
curl -sSL "https://github.com/buildpacks/pack/releases/download/v0.32.1/pack-v0.32.1-linux.tgz" | tar -C /usr/local/bin/ --no-same-owner -xzv pack
```
## Pull Request
- The `main` branch is the source of truth and should always reflect the latest stable release.
- Create a new branch for each feature or bug fix.
- Make sure to add tests for your changes.
- Make sure to update the documentation for any changes Go to the [docs.dokploy.com ](https://docs.dokploy.com ) website to see the changes.
- When creating a pull request, please provide a clear and concise description of the changes made.
- If you include a video or screenshot, would be awesome so we can see the changes in action.
- If your pull request fixes an open issue, please reference the issue in the pull request description.
- Once your pull request is merged, you will be automatically added as a contributor to the project.
2024-05-11 16:58:55 +08:00
Thank you for your contribution!
2024-06-02 15:26:28 -06:00
## Templates
To add a new template, go to `templates` folder and create a new folder with the name of the template.
Let's take the example of `plausible` template.
1. create a folder in `templates/plausible`
2. create a `docker-compose.yml` file inside the folder with the content of compose.
3. create a `index.ts` file inside the folder with the following code as base:
2024-06-02 20:47:24 -06:00
4. When creating a pull request, please provide a video of the template working in action.
2024-06-02 15:26:28 -06:00
``` typescript
// EXAMPLE
import {
2024-07-29 23:08:23 -06:00
generateHash ,
generateRandomDomain ,
type Template ,
type Schema ,
2024-08-18 19:49:17 -06:00
type DomainSchema ,
2024-06-02 15:26:28 -06:00
} from "../utils" ;
export function generate ( schema : Schema ) : Template {
2024-07-29 23:08:23 -06:00
// do your stuff here, like create a new domain, generate random passwords, mounts.
const mainServiceHash = generateHash ( schema . projectName ) ;
2024-08-18 19:49:17 -06:00
const mainDomain = generateRandomDomain ( schema ) ;
2024-07-29 23:08:23 -06:00
const secretBase = generateBase64 ( 64 ) ;
const toptKeyBase = generateBase64 ( 32 ) ;
2024-08-18 19:49:17 -06:00
const domains : DomainSchema [ ] = [
{
host : mainDomain ,
port : 8000 ,
serviceName : "plausible" ,
} ,
] ;
2024-07-29 23:08:23 -06:00
const envs = [
2024-08-18 19:49:17 -06:00
` BASE_URL=http:// ${ mainDomain } ` ,
2024-07-29 23:08:23 -06:00
` SECRET_KEY_BASE= ${ secretBase } ` ,
` TOTP_VAULT_KEY= ${ toptKeyBase } ` ,
` HASH= ${ mainServiceHash } ` ,
] ;
const mounts : Template [ "mounts" ] = [
{
mountPath : "./clickhouse/clickhouse-config.xml" ,
content : ` some content...... ` ,
} ,
] ;
return {
envs ,
mounts ,
2024-08-18 19:49:17 -06:00
domains ,
2024-07-29 23:08:23 -06:00
} ;
2024-06-02 15:26:28 -06:00
}
```
4. Now you need to add the information about the template to the `templates/templates.ts` is a object with the following properties:
**Make sure the id of the template is the same as the folder name and don't have any spaces, only slugified names and lowercase. **
``` typescript
{
id : "plausible" ,
name : "Plausible" ,
version : "v2.1.0" ,
description :
"Plausible is a open source, self-hosted web analytics platform that lets you track website traffic and user behavior." ,
logo : "plausible.svg" , // we defined the name and the extension of the logo
links : {
github : "https://github.com/plausible/plausible" ,
website : "https://plausible.io/" ,
docs : "https://plausible.io/docs" ,
} ,
tags : [ "analytics" ] ,
load : ( ) = > import ( "./plausible/index" ) . then ( ( m ) = > m . generate ) ,
} ,
```
5. Add the logo or image of the template to `public/templates/plausible.svg`
### Recomendations
2024-07-29 23:08:23 -06:00
2024-06-02 15:26:28 -06:00
- Use the same name of the folder as the id of the template.
- The logo should be in the public folder.
2024-07-29 23:08:23 -06:00
- If you want to show a domain in the UI, please add the prefix \_HOST at the end of the variable name.
2024-06-02 15:26:28 -06:00
- Test first on a vps or a server to make sure the template works.
2024-10-27 22:22:39 -06:00
## Docs & Website
2024-07-29 23:08:23 -06:00
2024-10-27 22:22:39 -06:00
To contribute to the Dokploy docs or website, please go to this [repository ](https://github.com/Dokploy/website ).
2024-07-29 23:08:23 -06:00