Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
29 changes: 29 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ Dokploy CLI is a powerful and versatile command-line tool designed to remotely m

- [Installation](#installation)
- [Usage](#usage)
- [Project Configuration](#project-configuration)
- [Commands](#commands)
- [Authentication](#authentication)
- [Project Management](#project-management)
Expand Down Expand Up @@ -44,6 +45,34 @@ USAGE
...
```

## Project Configuration

You can create a `.dokploy.json` file in any project directory to set default values for project, environment, and application. This lets you skip interactive prompts when running commands.

```sh-session
$ cd ~/my-app
$ dokploy init
```

This walks you through selecting a project, environment, and (optionally) an application, then writes a `.dokploy.json` file:

```json
{
"projectId": "abc123",
"environmentId": "def456",
"applicationId": "ghi789"
}
```

Now commands run from that directory (or any subdirectory) will use these defaults automatically:

```sh-session
$ dokploy app deploy -y # deploys the configured application
$ dokploy env pull .env.local # pulls env vars without prompts
```

Flags passed on the command line always take priority over `.dokploy.json` values.

## Commands

### Authentication
Expand Down
5 changes: 5 additions & 0 deletions src/commands/app/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -6,6 +6,7 @@ import inquirer from "inquirer";
import { type Project, getProjects } from "../../utils/shared.js";
import { slugify } from "../../utils/slug.js";
import { readAuthConfig } from "../../utils/utils.js";
import { readLocalConfig } from "../../utils/local-config.js";

export interface Answers {
project: Project;
Expand Down Expand Up @@ -53,6 +54,10 @@ export default class AppCreate extends Command {
const { flags } = await this.parse(AppCreate);
let { projectId, environmentId, name, description, appName } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !name || !appName) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
6 changes: 6 additions & 0 deletions src/commands/app/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import inquirer from "inquirer";

import { getProject, getProjects, type Application } from "../../utils/shared.js";
import { readAuthConfig } from "../../utils/utils.js";
import { readLocalConfig } from "../../utils/local-config.js";
import type { Answers } from "./create.js";

export default class AppDelete extends Command {
Expand Down Expand Up @@ -43,6 +44,11 @@ export default class AppDelete extends Command {
const { flags } = await this.parse(AppDelete);
let { projectId, environmentId, applicationId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;
if (!applicationId && localConfig.applicationId) applicationId = localConfig.applicationId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !applicationId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
6 changes: 6 additions & 0 deletions src/commands/app/deploy.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import chalk from "chalk";
import { getProject, getProjects, type Application } from "../../utils/shared.js";
import inquirer from "inquirer";
import type { Answers } from "./create.js";
import { readLocalConfig } from "../../utils/local-config.js";
import axios from "axios";

export default class AppDeploy extends Command {
Expand Down Expand Up @@ -43,6 +44,11 @@ export default class AppDeploy extends Command {
const { flags } = await this.parse(AppDeploy);
let { projectId, applicationId, environmentId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;
if (!applicationId && localConfig.applicationId) applicationId = localConfig.applicationId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !applicationId || !environmentId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
6 changes: 6 additions & 0 deletions src/commands/app/stop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import chalk from "chalk";
import inquirer from "inquirer";
import { getProject, getProjects, type Application } from "../../utils/shared.js";
import type { Answers } from "./create.js";
import { readLocalConfig } from "../../utils/local-config.js";
import axios from "axios";

export default class AppStop extends Command {
Expand Down Expand Up @@ -39,6 +40,11 @@ export default class AppStop extends Command {
const { flags } = await this.parse(AppStop);
let { projectId, environmentId, applicationId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;
if (!applicationId && localConfig.applicationId) applicationId = localConfig.applicationId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !applicationId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mariadb/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import axios from "axios";
import chalk from "chalk";
import inquirer from "inquirer";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import { getProjects, type Database } from "../../../utils/shared.js";
import { slugify } from "../../../utils/slug.js";
import type { Answers } from "../../app/create.js";
Expand Down Expand Up @@ -80,6 +81,10 @@ export default class DatabaseMariadbCreate extends Command {
appName
} = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !name || !databaseName || !appName) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mariadb/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import inquirer from "inquirer";

import { getProject, getProjects, type Database } from "../../../utils/shared.js";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";

export default class DatabaseMariadbDelete extends Command {
static description = "Delete a MariaDB database from a project.";
Expand Down Expand Up @@ -40,6 +41,10 @@ export default class DatabaseMariadbDelete extends Command {
const { flags } = await this.parse(DatabaseMariadbDelete);
let { projectId, environmentId, mariadbId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

if (!projectId || !environmentId || !mariadbId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
const projects = await getProjects(auth, this);
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mariadb/deploy.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Command, Flags } from "@oclif/core";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import chalk from "chalk";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";
import inquirer from "inquirer";
Expand Down Expand Up @@ -39,6 +40,10 @@ export default class DatabaseMariadbDeploy extends Command {
const { flags } = await this.parse(DatabaseMariadbDeploy);
let { projectId, environmentId, mariadbId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mariadbId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mariadb/stop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import inquirer from "inquirer";
import axios from "axios";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import type { Answers } from "../../app/create.js";

export default class DatabaseMariadbStop extends Command {
Expand Down Expand Up @@ -39,6 +40,10 @@ export default class DatabaseMariadbStop extends Command {
const { flags } = await this.parse(DatabaseMariadbStop);
let { projectId, environmentId, mariadbId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mariadbId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mongo/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import axios from "axios";
import chalk from "chalk";
import inquirer from "inquirer";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import { getProjects, type Database } from "../../../utils/shared.js";
import { slugify } from "../../../utils/slug.js";
import type { Answers } from "../../app/create.js";
Expand Down Expand Up @@ -75,6 +76,10 @@ export default class DatabaseMongoCreate extends Command {
appName
} = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !name || !databaseName || !appName || !databasePassword) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mongo/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import chalk from "chalk";
import inquirer from "inquirer";

import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";

export default class DatabaseMongoDelete extends Command {
Expand Down Expand Up @@ -42,6 +43,10 @@ export default class DatabaseMongoDelete extends Command {
const { flags } = await this.parse(DatabaseMongoDelete);
let { projectId, environmentId, mongoId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mongoId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mongo/deploy.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Command, Flags } from "@oclif/core";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import chalk from "chalk";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";
import inquirer from "inquirer";
Expand Down Expand Up @@ -39,6 +40,10 @@ export default class DatabaseMongoDeploy extends Command {
const { flags } = await this.parse(DatabaseMongoDeploy);
let { projectId, environmentId, mongoId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mongoId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mongo/stop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import inquirer from "inquirer";
import axios from "axios";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import type { Answers } from "../../app/create.js";

export default class DatabaseMongoStop extends Command {
Expand Down Expand Up @@ -39,6 +40,10 @@ export default class DatabaseMongoStop extends Command {
const { flags } = await this.parse(DatabaseMongoStop);
let { projectId, environmentId, mongoId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mongoId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
7 changes: 6 additions & 1 deletion src/commands/database/mysql/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import inquirer from "inquirer";

import { slugify } from "../../../utils/slug.js";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import { getProjects, type Database } from "../../../utils/shared.js";
import type { Answers } from "../../app/create.js";

Expand Down Expand Up @@ -81,7 +82,11 @@ export default class DatabaseMysqlCreate extends Command {
appName
} = flags;

// Modo interactivo si no se proporcionan los flags necesarios
const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !name || !databaseName || !appName || !databasePassword || !databaseRootPassword) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
const projects = await getProjects(auth, this);
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mysql/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import chalk from "chalk";
import inquirer from "inquirer";

import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";

export default class DatabaseMysqlDelete extends Command {
Expand Down Expand Up @@ -42,6 +43,10 @@ export default class DatabaseMysqlDelete extends Command {
const { flags } = await this.parse(DatabaseMysqlDelete);
let { projectId, environmentId, mysqlId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mysqlId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mysql/deploy.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { Command, Flags } from "@oclif/core";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import chalk from "chalk";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";
import inquirer from "inquirer";
Expand Down Expand Up @@ -39,6 +40,10 @@ export default class DatabaseMysqlDeploy extends Command {
const { flags } = await this.parse(DatabaseMysqlDeploy);
let { projectId, environmentId, mysqlId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mysqlId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/mysql/stop.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import inquirer from "inquirer";
import axios from "axios";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import type { Answers } from "../../app/create.js";

export default class DatabaseMysqlStop extends Command {
Expand Down Expand Up @@ -39,6 +40,10 @@ export default class DatabaseMysqlStop extends Command {
const { flags } = await this.parse(DatabaseMysqlStop);
let { projectId, environmentId, mysqlId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !mysqlId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/postgres/create.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import chalk from "chalk";
import inquirer from "inquirer";
import { slugify } from "../../../utils/slug.js";
import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import { getProjects, type Database } from "../../../utils/shared.js";
import type { Answers } from "../../app/create.js";
export default class DatabasePostgresCreate extends Command {
Expand Down Expand Up @@ -74,6 +75,10 @@ export default class DatabasePostgresCreate extends Command {
appName
} = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !name || !databaseName || !appName || !databasePassword) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
5 changes: 5 additions & 0 deletions src/commands/database/postgres/delete.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import chalk from "chalk";
import inquirer from "inquirer";

import { readAuthConfig } from "../../../utils/utils.js";
import { readLocalConfig } from "../../../utils/local-config.js";
import { getProject, getProjects, type Database } from "../../../utils/shared.js";

export default class DatabasePostgresDelete extends Command {
Expand Down Expand Up @@ -42,6 +43,10 @@ export default class DatabasePostgresDelete extends Command {
const { flags } = await this.parse(DatabasePostgresDelete);
let { projectId, environmentId, postgresId } = flags;

const localConfig = readLocalConfig();
if (!projectId && localConfig.projectId) projectId = localConfig.projectId;
if (!environmentId && localConfig.environmentId) environmentId = localConfig.environmentId;

// Modo interactivo si no se proporcionan los flags necesarios
if (!projectId || !environmentId || !postgresId) {
console.log(chalk.blue.bold("\n Listing all Projects \n"));
Expand Down
Loading