Django Projesini Digital Ocean App Platform ile Yayına Almak

DigitalOcean-App-Platform-Django

Digital Ocean App Platform ile Django Projesini Yayına Almak

Yazar: Adnan Kaya

İletişim: Linkedin , Upwork

 

Digital Ocean App Platform

 

 

  • App Platform, yazılım geliştiricilerinin uygulamalarını sunucu altyapısı ve yönetimi detaylarına takılmadan hızlıca yayına alabilmelerine olanak sağlayan bir Platform as a Service(PaaS) yani Hizmet olarak Platform diye Türkçeye çevirebileceğimiz bir platformdur.

  • Github, GitLab, Digital Ocean Container Registry, Docker Hub gibi kaynaklardan projenizi çekip yayınlamanıza (deployment) olanak sağlar.

  • Bu eğitimde Github'daki bir django uygulamasını yayına almayı öğreneceğiz.

    1. https://cloud.digitalocean.com a üye olduktan sonra menüdeki Apps linkine tıklayarak App Platform sayfasına gidiyoruz. Burada Create App butonuna tıkladığımızda projemizi oluşturmak için kaynak adresi seçmemiz (select provider) gerekiyor.

      1. Eğer proje reponuzu göremiyorsanız, izinleri (permissions) düzenlemeniz gerekebilir.

    2. Create Resource From Source Code sayfasında repo branch'i (Ör; master) ve yüklemek istediğiniz proje dizinini(source directory) seçmelisiniz. Eğer projeniz repodaki alt bir klasörde değilse yani ana dizinde ise sadece slash ( / ) yazabilirsiniz. Repodaki belirtilen branch'e gelen her kod güncellemesinde (git push vs.) otomatik deployment istiyorsanız Autodeploy seçeceğini checked (işaretli) bırakabilirsiniz. Next diyerek devam edebilirsiniz.

    3. Resources sayfasında Edit Plan diyerek amacınıza uygun kaynakları (CPU, RAM) ve planları (Basic, Pro) seçebilirsiniz. Back diyerek Resources sayfasına tekrar dönebilirsiniz. Resources > App başlığı altında uygulamanızın adı ve türü (Ör; Web Service) görülecektir. Bu uygulamayı silebilir veya Edit diyerek düzenleyebilirsiniz.

      1. Edit butonuna tıkladığınızda <uygulama-adı> Settings diye bir sayfa göreceksiniz. Burada web service component uygulama adını, kaynak türünü (Web Service, Worker, Static Site, Job), Build Phase (inşa edilme fazlarını), Run Command (Çalıştırma Komutlarını), HTTP Portlarını, HTTP Request Route'larını düzenleyebilirsiniz.

      2. Run Command kısmını django için gunicorn --worker-tmp-dir /dev/shm src.wsgi olacak şekilde düzenliyorum. Benim projemde wsgi.py dosyası src dizini altındadır. Kendinize göre değiştirmeyi unutmayınız.

      3. Back diyerek Resources sayfasına dönüyoruz. Add Resource(Optional) kısmında Database ekleyebilirsiniz.

    4. Next diyerek Environment Variables sayfasına geliyoruz. Burada Global yani App üzerinde bütün kaynakların, sevislerin erişeceği ortam değişkenleri tanımlayabileceğimiz gibi component (web service, static site) özelinde de ortam değişkenleri tanımlayabiliyoruz. adnankaya-app ismini verdiğim component'e (web service yani django app) özel ortam değişkenlerini ekliyorum.

      1. DEBUG=False diyerek production modda olduğumu belirtiyorum.

      2. ALLOWED_HOSTS=${APP_DOMAIN} diyerek digital ocean'ın üreteceği domain adını izin verilen hostlara ekliyorum.

      3. SECRET_KEY=mySecr3t-k3y-is_$o_powerFUL diyerek gizli anahtarı belirliyorum. Daha güçlü bir gizli anahtar seçmeniz önerilir.

    5. Next diyerek Info sayfasına gidiyoruz. Burada tüm komponentleri barındıran App ismini, digital ocean paneldeki hangi projenize ait olduğunu, hangi bölgedeki veri merkezinde (data center) olacağını belirleyebilirsiniz.

    6. Next diyerek Review sayfasına gidiyoruz. Burada uygulama, komponent isimleri, türleri, aylık ne kadar ödeyeceğiniz gibi bilgileri özet halinde görebilirsiniz. Create Resources diyerek Build (inşa edilme) işlemini başlatabilirsiniz.

      1. Build işleminde Digital Ocean gerekli paketleri kurar ( requirements.txt )

      2. collectstatic gibi komutları çalıştırır.

    7. python manage.py migrate komutunu manuel yapmak için deployment bittikten sonra Console'a tıklayarak uygulama dizininde yapabiliriz. createsuperuser komutunu da burada çalıştırabiliriz. Migrate yapmadan Live app butonuna tıklayarak uygulamanıza erişmeye çalışırsanız Server Error (500) hatası alabilirsiniz.

    8. Migrate yaptıktan sonra uygulamanıza erişebilirsiniz. Tebrikler!

      1. Önemli NOT: Her deployment sonrası önceki sqlite dosyanızı kaybedersiniz ve veri kaybınız olabilir. Bu yüzden sqlite dışında bir veritabanı kullanabilirsiniz veya sqlite kullanacaksanız yedekleme yapıp veriyi yeni deployment sonrası oluşan sqlite içerisine yüklemeniz gerekebilir.

    9. Apps >> uygulama-adı >>

      1. Overview sayfasında uygulamanızın durumunu, CPU, RAM kullanımını ve diğer genel bilgileri görebilirsiniz.

      2. Insights sayfasında detaylı CPU, RAM, Restart Count, CDN bilgi grafiklerini görebilirsiniz.

      3. Activity sayfasında uygulamanızın deployment zaman ve tarihlerini görebilirsiniz.

      4. Runtime Logs sayfasında çalışma zamanı loglarını görebilirsiniz.

      5. Console sayfasından uygulamanızın dosya ve klasörlerini görebilirsiniz. Migration ve diğer django komutlarını buradan çalıştırabilirsiniz.

      6. Settings sayfasından uygulama ve alt komponentlerin ayarlarını kontrol edebilir, düzenleyebilirsiniz.

 

Statik Dosyalar (STATIC FILES)

  • Statik dosyaların yüklenmediğini farkedebilirsiniz. Bunun için Digital Ocean App Platform şu yöntemi takip etmemizi istiyor.

  1. settings.py içerisinde STATIC_URL = 'static/' ve STATIC_ROOT = BASE_DIR / 'staticroot' ayarlarının olduğunu varsayıyorum. Ekstra static dosyalarınız varsa STATICFILES_DIRS = [ BASE_DIR / 'static/', ] ayarını da eklemek isteyebilirsiniz.

  2. Apps >> uygulama-adı tıkladıktan sonra Create > Create Resource From Source Code seçeneğini seçerek yine Github'dan aynı django reposunu ve istediğimiz branchi, source directory vs. seçiyoruz.

  3. Next dedikten sonra Resources > App altında görülen komponenti, eğer Web Service ise Edit diyerek

    1. Resource Type'ı Static Site olacak şekilde düzenleyip Save diyoruz.

    2. Output Directory staticrootolacak şekilde yazıp Save diyoruz.

    3. Http Request Routes /static olacak şekilde yazıp Save diyoruz.

  4. Back diyerek Resources sayfasına dönüp Next diyoruz.

  5. Environment Variables sayfasında Next diyoruz.

  6. Review sayfasında Billing bölümünde static sites subtotal $0.00 olarak görünür, yani ücretsiz!

  7. Create Resources diyerek yeni komponenti (static site) oluşturabilirsiniz. Artık statik dosyalara erişebilirsiniz!

 

Kaynaklar

Yorumlar