- Set up complete project structure with separate backend/frontend - Docker Compose with development/production modes - Python backend with FastAPI, FastMCP, and Procrastinate task queue - Astro frontend with Tailwind CSS and Alpine.js - Makefile for easy project management - Proper hot-reload setup for both services - Caddy reverse proxy integration ready
118 lines
3.3 KiB
Makefile
118 lines
3.3 KiB
Makefile
.PHONY: help build up down logs shell test clean install dev prod restart status
|
|
|
|
# Load environment variables
|
|
include .env
|
|
export
|
|
|
|
help: ## Show this help message
|
|
@echo "MCPMC Expert System - Available Commands:"
|
|
@echo ""
|
|
@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | sort | awk 'BEGIN {FS = ":.*?## "}; {printf " \033[36m%-15s\033[0m %s\n", $$1, $$2}'
|
|
|
|
# Environment Setup
|
|
install: ## Install dependencies and setup environment
|
|
@echo "Setting up MCPMC Expert System..."
|
|
@if ! docker network ls | grep -q caddy; then \
|
|
echo "Creating caddy network..."; \
|
|
docker network create caddy; \
|
|
else \
|
|
echo "Caddy network already exists"; \
|
|
fi
|
|
@echo "Building containers..."
|
|
@docker compose build
|
|
@echo "Setup complete!"
|
|
|
|
# Development
|
|
dev: ## Start development environment
|
|
@echo "Starting development environment..."
|
|
@MODE=development docker compose up -d
|
|
@echo "Development environment started!"
|
|
@echo "Frontend: https://$(DOMAIN)"
|
|
@echo "Backend API: https://api.$(DOMAIN)"
|
|
|
|
# Production
|
|
prod: ## Start production environment
|
|
@echo "Starting production environment..."
|
|
@MODE=production docker compose up -d
|
|
@echo "Production environment started!"
|
|
|
|
# Container Management
|
|
build: ## Build all containers
|
|
@docker compose build
|
|
|
|
up: ## Start all services
|
|
@docker compose up -d
|
|
|
|
down: ## Stop all services
|
|
@docker compose down
|
|
|
|
restart: ## Restart all services
|
|
@docker compose restart
|
|
|
|
stop: ## Stop all services
|
|
@docker compose stop
|
|
|
|
# Development Tools
|
|
shell: ## Open shell in backend container
|
|
@docker compose exec backend /bin/bash
|
|
|
|
shell-frontend: ## Open shell in frontend container
|
|
@docker compose exec frontend /bin/sh
|
|
|
|
logs: ## Show logs from all services
|
|
@docker compose logs -f
|
|
|
|
logs-backend: ## Show backend logs
|
|
@docker compose logs -f backend
|
|
|
|
logs-frontend: ## Show frontend logs
|
|
@docker compose logs -f frontend
|
|
|
|
logs-worker: ## Show worker logs
|
|
@docker compose logs -f procrastinate-worker
|
|
|
|
# Database
|
|
db-shell: ## Open database shell
|
|
@docker compose exec db psql -U $(POSTGRES_USER) -d $(POSTGRES_DB)
|
|
|
|
db-reset: ## Reset main database
|
|
@docker compose stop backend
|
|
@docker compose exec db psql -U $(POSTGRES_USER) -c "DROP DATABASE IF EXISTS $(POSTGRES_DB);"
|
|
@docker compose exec db psql -U $(POSTGRES_USER) -c "CREATE DATABASE $(POSTGRES_DB);"
|
|
@docker compose start backend
|
|
|
|
# Testing
|
|
test: ## Run backend tests
|
|
@echo "Running tests..."
|
|
@docker compose exec backend uv run pytest
|
|
|
|
test-coverage: ## Run tests with coverage report
|
|
@docker compose exec backend uv run pytest --cov=src --cov-report=html
|
|
|
|
# Maintenance
|
|
clean: ## Clean up containers and volumes
|
|
@echo "Cleaning up..."
|
|
@docker compose down -v
|
|
@docker system prune -f
|
|
@echo "Cleanup complete!"
|
|
|
|
status: ## Show service status
|
|
@echo "Service Status:"
|
|
@docker compose ps
|
|
@echo ""
|
|
@echo "Networks:"
|
|
@docker network ls | grep caddy || echo "No caddy network found"
|
|
|
|
# Backup/Restore
|
|
backup: ## Backup databases
|
|
@echo "Creating backup..."
|
|
@mkdir -p backups
|
|
@docker compose exec db pg_dump -U $(POSTGRES_USER) $(POSTGRES_DB) > backups/main_$(shell date +%Y%m%d_%H%M%S).sql
|
|
@docker compose exec procrastinate-db pg_dump -U $(PROCRASTINATE_USER) $(PROCRASTINATE_DB) > backups/queue_$(shell date +%Y%m%d_%H%M%S).sql
|
|
@echo "Backup complete!"
|
|
|
|
# Quick shortcuts
|
|
d: dev ## Shortcut for dev
|
|
p: prod ## Shortcut for prod
|
|
l: logs ## Shortcut for logs
|
|
s: status ## Shortcut for status
|