Gyro Kapsayıcı: tek seferlik görev ve veritabanı migration
1. Nasıl çalışır
- Görev, seçtiğiniz servisin çalışan sürümünün imajıyla başlar. İmaj digest'e sabitlenir:
:latestgibi bir etiket bu arada değişse bile tam olarak çalışan sürüm kullanılır. - Servisin değişkenleri ve gizli değerleri aynen gelir;
DATABASE_URLgibi bağlantı bilgisini ikinci kez girmeniz gerekmez. - Komut imajın ENTRYPOINT'inin yerine geçer ve liste olarak gider. Kabuk özellikleri (
&&,>,|) içinsh -c "…"yazın. Komut boşsa imajın kendi komutu çalışır. - Görevin portu ve sağlık kontrolü yoktur, bitince durur. Başarısız görev tekrar denenmez (migration iki kez çalışmasın diye).
- Varsayılan boyut servisinkiyle aynıdır; zaman sınırı 30 dakikadır (10 saniye ile 6 saat arası seçebilirsiniz). Süre dolunca görev durdurulur.
- Son 50 görev çıktısıyla birlikte saklanır (son 2.000 satır). Servisin gizli değerleri çıktıda
****olarak görünür.
2. Panelden çalıştırmak
- Hizmetinizde Görevler sekmesini açın, Görev çalıştır'a basın.
- Servis'i seçin (imaj, değişkenler ve gizli değerler bu servisten alınır).
- Komut yazın, örneğin
npm run migrate,php artisan migrate --forceya dapython manage.py migrate. - Gerekirse zaman sınırı, vCPU ve bellek değerlerini değiştirin, Başlat'a basın.
- Görev listesinde durum Başlatılıyor → Çalışıyor → Başarılı / Başarısız olarak ilerler. Çıktı düğmesi logu canlı gösterir; çalışan görevi Durdur ile kesebilirsiniz.
3. CLI, API ve yapay zeka asistanı ile
# çıktıyı canlı izle; CLI görevin çıkış koduyla biter (124 = zaman sınırı doldu)
gyro container run 12345 --service api --follow -- npm run migrate
# kabuk özellikleriyle, 10 dakika sınırla
gyro container run 12345 --service web --wait --time-limit 10m -- sh -c "php artisan migrate --force && php artisan db:seed --force"
gyro container jobs 12345 # son görevler
gyro container job logs 12345 jt0abc12def3 # bir görevin çıktısı
API: POST /cloud/containers/{id}/services/{servis}/run gövdesi {"command": ["npm","run","migrate"], "timeout_seconds": 900}; durum GET /cloud/containers/{id}/jobs/{görev}, çıktı .../logs, durdurma DELETE /cloud/containers/{id}/jobs/{görev}. Tekrar güvenliği için Idempotency-Key başlığı gönderin. Gyro MCP'de araçlar: run_container_job, get_container_job, list_container_jobs, stop_container_job.
4. Pipeline'da dağıtımdan önce
gyro-pipeline.yml dosyasına release ekleyin:
image: api
deploy:
services: [api]
release: ["npm", "run", "migrate"] # yeni imajla, dağıtımdan önce
Derleme bitince görev yeni imajla ve ilk hedef servisin ayarlarıyla çalışır; çalıştırma bu sırada Görev çalışıyor (releasing) durumunda bekler. Onaylı dağıtımda görev onaydan sonra çalışır. Görev başarılıysa dağıtım başlar; başarısız olursa hiçbir şey dağıtılmaz, çalışan sürümünüz aynen kalır ve çalıştırma release_failed hatasıyla biter. Görevin çıktısı Görevler sekmesinde, çalıştırma numarasıyla birlikte görünür.
5. Sınırlar ve ücret
| Düğümlü paketler | Sunucusuz | |
|---|---|---|
| Aynı anda çalışan görev | 2 vCPU'ya kadar paketlerde 2, diğerlerinde 3 | 2 |
| Nerede çalışır | Kendi düğümlerinizde, servislerinizin yanındaki boş kapasitede | Paylaşımlı yalıtılmış havuzda |
| Ücret | Ek ücret yok | Görev (task) gibi vCPU-saniye / GB-saniye; faturada <servis>-job satırı |
- Boş kapasite yoksa görev reddedilir: görevin vCPU/belleğini küçültün, bir kopyayı durdurun ya da paketi büyütün.
- Eşzamanlı görev sınırı destek talebiyle artırılabilir (
gyro limitssınırı gösterir). - Başarısız ya da süresi dolan görev job_failed bildirimini gönderir (Uyarılar sekmesindeki e-posta, SMS, Telegram, webhook kanallarınız).
6. Sık sorulanlar
Migration iki kez çalışır mı? Hayır. Görev başarısız olsa bile kendiliğinden tekrar denenmez. Tekrar çalıştırmak sizin kararınızdır.
Hangi imaj kullanılıyor? Elle başlatılan görevde servisin şu an çalışan sürümü (digest). Servisin çalışan kopyası yoksa ayarlı etiket kullanılır, panel bunu "etiketle" diye gösterir. Pipeline'da yeni derlenen imaj kullanılır.
Komutta <, >, && kullanabilir miyim? Evet. Komut olduğu gibi iletilir; yönlendirme ve zincirleme için sh -c "…" yazın.
Görev servisimi etkiler mi? Servisiniz çalışmaya devam eder. Görev ayrı bir kapsayıcıdır; yalnız aynı kapasiteyi paylaşır.
Zamanlanmış görev (cron) var mı? Henüz yok; tek seferlik görevi kendi zamanlayıcınızdan CLI ya da API ile başlatabilirsiniz.
Geri bildiriminiz için teşekkürler!
