Skip to content

Commit 957e807

Browse files
authored
Merge pull request #2 from outhaul-dev/feat/remote-installer
Remote installer: curl | sh bootstrap for a fresh Debian VPS
2 parents 4581265 + 2af0ae7 commit 957e807

25 files changed

Lines changed: 2933 additions & 156 deletions

‎.github/workflows/installer.yml‎

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
name: installer
2+
on:
3+
push:
4+
paths: [deploy/**, .github/workflows/installer.yml]
5+
pull_request:
6+
paths: [deploy/**]
7+
jobs:
8+
lint-and-unit:
9+
runs-on: ubuntu-latest
10+
steps:
11+
- uses: actions/checkout@v4
12+
- name: shellcheck
13+
run: shellcheck -s sh --severity=warning deploy/bootstrap.sh deploy/test/*.sh
14+
- name: unit tests
15+
run: sh deploy/test/run.sh

‎README.md‎

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,15 @@ go build -o outhaul . && ./outhaul serve
2727
# → open the one-time setup URL it prints, create the admin account, deploy.
2828
```
2929

30+
## Install on a fresh Debian VPS
31+
32+
curl -fsSL https://outhaul.sh/install | sh
33+
34+
The installer walks you through ingress (Let's Encrypt or Cloudflare Tunnel),
35+
opens the right firewall ports (keeping SSH), builds from source, and prints a
36+
one-time setup URL. Developers with a local checkout can run
37+
`sudo sh deploy/bootstrap.sh --from-checkout .`.
38+
3039
## Features
3140

3241
### Deploy straight from Git
@@ -88,22 +97,27 @@ below, which sets up a dedicated user and a systemd unit.
8897
> warning at the top. The installer sets up a long-running systemd service, so
8998
> only point it at a box you're happy to wipe.
9099
91-
Don't run Outhaul as root. From a checkout on the server:
100+
Don't run Outhaul as root. On the server:
92101

93102
```sh
94-
git clone https://github.com/outhaul-dev/outhaul && cd outhaul
95-
sudo deploy/install.sh
103+
curl -fsSL https://outhaul.sh/install | sh
96104
```
97105

98-
The installer needs root once (systemd required; Ubuntu/Debian/Fedora/RHEL/
99-
openSUSE). Each step is skipped when already done, so it is safe to re-run —
100-
and a re-run after `git pull` upgrades the binary and restarts the service.
101-
It:
106+
That fetches [`deploy/bootstrap.sh`](deploy/bootstrap.sh) and runs it under
107+
`sh`. From a checkout, run `sudo sh deploy/bootstrap.sh --from-checkout .`
108+
instead — useful for testing local changes to the installer or app.
109+
110+
The installer needs root once (systemd required; V1 targets Debian, prompting
111+
before continuing on anything else). Each step is skipped when already
112+
done, so it is safe to re-run — and a re-run upgrades the binary and restarts
113+
the service. It:
102114

103115
- installs **Docker** (via get.docker.com), **git**, and **nixpacks** if missing;
104116
- creates an `outhaul` **system user** (no login shell, home `/var/lib/outhaul`)
105117
in the `docker` group;
106-
- builds the binary if needed and installs it to `/usr/local/bin/outhaul`;
118+
- walks you through ingress — Let's Encrypt, Cloudflare Tunnel, or local-only —
119+
and opens the right firewall ports, always keeping SSH reachable;
120+
- builds the binary from source and installs it to `/usr/local/bin/outhaul`;
107121
- writes `/etc/outhaul.env` (put `OUTHAUL_*` overrides there — ACME email,
108122
public URL) and installs and starts `outhaul.service`
109123
([deploy/outhaul.service](deploy/outhaul.service)).

0 commit comments

Comments
 (0)