#!/bin/bash # CoopCredits Deployment Script # Usage: ./deploy.sh [environment] set -e ENVIRONMENT=${1:-production} SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PROJECT_DIR="$(dirname "$SCRIPT_DIR")" echo "🚀 CoopCredits Deployment" echo "========================" echo "Environment: $ENVIRONMENT" echo "" # Check prerequisites check_prerequisites() { echo "Checking prerequisites..." command -v docker >/dev/null 2>&1 || { echo "❌ Docker is required but not installed. Aborting." >&2; exit 1; } command -v docker-compose >/dev/null 2>&1 || { echo "❌ Docker Compose is required but not installed. Aborting." >&2; exit 1; } echo "✅ Prerequisites met" } # Load environment variables load_env() { if [ -f "$PROJECT_DIR/.env" ]; then echo "Loading environment variables..." set -a source "$PROJECT_DIR/.env" set +a else echo "⚠️ .env file not found. Using default values." fi } # Build and deploy build_and_deploy() { echo "" echo "Building and deploying..." cd "$PROJECT_DIR" # Pull latest images docker-compose pull # Build services docker-compose build --no-cache # Start services docker-compose up -d # Wait for database echo "Waiting for database..." sleep 10 # Run migrations echo "Running database migrations..." docker-compose exec -T backend npx prisma migrate deploy echo "✅ Deployment complete!" } # Setup SSL certificates setup_ssl() { echo "" echo "Setting up SSL certificates..." # Check if certificates exist if [ ! -f "$PROJECT_DIR/docker/nginx/ssl/cert.pem" ]; then echo "⚠️ SSL certificates not found at docker/nginx/ssl/" echo "Please place your certificates:" echo " - cert.pem (certificate)" echo " - key.pem (private key)" echo "" read -p "Continue without SSL? (y/n) " -n 1 -r echo if [[ ! $REPLY =~ ^[Yy]$ ]]; then exit 1 fi fi } # Health check health_check() { echo "" echo "Running health checks..." # Check if services are running if docker-compose ps | grep -q "Up"; then echo "✅ Services are running" else echo "❌ Some services failed to start" docker-compose ps exit 1 fi # Test API endpoint if curl -sf http://localhost:3001/health > /dev/null; then echo "✅ Backend is responding" else echo "❌ Backend is not responding" exit 1 fi echo "✅ Health checks passed" } # Main deployment flow main() { check_prerequisites load_env setup_ssl build_and_deploy health_check echo "" echo "🎉 CoopCredits has been deployed!" echo "" echo "Access your application:" echo " - Website: https://coop.hobokenchicken.com" echo " - API: https://coop.hobokenchicken.com/api" echo "" echo "Useful commands:" echo " - View logs: docker-compose logs -f" echo " - Stop: docker-compose down" echo " - Restart: docker-compose restart" } main "$@"