يتألق Golang في تطوير الواجهة الخلفية والعمليات المتزامنة وهو مجموعة مثالية لبناء تطبيقات خلفية قابلة للتطوير وفعالة. نظرًا لقلة المنشورات التي تدور حول بنية الخدمات الصغيرة مع مساحات عمل go والتي تعد أداة رائعة لمشاركة التعليمات البرمجية المعيارية من خلال خدمات مختلفة، قررت مشاركة التنفيذ الخاص بي.
mkdir docker touch docker/Dockerfile.authentication touch docker/Dockerfile.users mkdir -p services/authentication mkdir -p services/users mkdir -p shared/utils touch docker-compose.yml
ستنتج أوامر الصدفة التالية بنية شجرة المجلدات التالية
في جذر المشروع، قم بإنشاء مساحة عمل go ببساطة باستخدام أمر بسيط go Work init سيؤدي ذلك إلى إنتاج ملف go.work
بعد ذلك، قم بتهيئة جميع مشاريع go المختلفة التي ستكون قادرة على الاحتفاظ بالتبعيات، وتشغيل قواعد التعليمات البرمجية.
cd services/authentication && go mod init github.com/LegationPro/ms/services/authentication cd ../.. && cd services/users && go mod init github.com/LegationPro/ms/services/users cd ../.. && cd shared && go mod init github.com/LegationPro/ms/shared
بعد تشغيل الأوامر التالية، يجب أن يبدو مشروعك بهذا الشكل
بعد ذلك، سنقوم بملء مساحة العمل go وإخبارها بما هو جزء من مساحة العمل عن طريق تشغيل الأمر التالي
الذهاب إلى العمل واستخدام ./services/authentication ./services/users ./shared
سيؤدي هذا إلى ملء ملف go.work
go 1.23.1 use ( ./services/authentication ./services/users ./shared )
دعونا نراجع ملف docker-compose.yml أولاً.
يجب أن يبدو ملف docker-compose.yml الخاص بك بهذا الشكل
services: authentication: build: context: . dockerfile: docker/Dockerfile.authentication volumes: - ./services/authentication:/app/authentication - ./shared:/app/shared ports: - "8081:8081" users: build: context: . dockerfile: docker/Dockerfile.users volumes: - ./services/users:/app/users - ./shared:/app/shared ports: - "8082:8082"
نطلب من docker-compose استخدام الخدمات التالية وهي المصادقة والمستخدمين.
نحن نقدم السياق الجذر، حتى نتمكن من الوصول إلى الملفات والمجلدات على مستوى الجذر.
قم بتوفير موقع ملف الإرساء.
حدد الحجم المحدد للحاوية وفي النهاية قم بكشف منفذ للحاوية لتعمل عليه.
يعد إعداد ملف Dockerfile أمرًا بسيطًا جدًا ومباشرًا.
نقوم بسحب أحدث صورة لـ golang alpine، ونقوم بتعيين دليل عمل، ونقل بعض التعليمات البرمجية، وضبطها للعمل مع بنية مساحة عمل go وتشغيلها ببساطة.
docker/Dockerfile.authentication
# Pull golang image FROM golang:1.23-alpine # Switch to /app as the working directory WORKDIR /app # Copy the authentication codebase over to our container COPY ./services/authentication /app/authentication/ # Copy the shared codebase and libraries that are shared across our apps inside the container COPY ./shared /app/shared # Initialize go workspace inside of our container RUN go work init # Assign different codebases to go workspaces RUN go work use ./authentication ./shared # Simply run our service with this simple command CMD ["go", "run", "./authentication"]
Dockerfile.users
# Pull golang image FROM golang:1.23-alpine # Switch to /app as the working directory WORKDIR /app # Copy the authentication codebase over to our container COPY ./services/users /app/users/ # Copy the shared codebase and libraries that are shared across our apps inside the container COPY ./shared /app/shared # Initialize go workspace inside of our container RUN go work init # Assign different codebases to go workspaces RUN go work use ./users ./shared # Simply run our service with this simple command CMD ["go", "run", "./users"]
الخدمات/المصادقة/main.go
package main import ( "fmt" "github.com/LegationPro/ms/shared/utils" ) func main() { fmt.Println(utils.SomeAuthFunc()) }
الخدمات/المستخدمين/main.go
package main import ( "fmt" "github.com/LegationPro/ms/shared/utils" ) func main() { fmt.Println(utils.SomeUserFunc()) }
shared/utils/utils.go
package utils func SomeAuthFunc() string { return "Some auth func" } func SomeUserFunc() string { return "Some user func" }
يجب أن يبدو الهيكل هكذا الآن
إنشاء عامل الإرساء --بناء
للتأكد من أن كل شيء يعمل يجب أن يكون الإخراج كما يلي:
هذا كل شيء، لديك إعداد معماري متكامل للخدمات الصغيرة لمساحة عمل go! ??
كود المصدر: https://github.com/LegationPro/go-microservice-modular-docker-setup
شكرًا لك على قراءة منشور مدونتي، آمل أن يكون هذا مفيدًا ❤️!
تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.
Copyright© 2022 湘ICP备2022001581号-3