version: '3.8' x-app: &app build: . image: khatibi-app:latest env_file: production.env volumes: # دقیقاً نام کامل ولوم را اینجا بگذارید: - khatibi-sqlite-db:/app/sqlite:rw restart: unless-stopped networks: - coolify services: # سرویس یک‌بارهٔ مایگریشن: تنها جایی که اسکیما را جلو می‌برد. # بقیهٔ سرویس‌ها منتظر «اتمام موفق» آن می‌مانند، پس هیچ‌وقت با اسکیمای عقب # بالا نمی‌آیند (خطای no such column). اجرای دوباره‌اش بی‌خطر است. migrate: <<: *app restart: "no" command: ["python", "manage.py", "migrate", "--noinput"] web: <<: *app expose: - "8000" depends_on: migrate: condition: service_completed_successfully worker: <<: *app command: ["python", "manage.py", "sms_worker", "--sleep", "3"] depends_on: migrate: condition: service_completed_successfully scheduler: <<: *app command: ["python", "manage.py", "sms_scan", "--loop", "--interval", "300"] depends_on: migrate: condition: service_completed_successfully delivery: <<: *app command: ["python", "manage.py", "sms_delivery", "--sleep", "30"] depends_on: migrate: condition: service_completed_successfully # در انتهای فایل بدون هیچ فاصله‌ای از سر سطر: volumes: khatibi-sqlite-db: networks: coolify: external: true