Django Uygulaması Elastic Beanstalk'ta Nasıl Yayına Alınır?
Bu makalede AWS Elastic Beanstalk servisi üzerinde Django uygulamalarının nasıl deploy edildiği anlatılmaktadır.
İçerik
- Ön Koşullar
- Python Sanal Ortam Konfigürasyonu
- Django Projesi
- Django Uygulamasının Elastic Beanstalk için Konfigürasyonu
- Uygulamanın EB CLI ile Yayına Alınması
- Referanslar
Ön Koşullar
Bu makaleye devam etmeden önce aşağıdakilerin yüklü olması gerekmektedir.
- Python 3.7 ya da sonrası
pip
virtualenv
awsebcli
Python Sanal Ortam Konfigürasyonu
virtualenv
kullanılarak önce bir sanal ortam oluşturacağız. Daha sonra bu ortamı kullanarak django
yükleyeceğiz. Sanal ortam kullanarak, uygulamamızın tam olarak hangi paketlere ihtiyaç duyduğu kolayca anlaşılmakta ve böylelikle Amazon EC2 uygulamamızın gerektirdiği paketleri yüklemektedir. Aşağıda sırasıyla unix tabanlı ve windows tabanlı sistemler için sanal ortam oluşturma adımları özetlenmektedir.
-
eb-virt
isimli bir sanal ortam oluşturalım.a. Unix Tabanlı
~$ virtualenv ~/eb-virt
b. Windows
C:\> virtualenv %HOMEPATH%\eb-virt
-
Sanal ortamı aktifleştirelim.
a. Unix Tabanlı
~$ source ~/eb-virt/bin/activate
b. Windows
C:\>%HOMEPATH%\eb-virt\Scripts\activate
-
pip
kullanarak Django yükleyelim.
pip install django
- Django kütüphanesinin yüklendiğini teyit etmek için aşağıdaki kodu çalıştıralım.
pip freeze
Bu kodu çalıştırdıktan sonra sanal ortamımızda yüklü olan tüm kütüphaneleri göreceğiz ve eğer Django düzgün yüklenmiş ise onu da listede göreceğiz. Daha sonra bu kodun çıktısını Elastic Beanstalk’un konfigürasyonu için kullanacağız.
Django Projesi
Şimdi, Django projemizi sanal ortamımızda oluşturmak için hazırız.
-
Eğer sanal ortamımız aktif değilse daha önce gösterildiği üzere sanal ortamımızı aktif edelim.
-
Şimdi aşağıdaki kodu kullanarak
ebdjango
isimli bir django projesi oluşturalım.
django-admin startproject ebdjango
Bu komut ebdjango isimli standart bir Django projesi oluşturur ve bu projesi dizin yapısı aşağıdaki gibidir.
~/ebdjango
|-- ebdjango
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
`-- manage.py
- Daha sonra django uygulamamızı aşağıdaki gibi çalıştıralım.
cd django
python manage.py runserver
-
Şimdi bir web browser’ında
http://127.0.0.1:8000/
linkine gidelim. -
Sunucuyu çalıştırdıktan sonra çıktısına bakılabilir ve ağ sunucusunu durdurmak için Ctrl+C tuşları kullanılabilir.
Django Uygulamasının Elastic Beanstalk için Konfigürasyonu
Artık, django uygulamamızı lokal makinemizde çalıştırabildiğimize göre Elastic Beanstalk konfigürasyonumuza geçebiliriz. Default olarak, Elastic Beanstalk uygulamamızı başlatmak için application.py
isminde bir dosya arar. Bu dosya oluşturduğumyz Django projesi ile hazır olarak gelmediği için bizim bazı düzenlemeler yapmamız gerekir.
Bu konfigürasyon için;
-
Öncelikle sanal ortamımızı aşağıda belirtilen kod ile aktifleştirelim.
a. Unix Tabanlı
~/ebdjango$ source ~/eb-virt/bin/activate
b. Windows
C:\Users\USERNAME\ebdjango>%HOMEPATH%\eb-virt\Scripts\activate
-
Şimdi
pip freeze
komutunu çalıştırıp çıktılarınıreqirements.txt
isimli dosyaya kaydedelim. Bu çıktılar sanal ortamımıza yüklü olan kütüphanelerin listesi ve versiyonlarını içerecektir. Elastic Beanstalk bu dosyayı EC2 makinesi üzerine hangi paketleri yükleyeceğini belirlemek için kullanıyor.
(eb-virt) ~/ebdjango$ pip freeze > requirements.txt
- Şimdi
.ebextensions
isimli bir klasör yaratalım.
(eb-virt) ~/ebdjango$ mkdir .ebextensions
.ebextensions
isimli klasörün içinedjango.config
isimli bir dosya ekleyelim ve bu dosyanın içine aşağıda yer alan kodları kopyalayalım.
option_settings:
aws:elasticbeanstalk:container:python:
WSGIPath: ebdjango.wsgi:application
Bu ayar, Elastic Beanstalk için WSGI betiğinin lokasyonunu belirler ve EB bunu uygulamamızı başlatmak için kullanır.
- Sanal ortamımı deaktif hale getirelim.
(eb-virt) ~/ebdjango$ deactivate
Uygulamamıza yeni paketler eklemek istediğimizde ya da lokalde uygulamamızı çalıştırmak istediğimiz zamanlarda sanal ortamımızı yeniden aktifleştirmemiz gerekir.
Uygulamanın EB CLI ile Yayına Alınması
Uygulamamızı Elastic Beanstalk ile yayınlayabilmek için gereken her şeyi ekledik ve böylelikle uygulamamızın klasörünün aşağıdakine benzemesi gerekmektedir.
~/ebdjango/
|-- .ebextensions
| `-- django.config
|-- ebdjango
| |-- __init__.py
| |-- settings.py
| |-- urls.py
| `-- wsgi.py
|-- db.sqlite3
|-- manage.py
`-- requirements.txt
Bundan sonra, uygulama ortamımızı yaratacağız ve Elastic Beanstalk konfigürasyonu tamamlanmış uygulamamızı yayına alacağız.
Deployment’tan hemen sonra, Elastic Beanstalk tarafından verilen domain adımızı Django ayarlarında yer alan ALLOWED_HOSTS
kısmına ekleyeceğiz. Daha sonra, uygulamamızı tekrar deploy edeceğiz.
Uygulama ortamını yaratıp, uygulamamızı deploy etmek için;
eb init
komutu ile EB CLI repomuzu oluşturacağız.
~/ebdjango$ eb init -p python-3.7 django-tutorial
Application django-tutorial has been created.
Bu komut django-tutorial
isminde bir uygulama oluşturacaktır.
- (İsteğe bağlı)
eb init
kodunu tekrar çalıştıralım ve bir anahtar pair’i oluşturalım ki uygulamızı çalıştıran EC2 instance’ına SSH kullanarak bağlanabilelim.
~/ebdjango$ eb init
Do you want to set up SSH for your instances?
(y/n): y
Select a keypair.
1) my-keypair
2) [ Create new KeyPair ]
Eğer daha önceden oluşturulmuş bir key pair’imiz varsa onu seçebiliriz yoksa yeni bir tane oluşturmak üzere komutları takip edebiliriz.
- Bir ortam oluşturalım ve uygulamızı
eb create
komutu ile deploy edelim.
~/ebdjango$ eb create django-env
Bu komut django-env
isminde bir Elastic Beanstalk ortamı oluşturacaktır. Bu ortamın oluşması yaklaşık olarak 5 dakika sürecektir. Elastic Beanstalk uygulamamızı çalıştırmak için gerekli olan kaynakları oluşturdukça konsola bununla ilgili bilgilendirici mesajlar düşecektir.
- Ortam oluşturulduktan sonra
eb status
kodunu çalıştırarak Elastic Beanstalk tarafından uygulamamıza atanan alan adını görebiliriz.
~/ebdjango$ eb status
Environment details for: django-env
Application name: django-tutorial
...
CNAME: eb-django-app-dev.elasticbeanstalk.com
...
Alan adımız CNAME
anahtarının değeridir.
- Şimdi,
ebdjango
klasörümüzde yer alansettings.py
dosyasını açıp yukarıda aldığımız alan adınıALLOWED_HOSTS
kısmına ekleyebiliriz. Eğer bu kısım yoksa aşağıdaki kodu bu dosyaya ekleyelim.
...
ALLOWED_HOSTS = ['eb-django-app-dev.elasticbeanstalk.com']
...
- Artık uygulamamızı
eb deploy
komutu ile yayına alabiliriz. Bu komutu çalıştırdığımızda EB CLI projemizin içeriğini toparlar ve daha önceden oluşturduğumuz ortam üzerinde deploy eder.
~/ebdjango$ eb deploy
- Ortamın güncellenmesi tamamlandığında aşağıdaki komutu çalıştırarak internet sayfamızı açabiliriz.
~/ebdjango$ eb open
Bu komut ile bir internet tarayıcısı açılacak ve alan adımıza yönlendirileceğiz. Bu aşamada, eğer herhangi bir sorun yoksa lokalimizde oluşturduğumuz Django projemizi ve web sitemizi görmeliyiz.