182 lines
5.1 KiB
Bash
Executable File
182 lines
5.1 KiB
Bash
Executable File
#!/bin/bash
|
|
|
|
# Nginx Proxy Manager - GitOps Deployment Script
|
|
# Deploys NPM to Calypso server with proper port configuration
|
|
|
|
set -euo pipefail
|
|
|
|
# Configuration
|
|
SERVICE_NAME="nginx-proxy-manager"
|
|
REMOTE_HOST="Vish@192.168.0.250"
|
|
SSH_PORT="62000"
|
|
REMOTE_PATH="/volume1/docker/nginx-proxy-manager"
|
|
COMPOSE_FILE="docker-compose.yml"
|
|
|
|
# Colors for output
|
|
RED='\033[0;31m'
|
|
GREEN='\033[0;32m'
|
|
YELLOW='\033[1;33m'
|
|
BLUE='\033[0;34m'
|
|
NC='\033[0m' # No Color
|
|
|
|
# Logging functions
|
|
log() {
|
|
echo -e "${BLUE}[$(date '+%Y-%m-%d %H:%M:%S')] $1${NC}"
|
|
}
|
|
|
|
success() {
|
|
echo -e "${GREEN}✅ $1${NC}"
|
|
}
|
|
|
|
warning() {
|
|
echo -e "${YELLOW}⚠️ $1${NC}"
|
|
}
|
|
|
|
error() {
|
|
echo -e "${RED}❌ $1${NC}"
|
|
exit 1
|
|
}
|
|
|
|
check_prerequisites() {
|
|
if [[ ! -f "$COMPOSE_FILE" ]]; then
|
|
error "docker-compose.yml not found in current directory"
|
|
fi
|
|
|
|
if ! ssh -q -p "$SSH_PORT" "$REMOTE_HOST" exit; then
|
|
error "Cannot connect to $REMOTE_HOST"
|
|
fi
|
|
}
|
|
|
|
cleanup_existing() {
|
|
log "Cleaning up existing NPM containers..."
|
|
|
|
# Stop and remove any existing NPM containers
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "sudo /usr/local/bin/docker stop nginx-proxy-manager 2>/dev/null || true"
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "sudo /usr/local/bin/docker rm nginx-proxy-manager 2>/dev/null || true"
|
|
|
|
# Clean up any orphaned containers
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "sudo /usr/local/bin/docker container prune -f 2>/dev/null || true"
|
|
|
|
success "Cleanup complete"
|
|
}
|
|
|
|
deploy() {
|
|
log "Deploying $SERVICE_NAME to $REMOTE_HOST..."
|
|
|
|
# Create required directories
|
|
log "Creating required directories..."
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "mkdir -p $REMOTE_PATH/{data,letsencrypt}"
|
|
|
|
# Copy compose file
|
|
log "Copying docker-compose.yml to $REMOTE_HOST:$REMOTE_PATH/"
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "cat > $REMOTE_PATH/docker-compose.yml" < "$COMPOSE_FILE"
|
|
|
|
# Deploy services
|
|
log "Starting NPM services..."
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "cd $REMOTE_PATH && sudo /usr/local/bin/docker-compose up -d"
|
|
|
|
# Wait for services to be healthy
|
|
log "Waiting for services to be healthy..."
|
|
sleep 15
|
|
|
|
# Check status
|
|
if ssh -p "$SSH_PORT" "$REMOTE_HOST" "sudo /usr/local/bin/docker ps | grep -q 'nginx-proxy-manager.*Up'"; then
|
|
success "$SERVICE_NAME deployed successfully!"
|
|
log "Admin UI: http://192.168.0.250:81"
|
|
log "HTTP Proxy: http://192.168.0.250:8880"
|
|
log "HTTPS Proxy: https://192.168.0.250:8443"
|
|
warning "Default login: admin@example.com / changeme"
|
|
warning "Make sure your router forwards:"
|
|
warning " Port 80 → 8880 (HTTP)"
|
|
warning " Port 443 → 8443 (HTTPS)"
|
|
else
|
|
warning "Service started but may not be fully healthy yet. Check logs with: ./deploy.sh logs"
|
|
fi
|
|
}
|
|
|
|
restart() {
|
|
log "Restarting $SERVICE_NAME..."
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "cd $REMOTE_PATH && sudo /usr/local/bin/docker-compose restart"
|
|
success "Service restarted"
|
|
}
|
|
|
|
stop() {
|
|
log "Stopping $SERVICE_NAME..."
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "cd $REMOTE_PATH && sudo /usr/local/bin/docker-compose down"
|
|
success "Service stopped"
|
|
}
|
|
|
|
logs() {
|
|
log "Showing logs for $SERVICE_NAME..."
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "sudo /usr/local/bin/docker logs -f nginx-proxy-manager"
|
|
}
|
|
|
|
status() {
|
|
log "Checking status of $SERVICE_NAME services..."
|
|
echo
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "sudo /usr/local/bin/docker ps --format 'table {{.Names}}\t{{.Image}}\t{{.Status}}\t{{.Ports}}' | grep -E '(NAMES|nginx-proxy-manager)'"
|
|
echo
|
|
|
|
# Test connectivity
|
|
if curl -s -o /dev/null -w "%{http_code}" "http://192.168.0.250:81" | grep -q "200\|302\|401"; then
|
|
success "NPM Admin UI is responding at http://192.168.0.250:81"
|
|
else
|
|
warning "NPM Admin UI is not responding"
|
|
fi
|
|
}
|
|
|
|
update() {
|
|
log "Updating $SERVICE_NAME..."
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "cd $REMOTE_PATH && sudo /usr/local/bin/docker-compose pull"
|
|
ssh -p "$SSH_PORT" "$REMOTE_HOST" "cd $REMOTE_PATH && sudo /usr/local/bin/docker-compose up -d"
|
|
success "Service updated"
|
|
}
|
|
|
|
# Main execution
|
|
COMMAND=${1:-deploy}
|
|
|
|
case $COMMAND in
|
|
deploy)
|
|
check_prerequisites
|
|
cleanup_existing
|
|
deploy
|
|
;;
|
|
restart)
|
|
check_prerequisites
|
|
restart
|
|
;;
|
|
stop)
|
|
check_prerequisites
|
|
stop
|
|
;;
|
|
logs)
|
|
check_prerequisites
|
|
logs
|
|
;;
|
|
status)
|
|
check_prerequisites
|
|
status
|
|
;;
|
|
update)
|
|
check_prerequisites
|
|
update
|
|
;;
|
|
cleanup)
|
|
check_prerequisites
|
|
cleanup_existing
|
|
;;
|
|
*)
|
|
echo "Usage: $0 [deploy|restart|stop|logs|status|update|cleanup]"
|
|
echo
|
|
echo "Commands:"
|
|
echo " deploy - Deploy/update the service (default)"
|
|
echo " restart - Restart the service"
|
|
echo " stop - Stop the service"
|
|
echo " logs - Show service logs"
|
|
echo " status - Show service status"
|
|
echo " update - Pull latest images and redeploy"
|
|
echo " cleanup - Clean up existing containers"
|
|
exit 1
|
|
;;
|
|
esac
|