30878fe539
scripts/check_deps.sh now checks and installs all prerequisites: git, curl, openssl, python3, python3-cryptography, docker, docker-compose. Runs apt-get update only once if anything needs installing. Also adds current user to docker group if missing. Makefile calls it with sudo so it has the rights to install packages. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
207 lines
6.4 KiB
Makefile
207 lines
6.4 KiB
Makefile
# Personal Internet Cell - Makefile
|
|
# Provides easy commands for managing the cell
|
|
|
|
.PHONY: help start stop restart status logs clean setup check-deps init-peers build build-api build-webui
|
|
|
|
# Detect docker compose command (v2 plugin preferred, fallback to v1 standalone)
|
|
DC := $(shell docker compose version >/dev/null 2>&1 && echo "docker compose" || echo "docker-compose")
|
|
|
|
# Default target
|
|
help:
|
|
@echo "Personal Internet Cell - Management Commands"
|
|
@echo ""
|
|
@echo "Setup (run once on a fresh host):"
|
|
@echo " setup - Create dirs, generate WireGuard keys, write configs, then: make start"
|
|
@echo " Env vars: CELL_NAME=mycell CELL_DOMAIN=cell VPN_ADDRESS=10.0.0.1/24 WG_PORT=51820"
|
|
@echo " init-peers - Reset peer list to empty"
|
|
@echo ""
|
|
@echo "Management:"
|
|
@echo " start - Start all services (docker compose up -d)"
|
|
@echo " stop - Stop all services"
|
|
@echo " restart - Restart all services"
|
|
@echo " status - Show container status + API health"
|
|
@echo " logs - Follow logs from all services"
|
|
@echo ""
|
|
@echo "Build:"
|
|
@echo " build - Rebuild API image"
|
|
@echo " build-api - Rebuild API image (no cache)"
|
|
@echo " build-webui - Rebuild Web UI image (no cache)"
|
|
@echo ""
|
|
@echo "Individual Services:"
|
|
@echo " start-dns - Start DNS service only"
|
|
@echo " start-api - Start API service only"
|
|
@echo " start-wg - Start WireGuard service only"
|
|
@echo ""
|
|
@echo "Maintenance:"
|
|
@echo " clean - Remove all containers and volumes"
|
|
@echo " backup - Backup configuration and data"
|
|
@echo " restore - Restore from backup"
|
|
|
|
# Setup commands
|
|
check-deps:
|
|
@sudo sh scripts/check_deps.sh
|
|
|
|
setup: check-deps
|
|
@echo "Setting up Personal Internet Cell..."
|
|
@sudo chown -R $$(id -u):$$(id -g) config/ data/ 2>/dev/null || true
|
|
CELL_NAME=$(or $(CELL_NAME),mycell) \
|
|
CELL_DOMAIN=$(or $(CELL_DOMAIN),cell) \
|
|
VPN_ADDRESS=$(or $(VPN_ADDRESS),10.0.0.1/24) \
|
|
WG_PORT=$(or $(WG_PORT),51820) \
|
|
WG_PRIVATE_KEY="$(WG_PRIVATE_KEY)" \
|
|
WG_PUBLIC_KEY="$(WG_PUBLIC_KEY)" \
|
|
python3 scripts/setup_cell.py
|
|
|
|
init-peers:
|
|
@echo "Initializing peer configuration..."
|
|
@echo '[]' > data/api/peers.json
|
|
@echo "Peer configuration initialized."
|
|
|
|
# Management commands
|
|
start:
|
|
@echo "Starting Personal Internet Cell..."
|
|
PUID=$$(id -u) PGID=$$(id -g) $(DC) up -d --build
|
|
@echo "Services started. Check status with 'make status'"
|
|
|
|
stop:
|
|
@echo "Stopping Personal Internet Cell..."
|
|
PUID=$$(id -u) PGID=$$(id -g) $(DC) down
|
|
@echo "Services stopped."
|
|
|
|
restart:
|
|
@echo "Restarting Personal Internet Cell..."
|
|
PUID=$$(id -u) PGID=$$(id -g) $(DC) restart
|
|
@echo "Services restarted."
|
|
|
|
status:
|
|
@echo "Personal Internet Cell Status:"
|
|
@echo "================================"
|
|
$(DC) ps
|
|
@echo ""
|
|
@echo "API Status:"
|
|
@curl -s http://localhost:3000/health || echo "API not responding"
|
|
|
|
logs:
|
|
@echo "Showing logs from all services..."
|
|
$(DC) logs -f
|
|
|
|
# Individual service commands
|
|
start-dns:
|
|
@echo "Starting DNS service..."
|
|
$(DC) up -d dns
|
|
|
|
start-api:
|
|
@echo "Starting API service..."
|
|
$(DC) up -d api
|
|
|
|
start-wg:
|
|
@echo "Starting WireGuard service..."
|
|
$(DC) up -d wireguard
|
|
|
|
start-webui:
|
|
@echo "Starting WebUi service..."
|
|
$(DC) up -d webui
|
|
|
|
# Maintenance commands
|
|
clean:
|
|
@echo "Cleaning up containers and volumes..."
|
|
$(DC) down -v
|
|
docker system prune -f
|
|
@echo "Cleanup complete."
|
|
|
|
backup:
|
|
@echo "Creating backup..."
|
|
@mkdir -p backups
|
|
@tar -czf backups/cell-backup-$(shell date +%Y%m%d-%H%M%S).tar.gz \
|
|
config/ data/ docker-compose.yml Makefile README.md
|
|
@echo "Backup created in backups/ directory."
|
|
|
|
restore:
|
|
@echo "Available backups:"
|
|
@ls -la backups/cell-backup-*.tar.gz 2>/dev/null || echo "No backups found"
|
|
@echo ""
|
|
@echo "To restore, run: tar -xzf backups/cell-backup-YYYYMMDD-HHMMSS.tar.gz"
|
|
|
|
# Development commands
|
|
dev:
|
|
@echo "Starting development environment..."
|
|
$(DC) -f docker-compose.yml -f docker-compose.dev.yml up -d
|
|
|
|
build:
|
|
@echo "Building API service..."
|
|
$(DC) build api
|
|
|
|
build-api:
|
|
@echo "Rebuilding API (no cache)..."
|
|
$(DC) build --no-cache api
|
|
$(DC) up -d api
|
|
|
|
build-webui:
|
|
@echo "Rebuilding Web UI (no cache)..."
|
|
$(DC) build --no-cache webui
|
|
$(DC) up -d webui
|
|
|
|
# Testing commands
|
|
test:
|
|
@echo "Running all unit and integration tests with pytest..."
|
|
pytest tests/ api/tests/
|
|
|
|
test-all:
|
|
@echo "Running all tests using the unified test runner..."
|
|
python3 api/tests/run_tests.py
|
|
|
|
# Remove or update old test targets that reference non-existent files
|
|
test-unit:
|
|
@echo "Running unit tests only..."
|
|
pytest tests/
|
|
|
|
test-coverage:
|
|
@echo "Running tests with coverage..."
|
|
pytest tests/ api/tests/ --cov=api --cov-report=html --cov-report=term-missing -v
|
|
|
|
test-api:
|
|
@echo "Testing API endpoints..."
|
|
cd api && python3 -m pytest tests/test_api_endpoints.py -v
|
|
|
|
test-cli:
|
|
@echo "Testing CLI tool..."
|
|
cd api && python3 -m pytest tests/test_cli_tool.py -v
|
|
|
|
test-phase1:
|
|
@echo "Testing Phase 1 (Network Foundation)..."
|
|
cd api && python3 -m pytest tests/test_network_manager.py tests/test_phase1_endpoints.py -v
|
|
|
|
test-phase2:
|
|
@echo "Testing Phase 2 (WireGuard & Peer Registry)..."
|
|
cd api && python3 -m pytest tests/test_wireguard_manager.py tests/test_phase2_endpoints.py -v
|
|
|
|
test-phase3:
|
|
@echo "Testing Phase 3 (Core Digital Services)..."
|
|
cd api && python3 -m pytest tests/test_phase3_managers.py tests/test_phase3_endpoints.py -v
|
|
|
|
test-phase4:
|
|
@echo "Testing Phase 4 (VPN Gateway & Routing)..."
|
|
cd api && python3 -m pytest tests/test_phase4_routing.py tests/test_phase4_endpoints.py -v
|
|
|
|
test-all-phases:
|
|
@echo "Testing all phases..."
|
|
cd api && python3 -m pytest tests/ -v
|
|
|
|
# Network commands
|
|
show-routes:
|
|
@echo "Current routing table:"
|
|
@docker exec cell-wireguard wg show || echo "WireGuard not running"
|
|
|
|
add-peer:
|
|
@echo "Usage: make add-peer PEER_NAME=name PEER_IP=ip PEER_KEY=public_key"
|
|
@if [ -n "$(PEER_NAME)" ] && [ -n "$(PEER_IP)" ] && [ -n "$(PEER_KEY)" ]; then \
|
|
curl -X POST http://localhost:3000/api/peers \
|
|
-H "Content-Type: application/json" \
|
|
-d '{"name":"$(PEER_NAME)","ip":"$(PEER_IP)","public_key":"$(PEER_KEY)"}'; \
|
|
else \
|
|
echo "Please provide PEER_NAME, PEER_IP, and PEER_KEY parameters"; \
|
|
fi
|
|
|
|
list-peers:
|
|
@echo "Configured peers:"
|
|
@curl -s http://localhost:3000/api/peers | python3 -m json.tool || echo "API not responding"
|