summaryrefslogtreecommitdiff
path: root/debian/witryna.service
blob: d3e0713819cdc2db0e587faa7d17e42dcb340cc4 (plain)
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
57
58
59
60
61
62
[Unit]
Description=Witryna - Git-based static site deployment orchestrator
Documentation=man:witryna(1) man:witryna.toml(5)
After=network-online.target
Wants=network-online.target

[Service]
Type=simple
User=witryna
Group=witryna

# Start the deployment server
ExecStart=/usr/bin/witryna serve --config /etc/witryna/witryna.toml
ExecReload=/bin/kill -HUP $MAINPID

# Environment
Environment="RUST_LOG=info"

# Restart policy
Restart=on-failure
RestartSec=5
StartLimitBurst=3
StartLimitIntervalSec=60

# Security hardening
NoNewPrivileges=yes
PrivateTmp=yes
ProtectSystem=strict
ProtectKernelTunables=yes
ProtectKernelModules=yes
ProtectControlGroups=yes
RestrictNamespaces=yes
RestrictRealtime=yes
RestrictSUIDSGID=yes
LockPersonality=yes
MemoryDenyWriteExecute=yes

# Note: ProtectHome=yes is NOT set because it hides /run/user/<uid>,
# which is required for rootless Podman. The witryna user's home is
# /var/lib/witryna (covered by ReadWritePaths), not /home.

# Allow read/write to witryna directories
ReadWritePaths=/var/lib/witryna
ReadWritePaths=/var/log/witryna

# Allow access to container runtime directories
# For Podman (rootless): needs /run/user/<uid> for XDG_RUNTIME_DIR
ReadWritePaths=/run/user
# For Docker:
# SupplementaryGroups=docker
# ReadWritePaths=/var/run/docker.sock

# Capabilities (minimal for container runtime access)
CapabilityBoundingSet=
AmbientCapabilities=

# Resource limits
LimitNOFILE=65536
LimitNPROC=4096

[Install]
WantedBy=multi-user.target