75 lines
2.5 KiB
Makefile
75 lines
2.5 KiB
Makefile
BINARY = clavitor-web
|
|
PROD_HOST = root@zurich.inou.com
|
|
PROD_DIR = /opt/clavitor-web
|
|
PORT = 8099
|
|
|
|
.PHONY: build dev deploy-dev deploy-prod setup-prod
|
|
|
|
# Build for local (dev on forge/localhost)
|
|
build:
|
|
CGO_ENABLED=1 go build -o $(BINARY) .
|
|
|
|
# Run locally (dev mode — templates reload from disk)
|
|
dev: build
|
|
pkill -f ./$(BINARY) 2>/dev/null || true
|
|
sleep 0.5
|
|
./$(BINARY) &
|
|
@echo "→ dev.clavitor.ai / http://localhost:$(PORT)"
|
|
|
|
# Deploy to dev (forge = localhost, dev.clavitor.ai points here)
|
|
deploy-dev: build
|
|
pkill -f ./$(BINARY) 2>/dev/null || true
|
|
sleep 0.5
|
|
./$(BINARY) &
|
|
@echo "✓ dev deployed → dev.clavitor.ai / http://localhost:$(PORT)"
|
|
|
|
# Build for prod (linux/amd64 for Zürich)
|
|
build-prod:
|
|
GOOS=linux GOARCH=amd64 CGO_ENABLED=1 go build -o $(BINARY)-linux-amd64 .
|
|
|
|
# Deploy to prod (Zürich — clavitor.ai)
|
|
deploy-prod: build-prod
|
|
scp $(BINARY)-linux-amd64 $(PROD_HOST):$(PROD_DIR)/
|
|
ssh $(PROD_HOST) "sqlite3 $(PROD_DIR)/clavitor.db \"INSERT INTO maintenance (start_at, reason, started_by, ended_by) VALUES (strftime('%s','now'), 'deploy', 'makefile', '')\""
|
|
ssh $(PROD_HOST) "cd $(PROD_DIR) && mv $(BINARY)-linux-amd64 $(BINARY) && systemctl restart clavitor-web"
|
|
sleep 5
|
|
ssh $(PROD_HOST) "sqlite3 $(PROD_DIR)/clavitor.db \"UPDATE maintenance SET end_at = strftime('%s','now'), ended_by = 'makefile' WHERE end_at IS NULL\""
|
|
@echo "✓ prod deployed → https://clavitor.ai"
|
|
|
|
# Pull prod DB backup locally
|
|
backup-prod:
|
|
scp $(PROD_HOST):$(PROD_DIR)/clavitor.db backups/clavitor-$(shell date +%Y%m%d-%H%M%S).db
|
|
@echo "✓ prod DB backed up"
|
|
|
|
# One-time: push local DB to prod (DESTRUCTIVE — overwrites prod data)
|
|
push-db:
|
|
@echo "⚠ This overwrites the prod database. Press Ctrl+C to cancel."
|
|
@sleep 3
|
|
scp clavitor.db $(PROD_HOST):$(PROD_DIR)/
|
|
ssh $(PROD_HOST) "systemctl restart clavitor-web"
|
|
@echo "✓ DB pushed to prod"
|
|
|
|
# First-time prod setup (already done)
|
|
setup-prod:
|
|
ssh $(PROD_HOST) "mkdir -p $(PROD_DIR)"
|
|
scp $(BINARY)-linux-amd64 clavitor.db $(PROD_HOST):$(PROD_DIR)/
|
|
ssh $(PROD_HOST) "mv $(PROD_DIR)/$(BINARY)-linux-amd64 $(PROD_DIR)/$(BINARY)"
|
|
ssh $(PROD_HOST) 'cat > /etc/systemd/system/clavitor-web.service << EOF\n\
|
|
[Unit]\n\
|
|
Description=clavitor-web\n\
|
|
After=network.target\n\
|
|
\n\
|
|
[Service]\n\
|
|
Type=simple\n\
|
|
WorkingDirectory=$(PROD_DIR)\n\
|
|
ExecStart=$(PROD_DIR)/$(BINARY)\n\
|
|
Restart=always\n\
|
|
RestartSec=5\n\
|
|
Environment=PORT=$(PORT)\n\
|
|
\n\
|
|
[Install]\n\
|
|
WantedBy=multi-user.target\n\
|
|
EOF'
|
|
ssh $(PROD_HOST) "systemctl daemon-reload && systemctl enable --now clavitor-web"
|
|
@echo "✓ prod setup complete"
|