Native install
Install deeplo under systemd and run your first deploy.
Prerequisites:
- A Linux host with systemd
- At least one remote host running Docker with the Compose plugin
- SSH access to those remote hosts
sudoon the host
Install
curl -fsSL https://deeplo.xyz/install.sh | shThe script installs the binary, creates a service user and deploy key, and installs the systemd unit.
The installer also accepts:
--build: compile from a local source checkout--version vX.Y.Z: pin a specific release--force: reinstall even if already up to date
Edit the config
Open the config with deeplo config edit and replace the example values with your own:
hosts:
- name: web-1
address: 10.0.0.10 # your host IP or hostname
deploy_dir: /srv/apps
repos:
- name: myapp
url: git@github.com:yourorg/myapp.git
branch: main
projects:
- name: myapp
repo: myapp
repo_subdir: deploy # directory in repo containing compose.yml
persist_files:
- .env
targets:
- web-1The deploy directory is rebuilt each time
Each deploy rebuilds the project's remote directory from the commit and replaces the previous contents. A file that lives only on the host (a token you copied in, a runtime-generated file) won't survive the next deploy unless you persist it:
- Keep specific files by listing them in
persist_files(defaults to[".env"],[]keeps nothing). - Store data in a Docker named volume or a bind mount outside the deploy directory.
Then validate it:
deeplo config checkSee Config file for the full schema.
Authorize the deploy key
Open the env file with deeplo env edit and confirm DEEPLO_SSH_USER matches your deploy user. If you need to create one, see the deploy user. Then install the deploy key on each target:
deeplo authorize # all configured hosts, prompts for each host's passwordThis authorizes the daemon to SSH into each configured host with its configured user and port.
To do it manually, append the contents of /etc/deeplo/keys/deploy_key.pub to ~/.ssh/authorized_keys for the deploy user on each target.
The daemon uses the same key to fetch your repos over SSH. For private repos, grant that key read access. On GitHub, for example, you can add deploy_key.pub as a read-only deploy key.
Start the daemon
deeplo service enable --now # start now, and on every boot
deeplo health # confirm it's running and reachableOn start, the daemon reconciles your config and deploys every configured project at its current commit, so your first deploy begins right away.
Watch the first deploy
Follow it in the logs:
deeplo service logs -fThen check the result:
deeplo deploys state # latest state per project-host
deeplo deploys history # recent runs
deeplo deploys logs <run-id> # log for a run (id from history)To see all available commands, use deeplo --help or browse the CLI reference.
Next steps
Triggers
Webhook, poll, and hybrid trigger modes
Repository layout
How to lay out a repo and its compose files
Upgrading
deeplo update # install the latest release
deeplo update --version v0.2.1 # or pin a specific versionIt downloads the new binary and restarts the daemon if it was running. In-flight deploys get up to DEEPLO_SHUTDOWN_GRACE (default 30s) to finish first.
Uninstalling
deeplo uninstall # remove the binary and systemd service, keep config and data
deeplo uninstall --purge # also remove config, data, and the deeplo user/groupBoth options leave your target hosts untouched. Deployed app directories and the deploy key in each host's ~/.ssh/authorized_keys stay in place. Remove them manually if you no longer need them.