# VM Services

VM public IP: 45.77.142.43. Caddy config: `/etc/caddy/Caddyfile`. Back up the file, run `caddy validate`, then `systemctl reload caddy`. DNS for `*.archivedpiece.com` resolves to this VM, and Caddy obtains Let's Encrypt certificates automatically.

## Subdomain and port map
| Subdomain | Upstream port | Auth | Notes |
|---|---|---|---|
| archivedpiece.com | 8787 | none | |
| trader.archivedpiece.com | 8765 | basic auth | Port 8765 is reserved. Do not reuse it. |
| pump.archivedpiece.com | 8766 | basic auth | |
| higgsfield.archivedpiece.com | 3000 | basic auth | |
| shorts.archivedpiece.com | 8790 | basic auth | |
| clippyme.archivedpiece.com | 5175 | basic auth | |
| obsidian.archivedpiece.com | 3002 (HTTPS) | basic auth | Docker container `obsidian` |
| videos.archivedpiece.com | 8769 | none (public) | Static server for `/root/workspace/ytshorts/output` |

Check `ss -ltnp` for a free port before adding a new service.

## Caveats
- The `videos` file server is a background `python3 -m http.server` process. It is not a systemd service, so it does not survive a reboot.
- Login credentials are stored outside the vault and are never copied here.
