summaryrefslogtreecommitdiff
path: root/debian/witryna.service
diff options
context:
space:
mode:
Diffstat (limited to 'debian/witryna.service')
-rw-r--r--debian/witryna.service62
1 files changed, 62 insertions, 0 deletions
diff --git a/debian/witryna.service b/debian/witryna.service
new file mode 100644
index 0000000..d3e0713
--- /dev/null
+++ b/debian/witryna.service
@@ -0,0 +1,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