- InlineField component + useInlineEdit composable for Odoo-style dblclick editing - Client search by name, account ID, and legacy_customer_id (or_filters) - SMS/Email notification panel on ContactCard via n8n webhooks - Ticket reply thread via Communication docs - All migration scripts (51 files) now tracked - Client portal and field tech app added to monorepo - README rewritten with full feature list, migration summary, architecture - CHANGELOG updated with all recent work - ROADMAP updated with current completion status - Removed hardcoded tokens from docs (use $ERP_SERVICE_TOKEN) - .gitignore updated (docker/, .claude/, exports/, .quasar/) Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
50 lines
1.8 KiB
Bash
Executable File
50 lines
1.8 KiB
Bash
Executable File
#!/bin/bash
|
|
# Deploy client.gigafibre.ca portal route to Traefik
|
|
#
|
|
# Usage: bash deploy-portal.sh
|
|
# Requires: SSH access to 96.125.196.67
|
|
|
|
set -e
|
|
|
|
SERVER="root@96.125.196.67"
|
|
SSH_KEY="$HOME/.ssh/proxmox_vm"
|
|
SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
|
|
|
|
echo "=== Deploying client.gigafibre.ca portal route ==="
|
|
|
|
# 1. Copy Traefik dynamic route
|
|
echo " → Copying Traefik config..."
|
|
scp -i "$SSH_KEY" "$SCRIPT_DIR/traefik-client-portal.yml" \
|
|
"$SERVER:/opt/traefik/dynamic/client-portal.yml"
|
|
|
|
# 2. Verify Traefik picks it up (check logs for new route)
|
|
echo " → Checking Traefik logs for route registration..."
|
|
ssh -i "$SSH_KEY" "$SERVER" 'sleep 2 && docker logs --tail 20 traefik 2>&1 | grep -i "client\|portal\|error" || echo " (no portal-specific logs yet — normal on first load)"'
|
|
|
|
# 3. Verify TLS cert provisioning
|
|
echo " → Checking TLS cert (Let's Encrypt will provision on first request)..."
|
|
echo " → Try: curl -sI https://client.gigafibre.ca/login | head -5"
|
|
|
|
# 4. Quick connectivity test
|
|
echo ""
|
|
echo " → Testing connectivity..."
|
|
STATUS=$(curl -s -o /dev/null -w "%{http_code}" --max-time 10 "https://client.gigafibre.ca/login" 2>/dev/null || echo "000")
|
|
if [ "$STATUS" = "200" ]; then
|
|
echo " ✓ client.gigafibre.ca is live! (HTTP $STATUS)"
|
|
elif [ "$STATUS" = "000" ]; then
|
|
echo " ⏳ TLS cert not ready yet — Let's Encrypt needs a moment"
|
|
echo " Wait 30s and try: curl -sI https://client.gigafibre.ca/login"
|
|
else
|
|
echo " → HTTP $STATUS — check Traefik logs: docker logs --tail 50 traefik"
|
|
fi
|
|
|
|
echo ""
|
|
echo "=== Done ==="
|
|
echo ""
|
|
echo "Portal URL: https://client.gigafibre.ca"
|
|
echo "Login: https://client.gigafibre.ca/login"
|
|
echo "Invoices: https://client.gigafibre.ca/invoices"
|
|
echo "Profile: https://client.gigafibre.ca/me"
|
|
echo ""
|
|
echo "Test user: etl@exprotransit.com / TestPortal2026!"
|