+7
-2
.env.yaml
+7
-2
.env.yaml
···
1
1
DOCKER_USER: ENC[AES256_GCM,data:eg6enZA=,iv:Zx73u8oHotkMPbnm/gdT+3V/6hSuJx2/3os9M2ls0k8=,tag:d4Tz73i/CGAURCKXP7d/Yw==,type:str]
2
2
DOCKER_TOKEN: ENC[AES256_GCM,data:xnGW4Hw3rBmtnB1+wAbej8bXidP6FuhhwFGKgpx4WrPT6ogP,iv:pHWBn/lMjgqmQxlKgUdIRexhm5LBPXkn22D2SJD9xb0=,tag:KvZzTPWLFDDniPupFhq8Yg==,type:str]
3
+
KNOT_SERVER_HOSTNAME: ENC[AES256_GCM,data:xyRDW6QThNuXj1mXIL0xPGM3,iv:UlGD2vG/U+23KVsQYpOn4kjsx8a/Y/vDXr2FUvLcyVg=,tag:L/pG9XcbP0sBfQfTUNUAtA==,type:str]
4
+
KNOT_SERVER_OWNER: ENC[AES256_GCM,data:wFbHTDCs+lRbOABGnx2l0cdy5B392t21iKZED6oLkwE=,iv:VP0a7l0DWi3k0+bd8PJMiA4V8X6HQABP45T1eO+v42c=,tag:vejsQDOl89/tLOplioTF8g==,type:str]
5
+
SPINDLE_SERVER_HOSTNAME: ENC[AES256_GCM,data:H3F78ApdXkkFxfs/fes9CF5q,iv:PqdklQul4wQAakj2oXdPm0L6qPxr/oyvqp2tp8S/CR0=,tag:09RqxAA7WhsEMgXjhBYzJw==,type:str]
6
+
SPINDLE_SERVER_OWNER: ENC[AES256_GCM,data:uszll56Z0eBfSpDuvfgMrb3mu1yOZI+WY1wwCBTGVow=,iv:T2nvpm9DJCcGmyxi5CREUA8uhCpHJ98RILtSTmKoDe8=,tag:6Vln4+FQAxyUkI+v9wo8Cw==,type:str]
7
+
CADDY_EMAIL: ENC[AES256_GCM,data:7/JJPvOmBAo5DYvLAoJLX4j2ZHJuWBRuPaZ/9VxQ5i8=,iv:SR7QnY7BPdo4XoPgL0PEXpm8jomvTXHz8GnLf5/PWyY=,tag:MOndV6f9DjO/4IbaVjqhpg==,type:str]
3
8
sops:
4
9
age:
5
10
- recipient: age1tw3hs5xhr28dq2dklfptftf0rl322cl9p9pe9yjrkkt4md2gtays772qjt
···
11
16
cjA3NXZOQUhwc01EVmdPdjYxd2FkTVUKSvzexBtylIyQCUPVBqThkL0yah37T9/I
12
17
RDPl3vsdvcMpN0TKCVwn7P3W+7vciT86wq+6haG1fT1AFqAXCEDaiQ==
13
18
-----END AGE ENCRYPTED FILE-----
14
-
lastmodified: "2025-11-21T11:54:33Z"
15
-
mac: ENC[AES256_GCM,data:/VodMi4mmtc/TJn37PkyaQs6SYy6pQmfQbA6wvV2Uk+mWLuMT7rYc5D1a41eQfCzV0MDcp2TadUeX5R49BLOgMcmbW9bNXk8QwESpFiT1bPviV3+NpSooZiXING36NOFP4UxsNYJI1zyqC6p5fX6P83Df097WrJfv07+2HaSh8g=,iv:EkNWQeS+Nwi2SIiDL8AazmSxNFJGvgRxuf0NfazrH0g=,tag:oPH3gOe2l2c6dA1sMHE30g==,type:str]
19
+
lastmodified: "2025-11-21T12:59:06Z"
20
+
mac: ENC[AES256_GCM,data:rY3LACsar6udfC7FIGCJY87rDC+SY6JbNLLKcGBG5kLaH9gIqwHALwC1+VcfGJ5RyPYQdx7+agk4zhLifdWO7vKpk8DzAm1Xt3eMOJIiLKVUGM+Ny9JnzVsyYYkGYTnbreN1eTGGfOCs7sTfQ1H0yjNOemYTy1bMTzhsYa/cya4=,iv:zP5yJZX8b+5bIRSzpp/WXuM5u9j4aw6Rw5UcYx/1lIA=,tag:9IFLjTw4xFgdM2xg3E7sPQ==,type:str]
16
21
unencrypted_suffix: _unencrypted
17
22
version: 3.10.2
+54
compose.yml
+54
compose.yml
···
1
+
name: tangled
2
+
services:
3
+
knot:
4
+
image: tubbo/knot:latest
5
+
restart: always
6
+
build:
7
+
target: knot
8
+
ports:
9
+
- 2222:22
10
+
environment:
11
+
- KNOT_SERVER_HOSTNAME
12
+
- KNOT_SERVER_OWNER
13
+
volumes:
14
+
- knot_repos:/home/git/repositories
15
+
- knot_data:/var/lib/tangled
16
+
- knot_keys:/etc/ssh/keys
17
+
spindle:
18
+
image: tubbo/spindle:latest
19
+
restart: always
20
+
build:
21
+
target: spindle
22
+
environment:
23
+
- SPINDLE_SERVER_HOSTNAME
24
+
- SPINDLE_SERVER_OWNER
25
+
volumes:
26
+
- spindle_logs:/var/log/spindle
27
+
- spindle_data:/var/lib/tangled
28
+
caddy:
29
+
image: caddy:2
30
+
restart: always
31
+
ports:
32
+
- 443:443
33
+
- 443:443/udp
34
+
- 80:80
35
+
configs:
36
+
- source: caddyfile
37
+
target: /etc/caddy/Caddyfile
38
+
volumes:
39
+
- caddy_data:/data
40
+
volumes:
41
+
knot_repos:
42
+
knot_data:
43
+
knot_keys:
44
+
spindle_logs:
45
+
spindle_data:
46
+
caddy_data:
47
+
configs:
48
+
caddyfile:
49
+
content: |
50
+
{
51
+
email ${CADDY_EMAIL}
52
+
}
53
+
${KNOT_SERVER_HOSTNAME} { reverse_proxy http://knot:5555 }
54
+
${SPINDLE_SERVER_HOSTNAME} { reverse_proxy http://spindle:6555 }