# راهنمای Package کردن Proto Projects برای Production > تاریخ: December 6, 2025 > وضعیت: Production Deployment Guide --- ## 🎯 مسئله **Development (Local)**: - استفاده از `` برای توسعه سریع - تغییرات proto بلافاصله در همه پروژه‌ها اعمال می‌شود **Production (Server)**: - استفاده از `` و NuGet packages - هر لایه پکیج خودش را منتشر می‌کند - پروژه‌های بالاتر از NuGet server پکیج‌ها را می‌گیرند --- ## 📦 معماری Packaging ``` ┌─────────────────────────────────────────────────────────────┐ │ LAYER 1: CMS Proto │ │ CMSMicroservice.Protobuf → Foursat.CMSMicroservice.Protobuf │ └────────────────────┬────────────────────────────────────────┘ │ (NuGet Package v1.0.x) ▼ ┌─────────────────────────────────────────────────────────────┐ │ LAYER 2: BFF Proto (depends on CMS) │ │ BackOffice.BFF.*.Protobuf → Foursat.BackOffice.BFF.*.Protobuf │ │ FrontOffice.BFF.*.Protobuf → Foursat.FrontOffice.BFF.*.Protobuf │ └────────────────────┬────────────────────────────────────────┘ │ (NuGet Package v1.0.x) ▼ ┌─────────────────────────────────────────────────────────────┐ │ LAYER 3: UI Apps (depends on BFF) │ │ BackOffice UI → uses Foursat.BackOffice.BFF.*.Protobuf │ │ FrontOffice UI → uses Foursat.FrontOffice.BFF.*.Protobuf │ └─────────────────────────────────────────────────────────────┘ ``` --- ## 🔧 Setup 1: Private NuGet Server ### گزینه A: BaGet (پیشنهادی - رایگان و ساده) ```bash # نصب با Docker docker run -d \ --name foursat-nuget \ --restart unless-stopped \ -p 5555:80 \ -e ApiKey=FOURSAT-SECRET-API-KEY-2025 \ -e Storage__Type=FileSystem \ -e Storage__Path=/var/baget/packages \ -e Database__Type=Sqlite \ -e Database__ConnectionString="Data Source=/var/baget/baget.db" \ -e Search__Type=Database \ -v /opt/foursat-nuget/packages:/var/baget/packages \ -v /opt/foursat-nuget/database:/var/baget \ loicsharma/baget:latest # سرور روی http://YOUR_SERVER:5555 در دسترس خواهد بود ``` ### گزینه B: Azure Artifacts ```bash # اضافه کردن feed az artifacts universal publish \ --organization https://dev.azure.com/yourorg \ --feed foursat-packages \ --name CMSMicroservice.Protobuf \ --version 1.0.0 \ --path ./nupkg ``` ### گزینه C: GitHub Packages ```bash # تنظیم authentication dotnet nuget add source https://nuget.pkg.github.com/YOURORG/index.json \ --name github \ --username YOURNAME \ --password ghp_YOUR_TOKEN \ --store-password-in-clear-text ``` --- ## 📝 Setup 2: تنظیمات Proto Projects ### 1. CMS Protobuf (لایه اول - پایه) **CMSMicroservice.Protobuf.csproj** از قبل آماده است: ```xml net9.0 1.0.0 Foursat.CMSMicroservice.Protobuf false FourSat Development Team FourSat gRPC Protobuf contracts for CMS Microservice grpc;protobuf;foursat;cms https://github.com/foursat/cms MIT ``` ### 2. BackOffice.BFF Proto Projects (لایه دوم) مثال برای **BackOffice.BFF.Products.Protobuf**: ```xml net9.0 1.0.0 Foursat.BackOffice.BFF.Products.Protobuf false FourSat Development Team FourSat gRPC Protobuf contracts for BackOffice BFF - Products Module grpc;protobuf;foursat;backoffice ``` ### 3. FrontOffice.BFF Proto Projects (لایه دوم) مشابه BackOffice.BFF: ```xml Foursat.FrontOffice.BFF.Products.Protobuf 1.0.0 ``` --- ## 🚀 فرآیند Deployment ### مرحله 1: Package CMS Protobuf ```bash cd /home/masoud/Apps/project/FourSat/CMS/src/CMSMicroservice.Protobuf # Build در حالت Release dotnet build -c Release # ایجاد NuGet package dotnet pack -c Release -o ./nupkg # Push به NuGet server dotnet nuget push ./nupkg/Foursat.CMSMicroservice.Protobuf.1.0.0.nupkg \ --source http://YOUR_SERVER:5555/v3/index.json \ --api-key FOURSAT-SECRET-API-KEY-2025 ``` ### مرحله 2: Package BackOffice.BFF Protos ```bash # تمام Proto projects را pack کن cd /home/masoud/Apps/project/FourSat/BackOffice.BFF/src/Protobufs for dir in */; do if [ -f "$dir/*.csproj" ]; then cd "$dir" dotnet pack -c Release -o ../../nupkg cd .. fi done # Push همه packages cd ../../nupkg dotnet nuget push "Foursat.BackOffice.BFF.*.nupkg" \ --source http://YOUR_SERVER:5555/v3/index.json \ --api-key FOURSAT-SECRET-API-KEY-2025 ``` ### مرحله 3: Package FrontOffice.BFF Protos ```bash cd /home/masoud/Apps/project/FourSat/FrontOffice.BFF/src/Protobufs for dir in */; do cd "$dir" dotnet pack -c Release -o ../../nupkg cd .. done cd ../../nupkg dotnet nuget push "Foursat.FrontOffice.BFF.*.nupkg" \ --source http://YOUR_SERVER:5555/v3/index.json \ --api-key FOURSAT-SECRET-API-KEY-2025 ``` ### مرحله 4: تنظیم UI Projects برای Production **BackOffice.csproj**: ```xml ``` **FrontOffice.csproj**: مشابه --- ## 🔄 Versioning Strategy ### Semantic Versioning ``` MAJOR.MINOR.PATCH 1.0.0 → Initial release 1.0.1 → Bug fix (backward compatible) 1.1.0 → New feature (backward compatible) 2.0.0 → Breaking change ``` ### مثال: ```xml 1.0.0 1.1.0 2.0.0 ``` --- ## 🛠️ Scripts خودکار ### pack-all-protos.sh ```bash #!/bin/bash # رنگ‌ها برای output GREEN='\033[0;32m' BLUE='\033[0;34m' RED='\033[0;31m' NC='\033[0m' # No Color NUGET_SERVER="http://YOUR_SERVER:5555/v3/index.json" API_KEY="FOURSAT-SECRET-API-KEY-2025" echo -e "${BLUE}🚀 Starting Proto Packaging Process...${NC}\n" # 1. CMS Protobuf echo -e "${GREEN}📦 Step 1: Packaging CMS Protobuf${NC}" cd /home/masoud/Apps/project/FourSat/CMS/src/CMSMicroservice.Protobuf dotnet pack -c Release -o ./nupkg dotnet nuget push ./nupkg/*.nupkg --source $NUGET_SERVER --api-key $API_KEY --skip-duplicate # 2. BackOffice.BFF Protos echo -e "${GREEN}📦 Step 2: Packaging BackOffice.BFF Protos${NC}" cd /home/masoud/Apps/project/FourSat/BackOffice.BFF/src/Protobufs for dir in BackOffice.BFF.*.Protobuf/; do if [ -d "$dir" ]; then echo " → Packaging $dir" cd "$dir" dotnet pack -c Release -o ../../../nupkg cd .. fi done cd ../../nupkg dotnet nuget push Foursat.BackOffice.BFF.*.nupkg --source $NUGET_SERVER --api-key $API_KEY --skip-duplicate # 3. FrontOffice.BFF Protos echo -e "${GREEN}📦 Step 3: Packaging FrontOffice.BFF Protos${NC}" cd /home/masoud/Apps/project/FourSat/FrontOffice.BFF/src/Protobufs for dir in FrontOffice.BFF.*.Protobuf/; do if [ -d "$dir" ]; then echo " → Packaging $dir" cd "$dir" dotnet pack -c Release -o ../../../nupkg cd .. fi done cd ../../nupkg dotnet nuget push Foursat.FrontOffice.BFF.*.nupkg --source $NUGET_SERVER --api-key $API_KEY --skip-duplicate echo -e "\n${GREEN}✅ All packages published successfully!${NC}" ``` اجرا: ```bash chmod +x pack-all-protos.sh ./pack-all-protos.sh ``` --- ## 📋 NuGet.Config برای Development **nuget.config** در root: ```xml ``` --- ## 🔍 بررسی Packages ```bash # لیست packages روی server curl http://YOUR_SERVER:5555/v3/search?q=foursat # دانلود package dotnet add package Foursat.CMSMicroservice.Protobuf --version 1.0.0 # بررسی dependency tree dotnet list package --include-transitive ``` --- ## 📊 خلاصه Packages | Package | Layer | Depends On | Version | |---------|-------|------------|---------| | Foursat.CMSMicroservice.Protobuf | 1 | - | 1.0.x | | Foursat.BackOffice.BFF.Products.Protobuf | 2 | CMS Proto | 1.0.x | | Foursat.BackOffice.BFF.User.Protobuf | 2 | CMS Proto | 1.0.x | | Foursat.BackOffice.BFF.*.Protobuf (14 pkg) | 2 | CMS Proto | 1.0.x | | Foursat.FrontOffice.BFF.Products.Protobuf | 2 | CMS Proto | 1.0.x | | Foursat.FrontOffice.BFF.*.Protobuf (8 pkg) | 2 | CMS Proto | 1.0.x | **جمع**: ~23 NuGet packages --- ## 🎯 مزایا ✅ **Development**: سریع (ProjectReference) ✅ **Production**: مستقل (PackageReference) ✅ **Versioning**: کنترل دقیق تغییرات ✅ **CI/CD**: خودکارسازی آسان ✅ **Rollback**: برگشت به نسخه قبلی ساده ✅ **Team Work**: همکاری بهتر روی Proto ها --- ## 🚨 نکات مهم 1. **همیشه از Semantic Versioning استفاده کنید** 2. **Breaking changes** = Major version bump (2.0.0) 3. **Proto changes باید documented باشند** 4. **هر push به production نیاز به package جدید دارد** 5. **Development با Debug build** = ProjectReference 6. **Production با Release build** = PackageReference --- ## 📞 Support سوال یا مشکل؟ - داکیومنت: `/home/masoud/Apps/project/FourSat/PROTO-PACKAGING-GUIDE.md` - BaGet UI: http://YOUR_SERVER:5555 - Team: FourSat Development Team