AkurAI Build
Menu

Public repository / 2f952519db76ba7dd8b099a09ebda909d137ea5e

AkurAI-VPN / docs/deployment-vpn.olibuijr.com.md

Latest change 2f952519db76ba7dd8b099a09ebda909d137ea5e - feat: scaffold pure-Rust zero-dep AkurAI VPN workspace (v0.0.1) by Ólafur Búi Ólafsson

# AkurAI VPN — Deploying `vpn.olibuijr.com`

> Deployment plan for the control plane. **`vpn.olibuijr.com` did not resolve as
> of 2026-06-25** — DNS setup is still required, so TLS issuance will defer until
> the record exists. The only reachable VM today is `mail.olibuijr.com` (the
> AkurAI Mail EC2 instance, `us-east-1`).

## One-touch install (target UX)

```sh
curl -fsSL https://vpn.olibuijr.com/install.sh | sh
akurai-node up
```

## DNS

1. Create a DNS record for `vpn.olibuijr.com` (managed at 1984.is via the
   `1984dns` CLI, like the rest of `olibuijr.com`).
2. Decide whether it points at the existing `mail.olibuijr.com` EC2 box or a new
   dedicated VPN VM _(open question — see `protocol.md`)_.

## Security-group ports

| Port | Purpose |
|------|---------|
| `443/tcp` | control API, pairing UI, relay fallback, public ingress |
| UDP (TBD) | peer transport (exact port set with the transport decision) |
| UDP (optional) | STUN-like hole-punching, if not folded into peer transport |

## systemd units

Templates live in `systemd/`. Install to `/etc/systemd/system/` (or as
`--user` units), then `systemctl enable --now`:

- `akurai-control.service`
- `akurai-relay.service`
- `akurai-node.service`

State and config paths (per the plan):

| Path | Contents |
|------|----------|
| `/var/lib/akurai-vpn` | server state (peer map, allocations, audit log) |
| `/etc/akurai-vpn` | configuration |

## Deploy via `./deploy.sh`

`deploy.sh` gates (fmt + clippy + tests), bumps `VERSION` and the workspace
version in lockstep, cuts `CHANGELOG.md`, commits/tags/pushes, then publishes the
control plane to EC2 through the reusable `akurai-ec2` ops CLI:

```sh
akurai-ec2 deploy-binary akurai-vpn-control <musl-bin> 8096
akurai-ec2 nginx-proxy   vpn.olibuijr.com 8096
akurai-ec2 tls           vpn.olibuijr.com    # skips gracefully if DNS unresolved
```

`./deploy.sh ec2` re-publishes without a version bump. The control-plane binary
is built as a static `x86_64-unknown-linux-musl` target.

> Note: until `vpn.olibuijr.com` resolves, the `tls` step is expected to defer —
> run `akurai-ec2 tls vpn.olibuijr.com` again once the DNS record propagates.

## Status

0.0.1 — the control-plane HTTP listener is a stub (no server until the transport
decision lands), so a deploy ships a binary that prints status and exits. The
pipeline, units, and paths are in place for when the data plane exists.