Usage

To use Caprover API in a project:

from caprover_api import caprover_api

cap = caprover_api.CaproverAPI(
    dashboard_url="cap-dashboard-url",
    password="cap-dashboard-password"
)

One Click Apps

get app name from List of one-click-apps

automated deploy:

app_variables = {
    "$$cap_redis_password": "REDIS-PASSWORD-HERE"
}
cap.deploy_one_click_app(
    one_click_app_name='redis',
    namespace='new-app',
    app_variables=app_variables,
    automated=True
)

manual deploy (you will be asked to enter required variables during runtime):

cap.deploy_one_click_app(
    one_click_app_name='redis',
    namespace='new-app',
)

Custom Apps

create a new app:

cap.create_app(
    app_name="new-app",
    has_persistent_data=False
)

deploy app from docker hub:

# app must already exists
cap.deploy_app(
    app_name="new-app",
    image_name='redis:5'
)

App CRUD (Create, Update, Delete)

add domain to an existing app:

cap.add_domain(
    app_name="new-app",
    custom_domain="my-app.example.com"
)

enable ssl:

cap.enable_ssl(
    app_name='new-app',
    custom_domain='my-app.example.com'
)

add environment variables to app:

environment_variables = {
    "key1": "val1",
    "key2": "val2"
}
cap.update_app(
    app_name='new-app',
    environment_variables=environment_variables
)

add environment variables and volumes to app:

environment_variables = {
    "key1": "val1",
    "key2": "val2"
}
persistent_directories = [
    "volumeName:/pathInApp",
    "volumeNameTwo:/pathTwoInApp"
]
cap.update_app(
    app_name='new-app',
    environment_variables=environment_variables,
    persistent_directories=persistent_directories
)

add environment variables and volumes to app:

environment_variables = {
    "key1": "val1",
    "key2": "val2"
}
persistent_directories = [
    "volumeName:/pathInApp",
    "volumeNameTwo:/pathTwoInApp"
]
port_mapping = [
    "serverPort:containerPort",
]
cap.update_app(
    app_name='new-app',
    environment_variables=environment_variables,
    persistent_directories=persistent_directories,
    port_mapping=port_mapping
)

create app and add custom domain:

cap.create_and_update_app(
    app_name="new-app",
    has_persistent_data=False,
    custom_domain="my-app.example.com"
)

create app with custom domain and enable ssl:

cap.create_and_update_app(
    app_name="new-app",
    has_persistent_data=False,
    custom_domain="my-app.example.com",
    enable_ssl=True
)

create app and deploy redis from docker hub:

cap.create_and_update_app(
    app_name="new-app",
    has_persistent_data=False,
    image_name='redis:5',
    persistent_directories=['new-app-redis-data:/data', ]
)

delete an app:

cap.delete_app(app_name="new-app")

delete an app and it’s volumes:

cap.delete_app(
    app_name="new-app", delete_volumes=True
)

delete apps matching regex pattern (with confirmation):

cap.delete_app_matching_pattern(
    app_name_pattern=".*new-app.*",
    delete_volumes=True
)

delete apps matching regex pattern (☠️ without confirmation):

cap.delete_app_matching_pattern(
    app_name_pattern=".*new-app.*",
    delete_volumes=True,
    automated=True
)

stop an app temporarily:

cap.stop_app(app_name="new-app")

start a temporarily stopped app:

cap.update_app(app_name="new-app", instance_count=1)

scale app to 3 instances:

cap.update_app(app_name="new-app", instance_count=3)

Backup

Create a backup of CapRover configs in order to be able to spin up a clone of this server. Note that your application data (volumes, and images) are not part of this backup. This backup only includes the server configuration details, such as root domains, app names, SSL certs and etc.:

cap.create_backup()

You can pass an optional file_name, the default file name is {captain_namespace}-bck-%Y-%m-%d %H:%M:%S.rar