394 lines
6.6 KiB
Markdown
394 lines
6.6 KiB
Markdown
# 🚀 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/` است:
|
|
|
|
```yaml
|
|
# 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
|
|
|
|
### تنظیمات:
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```bash
|
|
# 1. Build proto DLLs
|
|
cd BackOffice
|
|
./build-deps.sh
|
|
|
|
# 2. Verify DLLs
|
|
ls libs/*.dll | wc -l # Should be 24
|
|
```
|
|
|
|
### Build & Publish:
|
|
|
|
```bash
|
|
cd BackOffice/src
|
|
dotnet publish BackOffice/BackOffice.csproj -c Release -o ./publish
|
|
```
|
|
|
|
### Docker Build:
|
|
|
|
```bash
|
|
cd BackOffice
|
|
docker build -t backoffice:latest .
|
|
```
|
|
|
|
### Dockerfile:
|
|
|
|
```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:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```dockerfile
|
|
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):
|
|
|
|
```json
|
|
{
|
|
"Environment": "Staging",
|
|
"GwUrl": "https://backoffice-bff.se.kbs1.ir",
|
|
"AllowedHosts": "*"
|
|
}
|
|
```
|
|
|
|
### appsettings.Staging.json (FrontOffice):
|
|
|
|
```json
|
|
{
|
|
"GwUrl": "https://frontoffice-bff.se.kbs1.ir",
|
|
"AllowedHosts": "*"
|
|
}
|
|
```
|
|
|
|
### appsettings.json (BFF):
|
|
|
|
```json
|
|
{
|
|
"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:
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```yaml
|
|
apiVersion: v1
|
|
kind: Service
|
|
metadata:
|
|
name: backoffice-svc
|
|
spec:
|
|
selector:
|
|
app: backoffice
|
|
ports:
|
|
- port: 80
|
|
targetPort: 80
|
|
```
|
|
|
|
### Ingress Template:
|
|
|
|
```yaml
|
|
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:
|
|
|
|
```yaml
|
|
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:
|
|
```bash
|
|
# Kubernetes logs
|
|
kubectl logs -f deployment/cms -n foursat
|
|
|
|
# Docker logs
|
|
docker logs -f cms
|
|
```
|
|
|
|
---
|
|
|
|
## 🔄 Deploy Process
|
|
|
|
### 1. Manual Deploy:
|
|
|
|
```bash
|
|
# 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:
|
|
|
|
```bash
|
|
# Check pods
|
|
kubectl get pods -n foursat
|
|
|
|
# Check services
|
|
kubectl get svc -n foursat
|
|
|
|
# Check ingress
|
|
kubectl get ingress -n foursat
|
|
```
|
|
|
|
### 3. Rollback:
|
|
|
|
```bash
|
|
# Rollback to previous version
|
|
kubectl rollout undo deployment/backoffice -n foursat
|
|
```
|
|
|
|
---
|
|
|
|
## 🛠️ Troubleshooting
|
|
|
|
### Build Failed:
|
|
|
|
```bash
|
|
# Check proto DLLs
|
|
ls BackOffice/libs/*.dll | wc -l # Should be 24
|
|
|
|
# Rebuild
|
|
./build-deps.sh
|
|
```
|
|
|
|
### Image Push Failed:
|
|
|
|
```bash
|
|
# Login to registry
|
|
docker login git.se.kbs1.ir
|
|
|
|
# Check daemon.json
|
|
cat /etc/docker/daemon.json
|
|
```
|
|
|
|
### Pod CrashLoopBackOff:
|
|
|
|
```bash
|
|
# Check logs
|
|
kubectl logs pod-name -n foursat
|
|
|
|
# Check events
|
|
kubectl describe pod pod-name -n foursat
|
|
```
|
|
|
|
---
|
|
|
|
## 📚 مستندات مرتبط
|
|
|
|
- [BackOffice Documentation](./01-BACKOFFICE.md)
|
|
- [Proto Guide](./02-PROTO-GUIDE.md)
|
|
- [CMS Documentation](./04-CMS.md)
|