Quickstart
Install deeplo and run your first deploy in minutes.
Prerequisites:
- A Linux host with systemd to run
deeploon - At least one remote host running Docker with
docker compose - SSH access to those remote hosts
sudoon the host
1. Run the installer
curl -fsSL https://raw.githubusercontent.com/jancernik/deeplo/main/scripts/install.sh | bashThe 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 --buildTo install a specific version:
bash scripts/install.sh --version v0.2.1Binary source precedence: DEEPLO_LOCAL_BIN env > --build > download release.
What it does:
- Downloads and installs the
deeplobinary to/usr/local/bin - Creates a
deeplosystem 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.ymland/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-1Check /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 hostValidate your config (no daemon needed):
deeplo checkExpected:
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 healthExpected:
Service: running
Enabled: yes
Socket: present
Daemon: reachable
Version: v0.1.0
Uptime: 5sIf 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
- Triggers — webhook, poll, and hybrid in depth
- Bootstrap config — all
DEEPLO_*env vars - Configuration reference — full YAML schema
- Security — SSH trust model, key setup, network exposure
- Installation — manual install without the script
- Run with Docker — Docker Compose install