Update CI/CD workflow to streamline deployment processes and enhance Azure service integration. Revise README.md to improve clarity and navigation, adding new sections for deployment steps and service configurations.
Some checks failed
CI / Lint (push) Has been cancelled
CI / Test Python (3.1) (push) Has been cancelled
CI / Test Python (3.11) (push) Has been cancelled
CI / Test Python (3.8) (push) Has been cancelled
CI / Test Python (3.9) (push) Has been cancelled
CI / Test C++ (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / Build Documentation (push) Has been cancelled
CI / Build (push) Has been cancelled
Some checks failed
CI / Lint (push) Has been cancelled
CI / Test Python (3.1) (push) Has been cancelled
CI / Test Python (3.11) (push) Has been cancelled
CI / Test Python (3.8) (push) Has been cancelled
CI / Test Python (3.9) (push) Has been cancelled
CI / Test C++ (push) Has been cancelled
CI / Security Scan (push) Has been cancelled
CI / Build Documentation (push) Has been cancelled
CI / Build (push) Has been cancelled
This commit is contained in:
448
azure-deployment-config.yml
Normal file
448
azure-deployment-config.yml
Normal file
@@ -0,0 +1,448 @@
|
||||
# Azure Deployment Configuration for NowYouSeeMe
|
||||
# This file defines all Azure resources and services for the project
|
||||
|
||||
# Azure Resource Group Configuration
|
||||
resource_group:
|
||||
name: "nowyouseeme-rg"
|
||||
location: "East US"
|
||||
tags:
|
||||
project: "NowYouSeeMe"
|
||||
environment: "production"
|
||||
managed_by: "terraform"
|
||||
|
||||
# Azure Container Registry (ACR) Configuration
|
||||
container_registry:
|
||||
name: "nowyouseemeacr"
|
||||
sku: "Premium" # For advanced features like geo-replication
|
||||
admin_enabled: true
|
||||
tags:
|
||||
purpose: "container-registry"
|
||||
project: "NowYouSeeMe"
|
||||
|
||||
# Azure Container Instances (ACI) Configuration
|
||||
container_instances:
|
||||
- name: "nowyouseeme-api"
|
||||
image: "nowyouseemeacr.azurecr.io/nowyouseeme:latest"
|
||||
cpu: "2.0"
|
||||
memory: "4.0"
|
||||
ports:
|
||||
- 8000
|
||||
environment_variables:
|
||||
- DATABASE_URL
|
||||
- REDIS_URL
|
||||
- JWT_SECRET_KEY
|
||||
- AZURE_STORAGE_CONNECTION_STRING
|
||||
tags:
|
||||
component: "api"
|
||||
environment: "production"
|
||||
|
||||
- name: "nowyouseeme-worker"
|
||||
image: "nowyouseemeacr.azurecr.io/nowyouseeme-worker:latest"
|
||||
cpu: "1.0"
|
||||
memory: "2.0"
|
||||
environment_variables:
|
||||
- REDIS_URL
|
||||
- DATABASE_URL
|
||||
- AZURE_STORAGE_CONNECTION_STRING
|
||||
tags:
|
||||
component: "worker"
|
||||
environment: "production"
|
||||
|
||||
# Azure App Service Configuration
|
||||
app_service:
|
||||
name: "nowyouseeme-app"
|
||||
plan:
|
||||
name: "nowyouseeme-plan"
|
||||
sku: "P1v2" # Premium tier for better performance
|
||||
size: "P1v2"
|
||||
runtime: "python|3.9"
|
||||
always_on: true
|
||||
app_settings:
|
||||
- name: "WEBSITES_ENABLE_APP_SERVICE_STORAGE"
|
||||
value: "true"
|
||||
- name: "PYTHON_VERSION"
|
||||
value: "3.9"
|
||||
- name: "SCM_DO_BUILD_DURING_DEPLOYMENT"
|
||||
value: "true"
|
||||
tags:
|
||||
component: "web-app"
|
||||
environment: "production"
|
||||
|
||||
# Azure Functions Configuration
|
||||
functions:
|
||||
name: "nowyouseeme-functions"
|
||||
plan:
|
||||
name: "nowyouseeme-functions-plan"
|
||||
sku: "Consumption"
|
||||
runtime: "python"
|
||||
app_settings:
|
||||
- name: "FUNCTIONS_WORKER_RUNTIME"
|
||||
value: "python"
|
||||
- name: "AzureWebJobsStorage"
|
||||
value: "UseDevelopmentStorage=true"
|
||||
tags:
|
||||
component: "serverless"
|
||||
environment: "production"
|
||||
|
||||
# Azure Kubernetes Service (AKS) Configuration
|
||||
kubernetes:
|
||||
cluster:
|
||||
name: "nowyouseeme-aks"
|
||||
kubernetes_version: "1.25.5"
|
||||
node_count: 3
|
||||
vm_size: "Standard_D4s_v3"
|
||||
enable_auto_scaling: true
|
||||
min_count: 1
|
||||
max_count: 10
|
||||
node_pools:
|
||||
- name: "system"
|
||||
vm_size: "Standard_D2s_v3"
|
||||
node_count: 2
|
||||
mode: "System"
|
||||
- name: "user"
|
||||
vm_size: "Standard_D4s_v3"
|
||||
node_count: 3
|
||||
mode: "User"
|
||||
enable_auto_scaling: true
|
||||
min_count: 1
|
||||
max_count: 10
|
||||
tags:
|
||||
component: "kubernetes"
|
||||
environment: "production"
|
||||
|
||||
# Azure Database for PostgreSQL Configuration
|
||||
database:
|
||||
name: "nowyouseeme-db"
|
||||
server_name: "nowyouseeme-server"
|
||||
sku_name: "GP_Gen5_4" # General Purpose, 4 vCores
|
||||
storage_mb: 51200
|
||||
backup_retention_days: 7
|
||||
geo_redundant_backup: "Enabled"
|
||||
ssl_enforcement: "Enabled"
|
||||
version: "11"
|
||||
administrator_login: "nowyouseeme_admin"
|
||||
tags:
|
||||
component: "database"
|
||||
environment: "production"
|
||||
|
||||
# Azure Cache for Redis Configuration
|
||||
redis:
|
||||
name: "nowyouseeme-redis"
|
||||
capacity: 2 # C2 tier
|
||||
family: "C"
|
||||
sku: "Standard"
|
||||
enable_non_ssl_port: false
|
||||
minimum_tls_version: "1.2"
|
||||
tags:
|
||||
component: "cache"
|
||||
environment: "production"
|
||||
|
||||
# Azure Storage Account Configuration
|
||||
storage:
|
||||
name: "nowyouseemestorage"
|
||||
account_tier: "Standard"
|
||||
account_replication_type: "LRS"
|
||||
account_kind: "StorageV2"
|
||||
access_tier: "Hot"
|
||||
enable_https_traffic_only: true
|
||||
min_tls_version: "TLS1_2"
|
||||
containers:
|
||||
- name: "uploads"
|
||||
public_access: "None"
|
||||
- name: "models"
|
||||
public_access: "None"
|
||||
- name: "logs"
|
||||
public_access: "None"
|
||||
tags:
|
||||
component: "storage"
|
||||
environment: "production"
|
||||
|
||||
# Azure Cognitive Services Configuration
|
||||
cognitive_services:
|
||||
- name: "nowyouseeme-vision"
|
||||
kind: "ComputerVision"
|
||||
sku: "S1"
|
||||
location: "East US"
|
||||
- name: "nowyouseeme-speech"
|
||||
kind: "SpeechServices"
|
||||
sku: "S0"
|
||||
location: "East US"
|
||||
- name: "nowyouseeme-language"
|
||||
kind: "TextAnalytics"
|
||||
sku: "S"
|
||||
location: "East US"
|
||||
- name: "nowyouseeme-custom-vision"
|
||||
kind: "CustomVision.Training"
|
||||
sku: "S0"
|
||||
location: "East US"
|
||||
|
||||
# Azure Application Insights Configuration
|
||||
application_insights:
|
||||
name: "nowyouseeme-insights"
|
||||
application_type: "web"
|
||||
retention_in_days: 90
|
||||
sampling_percentage: 100
|
||||
enable_profiler: true
|
||||
enable_snapshot_debugger: true
|
||||
tags:
|
||||
component: "monitoring"
|
||||
environment: "production"
|
||||
|
||||
# Azure Log Analytics Workspace Configuration
|
||||
log_analytics:
|
||||
name: "nowyouseeme-logs"
|
||||
sku: "PerGB2018"
|
||||
retention_in_days: 30
|
||||
tags:
|
||||
component: "logging"
|
||||
environment: "production"
|
||||
|
||||
# Azure Key Vault Configuration
|
||||
key_vault:
|
||||
name: "nowyouseeme-kv"
|
||||
sku: "standard"
|
||||
enabled_for_disk_encryption: true
|
||||
enabled_for_template_deployment: true
|
||||
enabled_for_soft_delete: true
|
||||
soft_delete_retention_in_days: 7
|
||||
purge_protection_enabled: false
|
||||
secrets:
|
||||
- name: "database-connection-string"
|
||||
value: "postgresql://user:pass@host:5432/db"
|
||||
- name: "redis-connection-string"
|
||||
value: "redis://host:6379"
|
||||
- name: "jwt-secret-key"
|
||||
value: "your-secret-key"
|
||||
- name: "azure-storage-connection-string"
|
||||
value: "DefaultEndpointsProtocol=https;AccountName=...;AccountKey=...;EndpointSuffix=core.windows.net"
|
||||
tags:
|
||||
component: "security"
|
||||
environment: "production"
|
||||
|
||||
# Azure Virtual Network Configuration
|
||||
virtual_network:
|
||||
name: "nowyouseeme-vnet"
|
||||
address_space: ["10.0.0.0/16"]
|
||||
subnets:
|
||||
- name: "default"
|
||||
address_prefix: "10.0.1.0/24"
|
||||
- name: "aks"
|
||||
address_prefix: "10.0.2.0/24"
|
||||
- name: "app-service"
|
||||
address_prefix: "10.0.3.0/24"
|
||||
- name: "database"
|
||||
address_prefix: "10.0.4.0/24"
|
||||
tags:
|
||||
component: "networking"
|
||||
environment: "production"
|
||||
|
||||
# Azure Load Balancer Configuration
|
||||
load_balancer:
|
||||
name: "nowyouseeme-lb"
|
||||
sku: "Standard"
|
||||
frontend_ip_configurations:
|
||||
- name: "frontend-ip"
|
||||
public_ip_address_name: "nowyouseeme-public-ip"
|
||||
backend_address_pools:
|
||||
- name: "backend-pool"
|
||||
health_probes:
|
||||
- name: "http-probe"
|
||||
protocol: "Http"
|
||||
port: 8000
|
||||
request_path: "/health"
|
||||
load_balancing_rules:
|
||||
- name: "http-rule"
|
||||
protocol: "Tcp"
|
||||
frontend_port: 80
|
||||
backend_port: 8000
|
||||
frontend_ip_configuration_name: "frontend-ip"
|
||||
backend_address_pool_name: "backend-pool"
|
||||
probe_name: "http-probe"
|
||||
tags:
|
||||
component: "load-balancer"
|
||||
environment: "production"
|
||||
|
||||
# Azure CDN Configuration
|
||||
cdn:
|
||||
name: "nowyouseeme-cdn"
|
||||
sku: "Standard_Microsoft"
|
||||
optimization_type: "GeneralWebDelivery"
|
||||
origin:
|
||||
name: "nowyouseeme-storage"
|
||||
host_name: "nowyouseemestorage.blob.core.windows.net"
|
||||
tags:
|
||||
component: "cdn"
|
||||
environment: "production"
|
||||
|
||||
# Azure DevOps Configuration
|
||||
devops:
|
||||
organization: "your-organization"
|
||||
project: "NowYouSeeMe"
|
||||
repositories:
|
||||
- name: "nowyouseeme"
|
||||
type: "GitHub"
|
||||
pipelines:
|
||||
- name: "CI-CD-Pipeline"
|
||||
yaml_path: ".github/workflows/cd.yml"
|
||||
work_items:
|
||||
- type: "Epic"
|
||||
title: "NowYouSeeMe Platform Development"
|
||||
description: "Complete platform development and deployment"
|
||||
- type: "Feature"
|
||||
title: "ARROMIS Integration"
|
||||
description: "Integrate ARROMIS Admin Dashboard"
|
||||
- type: "Feature"
|
||||
title: "Free Space Manipulation"
|
||||
description: "Implement advanced electromagnetic field manipulation"
|
||||
|
||||
# Environment Variables for Applications
|
||||
environment_variables:
|
||||
production:
|
||||
DATABASE_URL: "postgresql://user:pass@nowyouseeme-server.postgres.database.azure.com:5432/nowyouseeme"
|
||||
REDIS_URL: "redis://nowyouseeme-redis.redis.cache.windows.net:6380"
|
||||
JWT_SECRET_KEY: "@Microsoft.KeyVault(SecretUri=https://nowyouseeme-kv.vault.azure.net/secrets/jwt-secret-key/)"
|
||||
AZURE_STORAGE_CONNECTION_STRING: "@Microsoft.KeyVault(SecretUri=https://nowyouseeme-kv.vault.azure.net/secrets/azure-storage-connection-string/)"
|
||||
AZURE_CUSTOM_VISION_ENDPOINT: "https://eastus.api.cognitive.microsoft.com/"
|
||||
AZURE_CUSTOM_VISION_KEY: "@Microsoft.KeyVault(SecretUri=https://nowyouseeme-kv.vault.azure.net/secrets/azure-custom-vision-key/)"
|
||||
AZURE_CUSTOM_VISION_PROJECT_ID: "your-project-id"
|
||||
APP_INSIGHTS_CONNECTION_STRING: "InstrumentationKey=your-key;IngestionEndpoint=https://eastus-0.in.applicationinsights.azure.com/"
|
||||
LOG_ANALYTICS_WORKSPACE_ID: "your-workspace-id"
|
||||
LOG_ANALYTICS_WORKSPACE_KEY: "@Microsoft.KeyVault(SecretUri=https://nowyouseeme-kv.vault.azure.net/secrets/log-analytics-key/)"
|
||||
|
||||
staging:
|
||||
DATABASE_URL: "postgresql://user:pass@nowyouseeme-staging-server.postgres.database.azure.com:5432/nowyouseeme-staging"
|
||||
REDIS_URL: "redis://nowyouseeme-staging-redis.redis.cache.windows.net:6380"
|
||||
JWT_SECRET_KEY: "@Microsoft.KeyVault(SecretUri=https://nowyouseeme-staging-kv.vault.azure.net/secrets/jwt-secret-key/)"
|
||||
AZURE_STORAGE_CONNECTION_STRING: "@Microsoft.KeyVault(SecretUri=https://nowyouseeme-staging-kv.vault.azure.net/secrets/azure-storage-connection-string/)"
|
||||
|
||||
# Monitoring and Alerting Configuration
|
||||
monitoring:
|
||||
alert_rules:
|
||||
- name: "High CPU Usage"
|
||||
condition: "cpu_percentage > 80"
|
||||
severity: "Warning"
|
||||
action_groups: ["nowyouseeme-alerts"]
|
||||
- name: "High Memory Usage"
|
||||
condition: "memory_percentage > 85"
|
||||
severity: "Warning"
|
||||
action_groups: ["nowyouseeme-alerts"]
|
||||
- name: "Database Connection Issues"
|
||||
condition: "database_connection_failed > 0"
|
||||
severity: "Critical"
|
||||
action_groups: ["nowyouseeme-alerts"]
|
||||
- name: "Application Errors"
|
||||
condition: "exceptions_rate > 5"
|
||||
severity: "Critical"
|
||||
action_groups: ["nowyouseeme-alerts"]
|
||||
|
||||
action_groups:
|
||||
- name: "nowyouseeme-alerts"
|
||||
email_receivers:
|
||||
- name: "DevOps Team"
|
||||
email_address: "devops@nowyouseeme.com"
|
||||
- name: "On-Call Engineer"
|
||||
email_address: "oncall@nowyouseeme.com"
|
||||
sms_receivers:
|
||||
- name: "Emergency Contact"
|
||||
phone_number: "+1234567890"
|
||||
webhook_receivers:
|
||||
- name: "Slack Notifications"
|
||||
service_uri: "https://hooks.slack.com/services/your-webhook-url"
|
||||
|
||||
# Security Configuration
|
||||
security:
|
||||
network_security_groups:
|
||||
- name: "nowyouseeme-nsg"
|
||||
rules:
|
||||
- name: "Allow-HTTP"
|
||||
priority: 100
|
||||
direction: "Inbound"
|
||||
access: "Allow"
|
||||
protocol: "Tcp"
|
||||
source_port_range: "*"
|
||||
destination_port_range: "80"
|
||||
source_address_prefix: "Internet"
|
||||
destination_address_prefix: "*"
|
||||
- name: "Allow-HTTPS"
|
||||
priority: 110
|
||||
direction: "Inbound"
|
||||
access: "Allow"
|
||||
protocol: "Tcp"
|
||||
source_port_range: "*"
|
||||
destination_port_range: "443"
|
||||
source_address_prefix: "Internet"
|
||||
destination_address_prefix: "*"
|
||||
- name: "Allow-SSH"
|
||||
priority: 120
|
||||
direction: "Inbound"
|
||||
access: "Allow"
|
||||
protocol: "Tcp"
|
||||
source_port_range: "*"
|
||||
destination_port_range: "22"
|
||||
source_address_prefix: "Internet"
|
||||
destination_address_prefix: "*"
|
||||
|
||||
firewall_rules:
|
||||
- name: "Allow-Azure-Services"
|
||||
start_ip_address: "0.0.0.0"
|
||||
end_ip_address: "0.0.0.0"
|
||||
|
||||
# Backup and Disaster Recovery Configuration
|
||||
backup:
|
||||
database:
|
||||
retention_period: "P30D" # 30 days
|
||||
backup_redundancy: "Geo"
|
||||
geo_redundant_backup: "Enabled"
|
||||
storage:
|
||||
soft_delete_enabled: true
|
||||
soft_delete_retention_in_days: 7
|
||||
versioning_enabled: true
|
||||
key_vault:
|
||||
soft_delete_enabled: true
|
||||
soft_delete_retention_in_days: 7
|
||||
purge_protection_enabled: false
|
||||
|
||||
# Cost Optimization Configuration
|
||||
cost_optimization:
|
||||
auto_scaling:
|
||||
enabled: true
|
||||
min_instances: 1
|
||||
max_instances: 10
|
||||
scale_out_threshold: 70
|
||||
scale_in_threshold: 30
|
||||
reserved_instances:
|
||||
enabled: true
|
||||
term: "1 Year"
|
||||
payment_option: "All Upfront"
|
||||
spot_instances:
|
||||
enabled: false # Not recommended for production workloads
|
||||
storage_tier:
|
||||
hot_tier: true
|
||||
cool_tier: false
|
||||
archive_tier: false
|
||||
|
||||
# Compliance and Governance Configuration
|
||||
compliance:
|
||||
tags:
|
||||
- key: "Environment"
|
||||
value: "Production"
|
||||
- key: "Project"
|
||||
value: "NowYouSeeMe"
|
||||
- key: "Owner"
|
||||
value: "DevOps Team"
|
||||
- key: "CostCenter"
|
||||
value: "IT-001"
|
||||
- key: "DataClassification"
|
||||
value: "Internal"
|
||||
- key: "Compliance"
|
||||
value: "GDPR, HIPAA, SOX"
|
||||
|
||||
policies:
|
||||
- name: "Enforce-Tagging"
|
||||
description: "Enforce mandatory tagging on all resources"
|
||||
- name: "Restrict-Network-Access"
|
||||
description: "Restrict network access to approved IP ranges"
|
||||
- name: "Encrypt-Data-at-Rest"
|
||||
description: "Ensure all data is encrypted at rest"
|
||||
- name: "Audit-Logging"
|
||||
description: "Enable audit logging for all resources"
|
||||
Reference in New Issue
Block a user