guides. Here's what has been created: 📁 Azure Managed Deployment Structure documentation/deployment-guides/azure-managed/ ├── README.md # Overview and architecture ├── 00-prerequisites-managed.md # Azure prerequisites setup ├── 01-aks-managed-deployment.md # AKS deployment guide ├── 02-container-instances-deployment.md # Container Instances guide ├── 03-production-managed-setup.md # Production hardening ├── kubernetes-manifests/ # Kubernetes YAML files │ ├── namespace.yaml # Namespace and quotas │ ├── storage.yaml # Azure Files storage │ ├── configmap.yaml # Configuration │ ├── secrets.yaml # Key Vault integration │ ├── erpnext-backend.yaml # Backend deployment │ ├── erpnext-frontend.yaml # Frontend deployment │ ├── erpnext-workers.yaml # Workers and scheduler │ ├── ingress.yaml # Ingress configuration │ └── jobs.yaml # Init and backup jobs └── scripts/ # Automation scripts ├── deploy-managed.sh # AKS deployment script └── container-instances-deploy.sh # ACI deployment script 🔄 Key Azure Service Mappings | GCP Service | Azure Equivalent | Notes | |----------------------|--------------------------------------|------------------------------- ---------------------------| | Cloud SQL (MySQL) | Azure Database for PostgreSQL | Using PostgreSQL instead of MySQL for better performance | | Memorystore (Redis) | Azure Cache for Redis | Full compatibility with SSL/TLS | | Cloud Storage | Azure Storage (Blob & Files) | Using Azure Files for shared storage | | GKE | AKS (Azure Kubernetes Service) | Full Kubernetes compatibility | | Cloud Run | Azure Container Instances | Serverless container platform | | Secret Manager | Azure Key Vault | Integrated secrets management | | Cloud IAM | Azure AD & Managed Identity | Enterprise-grade identity | | Stackdriver | Azure Monitor & Application Insights | Comprehensive monitoring | | Cloud CDN | Azure CDN | Global content delivery | | Cloud Load Balancing | Azure Application Gateway | L7 load balancing with WAF | ✨ Key Features 1. Managed Services - Azure Database for PostgreSQL with high availability - Azure Cache for Redis with SSL/TLS encryption - Azure Storage for file management - Azure Key Vault for secrets 2. Deployment Options - AKS: Full Kubernetes control with auto-scaling - Container Instances: Simpler serverless deployment 3. Security - Managed Identity for passwordless authentication - Private endpoints for database and Redis - Network security groups and firewall rules - SSL/TLS encryption everywhere 4. Production Ready - Automated backups with geo-redundancy - Monitoring with Azure Monitor - Auto-scaling configurations - Disaster recovery setup 5. Automation - One-command deployment scripts - Environment validation - Health checks and diagnostics - Backup automation 🚀 Quick Start # Prerequisites cd documentation/deployment-guides/azure-managed/ # Follow 00-prerequisites-managed.md # Option 1: Deploy to AKS ./scripts/deploy-managed.sh deploy # Option 2: Deploy to Container Instances ./scripts/container-instances-deploy.sh deploy 💰 Cost Comparison | Deployment Size | Azure (Monthly) | GCP (Monthly) | |-------------------|-----------------|---------------| | Small (<50 users) | ~ | ~ | | Medium (50-200) | ~ | ~ | | Large (200+) | ~,823 | ~,794 | The Azure deployment uses PostgreSQL instead of MySQL, which provides better performance and features, and includes Azure-specific optimizations for the cloud-native environment.
98 lines
2.3 KiB
YAML
98 lines
2.3 KiB
YAML
apiVersion: v1
|
|
kind: ServiceAccount
|
|
metadata:
|
|
name: erpnext-sa
|
|
namespace: erpnext
|
|
annotations:
|
|
azure.workload.identity/client-id: "${CLIENT_ID}"
|
|
---
|
|
apiVersion: secrets-store.csi.x-k8s.io/v1
|
|
kind: SecretProviderClass
|
|
metadata:
|
|
name: erpnext-secrets
|
|
namespace: erpnext
|
|
spec:
|
|
provider: azure
|
|
parameters:
|
|
usePodIdentity: "false"
|
|
useVMManagedIdentity: "true"
|
|
userAssignedIdentityID: "${CLIENT_ID}"
|
|
keyvaultName: "${KEYVAULT_NAME}"
|
|
cloudName: "AzurePublicCloud"
|
|
objects: |
|
|
array:
|
|
- |
|
|
objectName: erpnext-admin-password
|
|
objectType: secret
|
|
objectAlias: admin-password
|
|
- |
|
|
objectName: erpnext-db-password
|
|
objectType: secret
|
|
objectAlias: db-password
|
|
- |
|
|
objectName: erpnext-redis-key
|
|
objectType: secret
|
|
objectAlias: redis-key
|
|
- |
|
|
objectName: erpnext-api-key
|
|
objectType: secret
|
|
objectAlias: api-key
|
|
- |
|
|
objectName: erpnext-api-secret
|
|
objectType: secret
|
|
objectAlias: api-secret
|
|
- |
|
|
objectName: erpnext-encryption-key
|
|
objectType: secret
|
|
objectAlias: encryption-key
|
|
- |
|
|
objectName: erpnext-jwt-secret
|
|
objectType: secret
|
|
objectAlias: jwt-secret
|
|
tenantId: "${TENANT_ID}"
|
|
secretObjects:
|
|
- secretName: erpnext-secrets
|
|
type: Opaque
|
|
data:
|
|
- objectName: admin-password
|
|
key: admin-password
|
|
- objectName: db-password
|
|
key: db-password
|
|
- objectName: redis-key
|
|
key: redis-key
|
|
- objectName: api-key
|
|
key: api-key
|
|
- objectName: api-secret
|
|
key: api-secret
|
|
- objectName: encryption-key
|
|
key: encryption-key
|
|
- objectName: jwt-secret
|
|
key: jwt-secret
|
|
---
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: azure-storage-secret
|
|
namespace: erpnext
|
|
type: Opaque
|
|
stringData:
|
|
azurestorageaccountname: "${STORAGE_ACCOUNT}"
|
|
azurestorageaccountkey: "${STORAGE_KEY}"
|
|
---
|
|
apiVersion: v1
|
|
kind: Secret
|
|
metadata:
|
|
name: acr-secret
|
|
namespace: erpnext
|
|
type: kubernetes.io/dockerconfigjson
|
|
data:
|
|
.dockerconfigjson: |
|
|
{
|
|
"auths": {
|
|
"${ACR_LOGIN_SERVER}": {
|
|
"username": "${ACR_USERNAME}",
|
|
"password": "${ACR_PASSWORD}",
|
|
"auth": "${ACR_AUTH}"
|
|
}
|
|
}
|
|
} |