deeplo
Guides

Quickstart

Install deeplo and run your first deploy in minutes.

Prerequisites:

  • A Linux host with systemd to run deeplo on
  • At least one remote host running Docker with docker compose
  • SSH access to those remote hosts
  • sudo on the host

1. Run the installer

curl -fsSL https://raw.githubusercontent.com/jancernik/deeplo/main/scripts/install.sh | bash

The script runs as your current user. It will prompt for your sudo password once before starting the privileged steps (installing the binary, creating the system user, writing to /etc and /var/lib, installing the systemd unit). All the unprivileged work — downloading the binary, generating the deploy key — happens before that prompt.

To build from source instead of downloading a release binary (requires Go toolchain, run from repo root):

bash scripts/install.sh --build

To install a specific version:

bash scripts/install.sh --version v0.2.1

Binary source precedence: DEEPLO_LOCAL_BIN env > --build > download release.

What it does:

  • Downloads and installs the deeplo binary to /usr/local/bin
  • Creates a deeplo system user
  • Creates /etc/deeplo/keys/, /var/lib/deeplo/
  • Generates a deploy key at /etc/deeplo/keys/deploy_key
  • Installs a systemd unit (deeplo.service) and enables it
  • Creates starter files at /etc/deeplo/config.yml and /etc/deeplo/deeplo.env

After install, the script prints the exact next steps for your machine.


2. Edit the config

Open /etc/deeplo/config.yml and replace the example values with your own:

version: 1

hosts:
  - name: web-1
    address: 10.0.0.10           # your host IP or hostname
    remote_base_dir: /srv/apps

repos:
  - name: myapp
    url: git@github.com:yourorg/myapp.git
    branch: main
    trigger_mode: webhook        # or: poll, hybrid

projects:
  - name: myapp
    repo: myapp
    repo_subdir: deploy          # directory in repo containing compose.yml
    targets:
      - web-1

Check /etc/deeplo/deeplo.env and confirm DEEPLO_SSH_USER matches the deploy user on your target hosts.

Then authorize the deploy key on each target:

sudo cat /etc/deeplo/keys/deploy_key.pub
# Append this line to ~/.ssh/authorized_keys on each target host

Validate your config (no daemon needed):

deeplo check

Expected:

Config OK: /etc/deeplo/config.yml (version 1, 1 host(s), 1 repo(s), 1 project(s))

3. Start the daemon

deeplo service start
deeplo health

Expected:

Service:  running
Enabled:  yes
Socket:   present
Daemon:   reachable
Version:  v0.1.0
Uptime:   5s

If you're using trigger_mode: webhook, point GitHub at http://your-host:8080/webhooks/github (Settings → Webhooks → Add webhook). For setups behind NAT or without inbound connectivity, use trigger_mode: poll instead.


What's next

On this page