mirror of
https://github.com/Dokploy/dokploy
synced 2025-06-26 18:27:59 +00:00
* feat: add schema for registry and routes * feat: add docker registry upload * feat: add show cluster * refactor: set the registry url in image in case we have a registry asociated * feat: add update registry and fix the docker url markup * chore: remove --advertise-ip on swarm script * refactor: remove listen address of swarm initialize * feat: add table to show nodes and add dropdown to add manager & workers * refactor: improve interface for cluster * refactor: improve UI * feat: add experimental swarm settings * refactor: remove comments * refactor: prettify json of each setting * refactor: add interface tooltip * refactor: delete static form self registry * refactor: allow to se a empty registry * fix: remove text area warnings * feat: add network swarm json * refactor: update ui * revert: go back to swarm init config * refactor: remove initialization on server, only on setup script * Update LICENSE.MD * feat: appearance theme support system config * refactor: remove logs * fix(README-ru): hyperlink-ed docs url * feat: (#107) webhook listener filter docker events based on image tag. Fixes #107 * refactor: simplify comparison docker tags * refactor: remove return in res status * refactor: prevent to updates download automatically * feat: support code editor (#105) * feat: support code editor * Update codeblock * refactor: remove unused class --------- Co-authored-by: Mauricio Siu <47042324+Siumauricio@users.noreply.github.com> * fix: select the right image from sourcetype (#109) * chore: bump minor version * fix: add redirect to https by default (#113) * Create FUNDING.yml * Docker compose support (#111) * feat(WIP): compose implementation * feat: add volumes, networks, services name hash generate * feat: add compose config test unique * feat: add tests for each unique config * feat: implement lodash for docker compose parsing * feat: add tests for generating compose file * refactor: implement logs docker compose * refactor: composeFile set not empty * feat: implement providers for compose deployments * feat: add Files volumes to compose * feat: add stop compose button * refactor: change strategie of building compose * feat: create .env file in composepath * refactor: simplify git and github function * chore: update deps * refactor: update migrations and add badge to recognize compose type * chore: update lock yaml * refactor: use code editor * feat: add monitoring for app types * refactor: reset stats on change appName * refactor: add option to clean monitoring folder * feat: show current command that will run * feat: add prefix * fix: add missing types * refactor: add docker provider and expose by default as false * refactor: customize error page * refactor: unified deployments to be a single one * feat: add vitest to ci/cd * revert: back to initial version * refactor: add maxconcurrency vitest * refactor: add pool forks to vitest * feat: add pocketbase template * fix: update path resolution compose * removed * feat: add template pocketbase * feat: add pocketbase template * feat: add support button * feat: add plausible template * feat: add calcom template * feat: add version to each template * feat: add code editor to enviroment variables and swarm settings json * refactor: add loader when download the image * fix: use base64 to generate keys plausible * feat: add recognized domain names by enviroment compose * refactor: show alert to redeploy in each card advanced tab * refactor: add validation to prevent create compose if not have permissions * chore: add templates section to contributing * chore: add example contributing * chore: add recomendation to show variables * chore: add video to contributing templates * chore: bump version --------- Co-authored-by: hehehai <riverhohai@gmail.com> Co-authored-by: Bayram Tagiev <bayram.tagiev.a@gmail.com> Co-authored-by: Paulo Santana <30875229+hikinine@users.noreply.github.com>
243 lines
6.5 KiB
Markdown
243 lines
6.5 KiB
Markdown
|
|
|
|
# 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
|
|
|
|
Before you craete a Pull Request, please make sure your commit message follows the [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) specification.
|
|
|
|
### Commit Message Format
|
|
```
|
|
<type>[optional scope]: <description>
|
|
|
|
[optional body]
|
|
|
|
[optional footer(s)]
|
|
```
|
|
|
|
#### Type
|
|
Must be one of the following:
|
|
|
|
* **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
|
|
|
|
Example:
|
|
```
|
|
feat: add new feature
|
|
```
|
|
|
|
|
|
|
|
|
|
## Setup
|
|
|
|
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.
|
|
|
|
```bash
|
|
git clone https://github.com/dokploy/dokploy.git
|
|
cd dokploy
|
|
pnpm install
|
|
cp .env.example .env
|
|
```
|
|
|
|
## Development
|
|
|
|
Is required to have **Docker** installed on your machine.
|
|
|
|
|
|
### Setup
|
|
|
|
Run the command that will spin up all the required services and files.
|
|
|
|
```bash
|
|
pnpm run setup
|
|
```
|
|
|
|
Now run the development server.
|
|
|
|
```bash
|
|
pnpm run dev
|
|
```
|
|
|
|
|
|
Go to http://localhost:3000 to see the development server
|
|
|
|
## Build
|
|
|
|
```bash
|
|
pnpm run build
|
|
```
|
|
|
|
## Docker
|
|
|
|
To build the docker image
|
|
```bash
|
|
pnpm run docker:build
|
|
```
|
|
|
|
To push the docker image
|
|
```bash
|
|
pnpm run docker:push
|
|
```
|
|
|
|
## Password Reset
|
|
|
|
In the case you lost your password, you can reset it using the following command
|
|
|
|
```bash
|
|
pnpm run reset-password
|
|
```
|
|
|
|
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.
|
|
|
|
Thank you for your contribution!
|
|
|
|
|
|
|
|
|
|
|
|
## 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:
|
|
4. When creating a pull request, please provide a video of the template working in action.
|
|
|
|
```typescript
|
|
// EXAMPLE
|
|
import {
|
|
generateHash,
|
|
generateRandomDomain,
|
|
type Template,
|
|
type Schema,
|
|
} from "../utils";
|
|
|
|
|
|
export function generate(schema: Schema): Template {
|
|
|
|
// do your stuff here, like create a new domain, generate random passwords, mounts.
|
|
const mainServiceHash = generateHash(schema.projectName);
|
|
const randomDomain = generateRandomDomain(schema);
|
|
const secretBase = generateBase64(64);
|
|
const toptKeyBase = generateBase64(32);
|
|
|
|
const envs = [
|
|
// If you want to show a domain in the UI, please add the prefix _HOST at the end of the variable name.
|
|
`PLAUSIBLE_HOST=${randomDomain}`,
|
|
"PLAUSIBLE_PORT=8000",
|
|
`BASE_URL=http://${randomDomain}`,
|
|
`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,
|
|
};
|
|
}
|
|
```
|
|
|
|
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
|
|
- Use the same name of the folder as the id of the template.
|
|
- The logo should be in the public folder.
|
|
- If you want to show a domain in the UI, please add the prefix _HOST at the end of the variable name.
|
|
- Test first on a vps or a server to make sure the template works.
|
|
|