Build and Deploy to Synology NAS / test (push) Failing after 15m0s
Build and Deploy to Synology NAS / build (push) Has been cancelled
Build and Deploy to Synology NAS / deploy (push) Has been cancelled
Build and Deploy to Synology NAS / notify (push) Has been cancelled
- Add Terraform configuration for AKS cluster deployment - Add Kubernetes manifests for Laravel app (deployment, services, secrets) - Add PostgreSQL on Kubernetes with multi-schema support - Add Nginx Ingress Controller configuration - Add GitHub Actions workflow for Azure deployment - Add HTTP Basic Authentication for production - Add database restore functionality via Kubernetes jobs - Update Dockerfile and nginx config for production - Update database.php for multi-schema connections - Add deployment documentation and quickstart guides Deployed version: 1.0.7 at http://72.144.113.194/ Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
113 lines
4.5 KiB
Terraform
113 lines
4.5 KiB
Terraform
output "resource_group_name" {
|
|
description = "Name of the resource group"
|
|
value = data.azurerm_resource_group.main.name
|
|
}
|
|
|
|
output "aks_cluster_name" {
|
|
description = "Name of the AKS cluster"
|
|
value = data.azurerm_kubernetes_cluster.main.name
|
|
}
|
|
|
|
output "postgresql_service_name" {
|
|
description = "Name of the PostgreSQL service (in-cluster)"
|
|
value = kubernetes_service.postgresql.metadata[0].name
|
|
}
|
|
|
|
output "postgresql_service_fqdn" {
|
|
description = "Internal FQDN of the PostgreSQL service (in-cluster)"
|
|
value = "postgresql.${kubernetes_namespace.app.metadata[0].name}.svc.cluster.local"
|
|
}
|
|
|
|
output "postgresql_database_name" {
|
|
description = "Name of the PostgreSQL database"
|
|
value = local.postgresql_db_name
|
|
}
|
|
|
|
output "postgresql_admin_username" {
|
|
description = "Administrator username for PostgreSQL"
|
|
value = var.postgresql_admin_username
|
|
sensitive = true
|
|
}
|
|
|
|
output "postgresql_connection_string" {
|
|
description = "PostgreSQL connection string (from within cluster)"
|
|
value = "postgresql://${var.postgresql_admin_username}:${nonsensitive(local.postgresql_admin_pass)}@postgresql.${kubernetes_namespace.app.metadata[0].name}.svc.cluster.local:5432/${local.postgresql_db_name}"
|
|
sensitive = true
|
|
}
|
|
|
|
output "app_namespace" {
|
|
description = "Kubernetes namespace for the application"
|
|
value = kubernetes_namespace.app.metadata[0].name
|
|
}
|
|
|
|
output "app_service_name" {
|
|
description = "Kubernetes service name for the application"
|
|
value = kubernetes_service.app.metadata[0].name
|
|
}
|
|
|
|
output "ingress_enabled" {
|
|
description = "Whether ingress is enabled"
|
|
value = var.ingress_enabled
|
|
}
|
|
|
|
output "ingress_ip" {
|
|
description = "IP address of the ingress controller load balancer"
|
|
value = var.ingress_enabled ? try(data.kubernetes_service.ingress_nginx[0].status[0].load_balancer[0].ingress[0].ip, "pending") : "not enabled"
|
|
}
|
|
|
|
output "app_url" {
|
|
description = "URL of the Laravel application"
|
|
value = var.ingress_enabled ? (var.ingress_host != "" ? "https://${var.ingress_host}" : "http://${try(data.kubernetes_service.ingress_nginx[0].status[0].load_balancer[0].ingress[0].ip, "pending")}") : "ingress not enabled"
|
|
}
|
|
|
|
output "ssl_enabled" {
|
|
description = "Whether SSL/TLS is enabled"
|
|
value = var.ssl_enabled
|
|
}
|
|
|
|
output "db_restore_info" {
|
|
description = "Database restore information"
|
|
value = "Database restore disabled in Terraform. Use manual restore via kubectl (see db-restore.tf for instructions)"
|
|
}
|
|
|
|
output "deployment_instructions" {
|
|
description = "Next steps after deployment"
|
|
value = <<-EOT
|
|
========================================
|
|
Deployment Complete!
|
|
========================================
|
|
|
|
1. Get kubectl credentials:
|
|
az aks get-credentials --resource-group ${data.azurerm_resource_group.main.name} --name ${data.azurerm_kubernetes_cluster.main.name}
|
|
|
|
2. Check application status:
|
|
kubectl get pods -n ${kubernetes_namespace.app.metadata[0].name}
|
|
kubectl get svc -n ${kubernetes_namespace.app.metadata[0].name}
|
|
kubectl get ingress -n ${kubernetes_namespace.app.metadata[0].name}
|
|
|
|
3. Check database restore job (if enabled):
|
|
kubectl get jobs -n ${kubernetes_namespace.app.metadata[0].name}
|
|
kubectl logs -n ${kubernetes_namespace.app.metadata[0].name} -l job-type=database-restore
|
|
|
|
4. Access the application:
|
|
${var.ingress_enabled ? (var.ingress_host != "" ? "https://${var.ingress_host}" : "http://${try(data.kubernetes_service.ingress_nginx[0].status[0].load_balancer[0].ingress[0].ip, "pending")}") : "ingress not enabled - use port-forward"}
|
|
|
|
5. Port-forward (if ingress not ready):
|
|
kubectl port-forward -n ${kubernetes_namespace.app.metadata[0].name} svc/${kubernetes_service.app.metadata[0].name} 8080:80
|
|
|
|
6. View logs:
|
|
kubectl logs -n ${kubernetes_namespace.app.metadata[0].name} -l app=${var.app_name} -f
|
|
|
|
7. Database connection details (in-cluster):
|
|
Host: postgresql.${kubernetes_namespace.app.metadata[0].name}.svc.cluster.local
|
|
Database: ${local.postgresql_db_name}
|
|
Username: ${var.postgresql_admin_username}
|
|
|
|
8. Restore database manually:
|
|
kubectl cp ../backups/backup_backend_20251203_101741.dump ${kubernetes_namespace.app.metadata[0].name}/postgresql-0:/tmp/backup.dump
|
|
kubectl exec -it -n ${kubernetes_namespace.app.metadata[0].name} postgresql-0 -- pg_restore -U ${var.postgresql_admin_username} -d ${local.postgresql_db_name} --clean --if-exists /tmp/backup.dump
|
|
|
|
========================================
|
|
EOT
|
|
}
|