frierena personal git archive

frieren

a self-hosted git server in one binary — everyone reads, only the owner writes

build: Makefile golden path and deploy examples

ee24d045842c661c785fdcd83f0af01856231eff

justin06lee · Aug 18, 2026, 10:09 PM (5h ago)

Makefile               | 25 +++++++++++++++++++++++++
 deploy/Caddyfile       |  6 ++++++
 deploy/frieren.service | 30 ++++++++++++++++++++++++++++++
 3 files changed, 61 insertions(+)
Makefile+250
@@ -0,0 +1,25 @@
1+VERSION := $(shell git describe --tags --always --dirty 2>/dev/null || echo dev)
2+INSTALL_DIR := $(HOME)/.local/bin
3+
4+.PHONY: all build install update test clean
5+
6+all: build install
7+
8+build:
9+ go build -ldflags "-X main.version=$(VERSION)" -o dist/frieren .
10+
11+install: build
12+ mkdir -p $(INSTALL_DIR)
13+ install dist/frieren $(INSTALL_DIR)/frieren
14+ @case ":$$PATH:" in \
15+ *:"$(INSTALL_DIR)":*) echo "installed $(INSTALL_DIR)/frieren" ;; \
16+ *) echo "installed $(INSTALL_DIR)/frieren — NOTE: $(INSTALL_DIR) is not in your PATH" ;; \
17+ esac
18+
19+update: all
20+
21+test:
22+ go test ./...
23+
24+clean:
25+ rm -rf dist
deploy/Caddyfile+60
@@ -0,0 +1,6 @@
1+# Caddy reverse proxy: automatic HTTPS in front of frieren.
2+# Point your domain's DNS at this machine, then `caddy run`.
3+
4+git.example.com {
5+ reverse_proxy 127.0.0.1:7420
6+}
deploy/frieren.service+300
@@ -0,0 +1,30 @@
1+# systemd unit for the machine that hosts frieren.
2+#
3+# sudo useradd --system --create-home --home-dir /srv/frieren frieren
4+# sudo install frieren /usr/local/bin/frieren
5+# sudo install -m 600 -o frieren /dev/null /srv/frieren/env
6+# echo "FRIEREN_TOKEN=$(frieren token)" | sudo tee /srv/frieren/env
7+# sudo cp deploy/frieren.service /etc/systemd/system/
8+# sudo systemctl enable --now frieren
9+
10+[Unit]
11+Description=frieren self-hosted git server
12+After=network.target
13+
14+[Service]
15+User=frieren
16+Group=frieren
17+EnvironmentFile=/srv/frieren/env
18+ExecStart=/usr/local/bin/frieren serve -addr 127.0.0.1:7420 -root /srv/frieren/repos
19+Restart=always
20+RestartSec=2
21+
22+# Hardening
23+NoNewPrivileges=true
24+ProtectSystem=strict
25+ProtectHome=true
26+ReadWritePaths=/srv/frieren/repos
27+PrivateTmp=true
28+
29+[Install]
30+WantedBy=multi-user.target
031