Change : UI/UX design
This commit is contained in:
@@ -2,6 +2,8 @@
|
||||
# =============================================
|
||||
# backup-myapps.sh — Run on MAIN SERVER
|
||||
# Backs up: Frappe, Nextcloud, Mautic, n8n, Odoo
|
||||
# + CI/CD (my-jenkins, management-platform)
|
||||
# + Infrastructure (K8s ingress, Traefik, SSL certs)
|
||||
# Storage tiers:
|
||||
# 1. Local → /root/backups/ (CRITICAL — always runs)
|
||||
# 2. VM → SSH tunnel → /backups/main-server/
|
||||
@@ -65,6 +67,8 @@ log_status() {
|
||||
echo "========================================="
|
||||
echo "📦 Starting Backup: $BACKUP_NAME"
|
||||
echo " Apps: Frappe, Nextcloud, Mautic, n8n, Odoo"
|
||||
echo " CI/CD: my-jenkins, management-platform"
|
||||
echo " Infra: K8s ingress, Traefik, SSL certs"
|
||||
echo " Tiers: Local → VM → ☁ Cloudflare R2"
|
||||
echo "========================================="
|
||||
|
||||
@@ -168,7 +172,85 @@ docker exec frappe-erpnext \
|
||||
|| echo " ⏭️ Frappe config not found (skipping)"
|
||||
|
||||
# --------------------------------------------------
|
||||
# 6. Metadata + checksum
|
||||
# 6. CI/CD & Infrastructure configs ← NEW SECTION
|
||||
# --------------------------------------------------
|
||||
echo ""
|
||||
echo "🚀 [6b/7] Backing up CI/CD & Infrastructure configs..."
|
||||
mkdir -p cicd-configs/k8s
|
||||
|
||||
# my-cicd folder (Jenkinsfile, docker-compose for my-jenkins)
|
||||
if [ -d /root/my-cicd ]; then
|
||||
cp -r /root/my-cicd cicd-configs/my-cicd \
|
||||
&& echo " ✅ /root/my-cicd (Jenkinsfile + compose)" \
|
||||
|| echo " ⚠️ my-cicd copy failed"
|
||||
else
|
||||
echo " ⏭️ /root/my-cicd not found — skipping"
|
||||
fi
|
||||
|
||||
# my-jenkins Docker volume (jobs, credentials, plugins, build history)
|
||||
JENKINS_VOL="my-cicd_jenkins_home"
|
||||
# Try common volume name variants
|
||||
for VOL_NAME in "my-cicd_jenkins_home" "my-cicd_jenkins-home" "my-cicd_jenkins-data" "jenkins_home"; do
|
||||
if docker volume inspect "$VOL_NAME" &>/dev/null; then
|
||||
echo -n " 📁 my-jenkins volume ($VOL_NAME) ... "
|
||||
docker run --rm \
|
||||
-v "${VOL_NAME}:/source:ro" \
|
||||
-v "$(pwd)/cicd-configs:/backup" \
|
||||
alpine tar czf "/backup/my-jenkins-volume.tar.gz" -C /source . \
|
||||
&& echo "✅" || echo "⚠️ FAILED (continuing)"
|
||||
break
|
||||
fi
|
||||
done
|
||||
|
||||
# management-platform source (excluding pycache)
|
||||
if [ -d /root/management-platform ]; then
|
||||
tar czf cicd-configs/management-platform.tar.gz \
|
||||
--exclude='*/__pycache__' \
|
||||
--exclude='*.pyc' \
|
||||
--exclude='*/venv' \
|
||||
-C /root management-platform \
|
||||
&& echo " ✅ management-platform source" \
|
||||
|| echo " ⚠️ management-platform backup failed"
|
||||
else
|
||||
echo " ⏭️ /root/management-platform not found — skipping"
|
||||
fi
|
||||
|
||||
# Traefik config folder
|
||||
if [ -d /root/traefik ]; then
|
||||
cp -r /root/traefik cicd-configs/traefik \
|
||||
&& echo " ✅ /root/traefik config" \
|
||||
|| echo " ⚠️ traefik copy failed"
|
||||
fi
|
||||
|
||||
# acme.json SSL cert backup (critical for domain SSL)
|
||||
if [ -f /root/acme.json.working-backup ]; then
|
||||
cp /root/acme.json.working-backup cicd-configs/acme.json.backup \
|
||||
&& echo " ✅ acme.json (SSL certs)" \
|
||||
|| echo " ⚠️ acme.json copy failed"
|
||||
fi
|
||||
|
||||
# K8s ingress rules (domain routing config — cloudops, nextcloud, odoo)
|
||||
kubectl get ingress --all-namespaces -o yaml \
|
||||
> cicd-configs/k8s/ingress-all.yaml 2>/dev/null \
|
||||
&& echo " ✅ K8s ingress rules" \
|
||||
|| echo " ⏭️ kubectl not available — skipping K8s exports"
|
||||
|
||||
# K8s services & endpoints (ExternalName services pointing to Docker containers)
|
||||
kubectl get services --all-namespaces -o yaml \
|
||||
> cicd-configs/k8s/services-all.yaml 2>/dev/null || true
|
||||
kubectl get endpoints --all-namespaces -o yaml \
|
||||
> cicd-configs/k8s/endpoints-all.yaml 2>/dev/null || true
|
||||
|
||||
# K8s TLS secrets (cert-manager issued certs for domains)
|
||||
kubectl get secret --all-namespaces \
|
||||
--field-selector type=kubernetes.io/tls -o yaml \
|
||||
> cicd-configs/k8s/tls-secrets.yaml 2>/dev/null \
|
||||
&& echo " ✅ K8s TLS secrets (domain certs)" || true
|
||||
|
||||
echo " ✅ CI/CD & Infrastructure backup done"
|
||||
|
||||
# --------------------------------------------------
|
||||
# 7. Metadata + checksum
|
||||
# --------------------------------------------------
|
||||
echo ""
|
||||
echo "📝 [6/7] Writing backup metadata..."
|
||||
@@ -179,6 +261,8 @@ Backup Name: $BACKUP_NAME
|
||||
Backup Date: $(date)
|
||||
Hostname: $(hostname)
|
||||
Apps: Frappe, Nextcloud, Mautic, n8n, Odoo
|
||||
CI/CD: my-jenkins, management-platform
|
||||
Infra: K8s ingress, Traefik, SSL certs
|
||||
Volumes: $VOLUME_COUNT volume(s) backed up
|
||||
Docker info: $(docker --version 2>/dev/null || echo 'N/A')
|
||||
Storage Tiers:
|
||||
@@ -198,7 +282,7 @@ done
|
||||
echo " ✅ Done"
|
||||
|
||||
# --------------------------------------------------
|
||||
# 7. Compress
|
||||
# 8. Compress
|
||||
# --------------------------------------------------
|
||||
echo ""
|
||||
echo "🗜️ [7/7] Compressing backup..."
|
||||
@@ -223,7 +307,7 @@ echo ""
|
||||
echo "✅ [TIER 1] Local backup complete: $BACKUP_ARCHIVE ($COMPRESSED_SIZE)"
|
||||
|
||||
# --------------------------------------------------
|
||||
# 8. Retention — keep only MAX_BACKUPS locally
|
||||
# 9. Retention — keep only MAX_BACKUPS locally
|
||||
# --------------------------------------------------
|
||||
echo ""
|
||||
echo "🧹 [Retention] Keeping latest ${MAX_BACKUPS} local backups..."
|
||||
@@ -242,7 +326,7 @@ else
|
||||
fi
|
||||
|
||||
# --------------------------------------------------
|
||||
# 9. VM transfer [TIER 2] — non-fatal
|
||||
# 10. VM transfer [TIER 2] — non-fatal
|
||||
# --------------------------------------------------
|
||||
echo ""
|
||||
echo "📤 [TIER 2] Sending backup to VM (${VM_HOST}:${VM_PORT})..."
|
||||
@@ -266,7 +350,7 @@ else
|
||||
fi
|
||||
|
||||
# --------------------------------------------------
|
||||
# 10. Cloudflare R2 [TIER 3] — non-fatal
|
||||
# 11. Cloudflare R2 [TIER 3] — non-fatal
|
||||
# --------------------------------------------------
|
||||
echo ""
|
||||
echo "☁️ [TIER 3] Uploading to Cloudflare R2..."
|
||||
@@ -376,7 +460,7 @@ PYEOF
|
||||
fi
|
||||
|
||||
# --------------------------------------------------
|
||||
# 11. Final summary + log
|
||||
# 12. Final summary + log
|
||||
# --------------------------------------------------
|
||||
echo ""
|
||||
echo "========================================="
|
||||
|
||||
Reference in New Issue
Block a user