diff --git a/.github/workflows/deploy.yml b/.github/workflows/deploy.yml new file mode 100644 index 0000000..20d9a47 --- /dev/null +++ b/.github/workflows/deploy.yml @@ -0,0 +1,49 @@ +name: CI/CD Pipeline + +on: + push: + branches: + - main # اگر اسم برنچ اصلیت master هست، این رو بکن master + +jobs: + build-and-deploy: + runs-on: ubuntu-latest + steps: + - name: Checkout Code + uses: actions/checkout@v4 + + - name: Log in to Docker Hub + uses: docker/login-action@v3 + with: + username: ${{ secrets.DOCKER_USERNAME }} + password: ${{ secrets.DOCKER_PASSWORD }} + + - name: Build and Push Docker Image + uses: docker/build-push-action@v5 + with: + context: . + push: true + tags: didvan/basa_houshan_api:latest + + - name: Deploy to Server + uses: appleboy/ssh-action@v1.0.3 + with: + host: ${{ secrets.SERVER_IP }} + username: ${{ secrets.SERVER_USERNAME }} + # اگر از کلید SSH استفاده می‌کنی این خط بمونه: + key: ${{ secrets.SERVER_SSH_KEY }} + # اگر از پسورد استفاده می‌کنی، خط بالا رو پاک کن و خط پایین رو از کامنت دربیار: + # password: ${{ secrets.SERVER_PASSWORD }} + script: | + # !!! بسیار مهم: مسیر دقیق پوشه پروژه روی سرورت رو اینجا جایگزین کن !!! + cd /home/ubuntu/app/houshan-api + + # لاگین به داکر هاب روی سرور (برای دانلود ایمیج‌های Private) + echo "${{ secrets.DOCKER_PASSWORD }}" | docker login -u "${{ secrets.DOCKER_USERNAME }}" --password-stdin + + # دانلود ایمیج جدید و ری‌استارت فقط همون کانتینر + docker compose pull app + docker compose up -d app + + # پاکسازی ایمیج‌های قدیمی + docker image prune -f \ No newline at end of file diff --git a/src/main.py b/src/main.py index 41e2113..21d5402 100644 --- a/src/main.py +++ b/src/main.py @@ -36,6 +36,7 @@ app.add_middleware( # Create scheduler scheduler = AsyncIOScheduler() + # Add a job to the scheduler tehran_tz = timezone('Asia/Tehran') @@ -89,7 +90,7 @@ async def apk(): ) -# ---------------------------------------------------------------------- +# ---------------------------------------------------- ## 🎥 روت عمومی: تولید ویدئو از متن (با استفاده مستقیم از fal_client) # ---------------------------------------------------------------------- @app.post("/public/generate-video", tags=["public"])