HOST = 172.16.0.214 SSH_USER = root SSH = ssh $(SSH_USER)@$(HOST) SCP = scp JAIL_NAME = cyclingbot JAIL_ROOT = /jails/$(JAIL_NAME) BINARY = cycling-bot .PHONY: all build deploy deploy-env restart stop logs status clean all: build deploy start # Cross-compile for FreeBSD amd64 build: GOOS=freebsd GOARCH=amd64 go build -o $(BINARY) . # Create required directories inside the jail (safe to run multiple times) setup: $(SSH) "mkdir -p $(JAIL_ROOT)/usr/local/bin \ $(JAIL_ROOT)/usr/local/etc/rc.d \ $(JAIL_ROOT)/var/db/$(JAIL_NAME) \ $(JAIL_ROOT)/var/log \ $(JAIL_ROOT)/var/run" # Copy binary and rc.d script into the jail (via /tmp to avoid jail dir permission issues) deploy: build setup $(SCP) $(BINARY) $(SSH_USER)@$(HOST):/tmp/$(BINARY) $(SCP) rc.d/$(JAIL_NAME) $(SSH_USER)@$(HOST):/tmp/$(JAIL_NAME)-rcd $(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop 2>/dev/null; \ rm -f $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \ cp /tmp/$(BINARY) $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \ chmod +x $(JAIL_ROOT)/usr/local/bin/$(BINARY) && \ rm /tmp/$(BINARY) && \ rm -f $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \ cp /tmp/$(JAIL_NAME)-rcd $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \ chmod +x $(JAIL_ROOT)/usr/local/etc/rc.d/$(JAIL_NAME) && \ rm /tmp/$(JAIL_NAME)-rcd" # Copy .env separately (run once — avoid overwriting production config) deploy-env: $(SCP) .env \ $(SSH_USER)@$(HOST):$(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env $(SSH) "chmod 600 $(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env && \ chown 1001:1001 $(JAIL_ROOT)/var/db/$(JAIL_NAME)/.env" start: $(SSH) "rm -f $(JAIL_ROOT)/var/run/$(JAIL_NAME).pid && \ jexec $(JAIL_NAME) service $(JAIL_NAME) start" restart: $(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop 2>/dev/null; \ rm -f $(JAIL_ROOT)/var/run/$(JAIL_NAME).pid && \ jexec $(JAIL_NAME) service $(JAIL_NAME) start" stop: $(SSH) "jexec $(JAIL_NAME) service $(JAIL_NAME) stop" logs: $(SSH) "jexec $(JAIL_NAME) tail -f /var/log/$(JAIL_NAME).log" status: $(SSH) "jls && jexec $(JAIL_NAME) service $(JAIL_NAME) status" clean: rm -f $(BINARY)