1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
|
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
|
-
+
-
-
+
+
+
-
+
-
+
-
-
+
-
+
-
-
-
+
+
-
+
-
+
-
+
|
# infra
Infrastructure-as-code for `vps-nbg1` (Hetzner, Ubuntu 24.04 LTS, arm64).
This repo contains install scripts, config templates, and documentation for all
services running on the VPS. Each service is self-contained under its own directory
with idempotent install scripts.
---
## Services
``` pikchr
# Top band: Internet / Cloudflare
# Top band: Cloudflare in front of everything
right
CF: box "Cloudflare" color white fill 0x2a4a6b width 5.8 height 0.45 rad 4px
# VPS outline
VPS: box width 5.8 height 3.8 rad 8px at CF.s + (0, -2.35) fill 0xfafaf0
# VPS outline, drawn for the dark skin
VPS: box width 5.8 height 2.6 rad 8px at CF.s + (0, -1.3) fill 0x272a30 color 0x6b7079
text "vps-nbg1" small color 0xb3b8c0 at VPS.se + (-0.6, 0.18)
# Fossil stack (left third)
# Fossil stack (left)
down
CFD: box "cloudflared" color white fill 0x5b4a8a width 1.4 height 0.4 rad 4px \
at VPS.nw + (0.9, -0.5)
arrow from CFD.s down 0.15 color 0x888888
CDY: box "Caddy :8090" color white fill 0x5b4a8a width 1.4 height 0.4 rad 4px
arrow from CDY.s down 0.15 color 0x888888
FSL: box "Fossil :8081" color white fill 0x3a6b3a width 1.4 height 0.4 rad 4px
text "edgesync" small at FSL.s + (0, -0.18)
text "fossil.craftdesign.group" small color 0xb3b8c0 at FSL.s + (0, -0.2)
text "go-libfossil, infra" small at FSL.s + (0, -0.35)
# NATS stack (right third)
# NATS stack (right)
NT: box "nats-server :4222" color white fill 0x2a4a8a width 1.7 height 0.4 rad 4px \
at VPS.ne + (-1.0, -0.5)
arrow from NT.s down 0.15 color 0x888888
JS: box "JetStream" color white fill 0x2a4a8a width 1.7 height 0.4 rad 4px
arrow from JS.s down 0.15 color 0x888888
ES: box "EDGESYNC" fill 0xddeeff width 1.5 height 0.35 rad 4px at JS.s + (0, -0.38)
box "edgesync" color white fill 0x31353d width 1.7 height 0.4 rad 4px
box "GO_LIBFOSSIL" fill 0xddeeff width 1.5 height 0.35 rad 4px at ES.s + (0, -0.45)
# Coolify (centre)
box "Coolify :8000" fill 0xfff0cc width 1.4 height 0.4 rad 4px at VPS.n + (0, -0.7)
box "excalidraw" fill 0xfff0cc width 1.4 height 0.4 rad 4px at VPS.n + (0, -1.25)
box "Coolify :8000" color white fill 0x7a5a1a width 1.4 height 0.4 rad 4px at VPS.n + (0, -0.7)
box "excalidraw" color white fill 0x7a5a1a width 1.4 height 0.4 rad 4px at VPS.n + (0, -1.25)
# Arrows from Cloudflare down
# Edges from Cloudflare
arrow from CF.s + (-1.9, 0) down 0.1 color white thick
text "fossil." small at CF.s + (-1.9, -0.2)
text "fossil." small color 0xb3b8c0 at CF.s + (-1.9, -0.2)
arrow from CF.s + (1.9, 0) down 0.1 color white thick
text "sync. :4222" small at CF.s + (1.9, -0.2)
text "sync. :4222" small color 0xb3b8c0 at CF.s + (1.9, -0.2)
```
| Service | Directory | Endpoint |
|---------|-----------|---------|
| **NATS Server** | `nats/` | `tls://sync.craftdesign.group:4222` |
| Fossil SCM | *(managed separately)* | `https://fossil.craftdesign.group/` |
| Coolify | *(managed separately)* | `http://localhost:8000` |
|