6.6 KiB
6.6 KiB
🚀 Deployment Guide
آخرین بروزرسانی: January 3, 2026
Environment: Kubernetes on Stage
Domain:*.se.kbs1.ir
🌐 آدرسهای سرویسها
| سرویس | آدرس Stage |
|---|---|
| BackOffice UI | https://backoffice.se.kbs1.ir |
| BackOffice BFF | https://backoffice-bff.se.kbs1.ir |
| FrontOffice UI | https://frontoffice.se.kbs1.ir |
| FrontOffice BFF | https://frontoffice-bff.se.kbs1.ir |
| CMS | https://cms.se.kbs1.ir |
| Git Registry | git.se.kbs1.ir |
📦 Git Repositories
| Repo | Remote | URL |
|---|---|---|
| BackOffice | kub-stage | https://git.se.kbs1.ir/admin/BackOffice.git |
| BackOffice.BFF | kub-stage | https://git.se.kbs1.ir/admin/BackOffice.BFF.git |
| FrontOffice | kub-stage | https://git.se.kbs1.ir/admin/FrontOffice.git |
| FrontOffice.BFF | kub-stage | https://git.se.kbs1.ir/admin/FrontOffice.BFF.git |
| CMS | gitea | https://git.se.kbs1.ir/admin/CMS.git |
| Docs | foursatDocs | https://git.se.kbs1.ir/FourSat/docs.git |
🔄 CI/CD Workflow
Gitea Actions
هر ریپو دارای workflow در .gitea/workflows/ است:
# kub-deploy.yml - Deploy to Stage
# prod-deploy.yml - Deploy to Production
مراحل Deploy:
1. Push to branch → Trigger workflow
2. Build Docker image
3. Push to Registry (git.se.kbs1.ir)
4. Deploy to Kubernetes
🐳 Docker Registry
تنظیمات:
env:
EXTERNAL_REGISTRY: git.se.kbs1.ir
IMAGE: backoffice # or backoffice-bff, cms, etc.
# Docker daemon config
daemon.json: |
{
"insecure-registries": ["git.se.kbs1.ir", "gitea-svc:3000"]
}
Image Names:
| سرویس | Image |
|---|---|
| BackOffice | git.se.kbs1.ir/admin/backoffice:latest |
| BackOffice.BFF | git.se.kbs1.ir/admin/backoffice-bff:latest |
| FrontOffice | git.se.kbs1.ir/admin/frontoffice:latest |
| FrontOffice.BFF | git.se.kbs1.ir/admin/frontoffice-bff:latest |
| CMS | git.se.kbs1.ir/admin/cms:latest |
📋 BackOffice Deployment
Prerequisites:
# 1. Build proto DLLs
cd BackOffice
./build-deps.sh
# 2. Verify DLLs
ls libs/*.dll | wc -l # Should be 24
Build & Publish:
cd BackOffice/src
dotnet publish BackOffice/BackOffice.csproj -c Release -o ./publish
Docker Build:
cd BackOffice
docker build -t backoffice:latest .
Dockerfile:
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
# Copy pre-built proto DLLs
COPY ["libs/", "libs/"]
COPY ["src/BackOffice/", "BackOffice/"]
RUN dotnet publish "BackOffice/BackOffice.csproj" -c Release -o /app/publish
FROM nginx:alpine
COPY --from=build /app/publish/wwwroot /usr/share/nginx/html
EXPOSE 80
📋 BFF & CMS Deployment
Standard .NET Web API:
# Build
cd BackOffice.BFF/src
dotnet publish BackOffice.BFF.WebApi/BackOffice.BFF.WebApi.csproj -c Release -o ./publish
# Docker
docker build -t backoffice-bff:latest .
Dockerfile Template:
FROM mcr.microsoft.com/dotnet/aspnet:9.0 AS runtime
FROM mcr.microsoft.com/dotnet/sdk:9.0 AS build
WORKDIR /src
COPY . .
RUN dotnet publish -c Release -o /app
FROM runtime
WORKDIR /app
COPY --from=build /app .
EXPOSE 80
ENTRYPOINT ["dotnet", "BackOffice.BFF.WebApi.dll"]
⚙️ Configuration
appsettings.Staging.json (BackOffice):
{
"Environment": "Staging",
"GwUrl": "https://backoffice-bff.se.kbs1.ir",
"AllowedHosts": "*"
}
appsettings.Staging.json (FrontOffice):
{
"GwUrl": "https://frontoffice-bff.se.kbs1.ir",
"AllowedHosts": "*"
}
appsettings.json (BFF):
{
"ConnectionStrings": {
"DefaultConnection": "Host=postgres;Database=cms;Username=xxx;Password=xxx"
},
"CMSMSAddress": "https://cms.se.kbs1.ir",
"Jwt": {
"Secret": "xxx",
"Issuer": "FourSat",
"Audience": "FourSat"
}
}
🔧 Kubernetes Resources
Deployment Template:
apiVersion: apps/v1
kind: Deployment
metadata:
name: backoffice
spec:
replicas: 2
selector:
matchLabels:
app: backoffice
template:
spec:
containers:
- name: backoffice
image: git.se.kbs1.ir/admin/backoffice:latest
ports:
- containerPort: 80
env:
- name: ASPNETCORE_ENVIRONMENT
value: "Staging"
Service Template:
apiVersion: v1
kind: Service
metadata:
name: backoffice-svc
spec:
selector:
app: backoffice
ports:
- port: 80
targetPort: 80
Ingress Template:
apiVersion: networking.k8s.io/v1
kind: Ingress
metadata:
name: backoffice-ingress
spec:
rules:
- host: backoffice.se.kbs1.ir
http:
paths:
- path: /
pathType: Prefix
backend:
service:
name: backoffice-svc
port:
number: 80
🏥 Health Checks
CMS Health Endpoints:
| Endpoint | استفاده |
|---|---|
/health |
وضعیت کلی |
/health/ready |
Readiness probe |
/health/live |
Liveness probe |
Kubernetes Probes:
livenessProbe:
httpGet:
path: /health/live
port: 80
initialDelaySeconds: 30
periodSeconds: 10
readinessProbe:
httpGet:
path: /health/ready
port: 80
initialDelaySeconds: 5
periodSeconds: 5
📊 Monitoring
Hangfire Dashboard:
https://cms.se.kbs1.ir/hangfire
Logs:
# Kubernetes logs
kubectl logs -f deployment/cms -n foursat
# Docker logs
docker logs -f cms
🔄 Deploy Process
1. Manual Deploy:
# BackOffice
cd BackOffice
./build-deps.sh
git add .
git commit -m "Deploy: v1.x.x"
git push kub-stage main
# BFF/CMS
cd BackOffice.BFF
git add .
git commit -m "Deploy: v1.x.x"
git push kub-stage main
2. Verify Deployment:
# Check pods
kubectl get pods -n foursat
# Check services
kubectl get svc -n foursat
# Check ingress
kubectl get ingress -n foursat
3. Rollback:
# Rollback to previous version
kubectl rollout undo deployment/backoffice -n foursat
🛠️ Troubleshooting
Build Failed:
# Check proto DLLs
ls BackOffice/libs/*.dll | wc -l # Should be 24
# Rebuild
./build-deps.sh
Image Push Failed:
# Login to registry
docker login git.se.kbs1.ir
# Check daemon.json
cat /etc/docker/daemon.json
Pod CrashLoopBackOff:
# Check logs
kubectl logs pod-name -n foursat
# Check events
kubectl describe pod pod-name -n foursat