Cemre Acar
AWS EC2 Django Projesi Kurulumu

AWS EC2 Django Projesi Kurulumu

AWS (Amazon Web Services) , Bulut Bilişim ve Depolama Hizmeti sunan Microsoft ve Google gibi büyük bir servis sağlayıcısıdır. IaaS, SaaS, PaaS pazarında büyük rolü olan diğer servis sağlayıcıları ile rakip durumundadır.
Bu yazıda bahsedeceğimiz Amazon EC2 ( Elastic Compute Cloud ) , bulutta güvenli, yeniden boyutlandırılabilen işlem kapasitesi sağlayan bir web hizmetidir. Geliştiriciler için web ölçeğinde bulut bilişimi kolaylaştırmak amacıyla Amazon tarafından tasarlanmıştır. Kısaca bu serviste , bulutta kendi web sitemizi veya kendi projelerimizi çalıştırabiliriz. Ben de bu yazıda bir Django projesini AWS'nin EC2 hizmetinde Nginx Server ve Uwsgi kullanarak çalıştırmayı anlatacağım. Ayrıca AWS Türkçe içerik oluşturmak adına temel bir adım atmış olacağız.

İlk olarak AWS 'de bir hesabımız olması gerekiyor buradan hemen oluşturabiliriz. Yeni üye olan kullanıcılar için AWS 12 ay ücretsiz kullanım sağlıyor ve bu kullanıma Amazon EC2, Amazon S3, ve Amazon DynamoDB kullanımı da dahil. 

Üye olduktan sonra Services > EC2 servisine tıklıyoruz. Buradaki "Instance" kavramı sunucumuz oluyor. Launch Instance butonuna tıklıyoruz ve Amazon Machine Image (AMI) adımı açılıyor. Bu kısımda sunucumuzda hangi işletim sistemini kullanacağımızı soruyor. Ben Linux'un populer bir dağıtımı olan Ubuntu işletim sistemini tercih ediyorum. Daha sonra Sunucu Tipimizi belirlememizi isteyen bir ekran karşımıza çıkıyor. Burada eğer ücretsiz olarak devam etmek isterseniz AWS'nin önerdiği "Free Tier" kodlu tipi seçmelisiniz. 

Sunucu Tipi Belirleme Ekranı

AWS EC2 Creating Screen
Sunucu tipimizi belirledikten sonra güvenli grubu konfigürasyon adımı karşımıza çıkıyor. Bu adımda SSH portu default olarak sunulmuş durumda. Bu adımda ek olarak "Add Rule" butonuna tıklıyoruz ve HTTP portu olan 80 portunu ekliyoruz. Eğer siz de ileride farklı bir port ekleyecek olursanız EC2 Security Groups ayarlarından ekleyebilirsiniz. 
Tüm bu adımları geçtikten sonra Launch butonuna tıklıyoruz. Şimdi ise karşımıza daha önce oluşturulmuş bir key pair seçmemizi ya da yeni bir key pair oluşturmamızı isteyen küçük pencere geliyor. Biz ilk defa oluşturacağımız için "Create new key pair" seçeneğini seçip adını yazıyoruz. Sonrasında bunu indirmemiz gerekiyor ki zaten indirmeden devam etmenizi engelliyor. İndireceğimiz dosya .pem uzantılı bir dosya ve bunu kaybetmememiz gerekiyor çünkü bu dosya sayesinde sunucumuza bağlanıyoruz. Tüm bu adımlar bittiğinde artık sunucumuz çalışır vaiyette oluyor. AWS'nin sunucuyu oluşturması 1 dakika civarı sürebiliyor ama Running Instance sayfasına gittiğinizde sunucunuzu orada görebileceksiniz.



Şimdi SSH ile sunucumuza bağlanmaya çalışalım. Öncelikle indirdiğimiz .pem uzantılı dosyasımızı ~/.ssh altına taşımamız gerekiyor. Terminalden bu işlemi hallettikten sonra ~/.ssh dizinin altında .pem uzantılı dosyanızı göreceksiniz. Burada 

ssh -i pemdosyanızınismi.pem ubuntu@sunucunuzunipadresi

komutu ile sunucumuza bağlanıyoruz. Sunucuya bağlanabildiyseniz şu ekran ile karşılaşmanız muhtemel.

SSH ile Başarılı Bağlantı Ekranı

SSH Ekranı

Şimdi gelelim Django projemizi sunucumuzda kurmaya . Sizin hali hazırda bir django projeniz bulunuyorsa direkt olarak git üzerinden projenizi sunucunuza indirebilirsiniz. Ben yeni bir Django projesi oluşturacağım ve bu yüzden ilk olarak bir virtualenv kurmam gerekiyor. Bunu kurmamızın amacı projelerimizde gerekli olan paketleri sistemden bağımsız bir şekilde kurup, kullanmamızı sağlayacak sanal ortam sağlamasıdır. Örneğin ben bu projede Django 3.0 kuracağım ama sunucumda eğer ki Django 2.6 sürümünde bir projemi daha çalıştırmam gerekirse farklı bir sanal ortam kurmam yeterli olacaktır.

İlk olarak virtualenv kurmamız için sunucumuzda bazı paketlerin kurulmuş olması gerekmekte.

sudo apt-get install libssl-dev
sudo apt-get install build-essential
sudo apt-get install python3-venv
sudo apt-get install python3-pip 

Ve ek olarak sunucumuzdaki paketleri güncellersek hazır olacağız.

sudo apt-get update

Şimdi virtualenv kurmamızın zamanı geldi. Nereye kurmak istiyorsanız o dizinin altına gidip 

python3 -m venv virtualenvismi

Bu komutla bulunduğumuz dizinde yeni bir klasörümüz oluşmuş durumda şimdi bu sanal ortamı aktif edip Django Framework'u sunucumuza yükleyelim.

source virtualenvismi/bin/activate

Yukarıda pip paketimizi yükledik ve bu paket ile Django kurulumumuzu sağlayalım ve ardından bir Django projesi oluşturalım.

python3 -m pip install Django
django-admin startproject projeismi

Projemiz oluşturulduğuna göre artık nihai kurulumumuza geçebiliriz. İlk olarak Nginx server'i sunucumuza kuruyoruz ve ardından serveri başlatıyoruz.

sudo apt-get install nginx
sudo service nginx start

Şimdi Nginx serverimizin konfigürasyonunu yapmak için 

cd /etc/nginx/sites-enabled/

dizinine gidip

touch projeismi.conf

komutunu veriyoruz. Burada yeni bir konfigürasyon dosyası oluşturduk ve burada çeşitli ayarlarımızı gerçekleştireceğiz.

server {
listen 80;
server_name sunucunuzun ip adresi;
charset utf-8;
client_max_body_size 20M;
uwsgi_read_timeout 6000;
uwsgi_send_timeout 6000;
uwsgi_connect_timeout 6000;
keepalive_timeout 6000;
location / {
include /etc/nginx/uwsgi_params;
uwsgi_pass
unix:///home/ubuntu/sizindizininiz/projeismi/projeismi.sock;
root /home/ubuntu/sizindizininiz/projeismi;
}
location /static/ {
alias /home/ubuntu/sizindizininiz/projeismi/static/;
}
location /media/ {
alias /home/ubuntu/sizindizininiz/projeismi/static/media/;
}
}

Nginx ayarlarımızı temel anlamda bitirdik şimdi UWSGI ayarlarımıza geçelim. Nginx serverda olduğu gibi burada da ilk olarak uwsgi servisini kurmamız gerekiyor. Bunun için aşağıdaki komutları gerçekleştiriyoruz ve servisimizi de başlatıyoruz.

sudo apt-get install uwsgi
sudo service uwsgi start

UWSGI servisimizin düzgün çalışması için gerekli olan ek paketlerimizi de   

sudo apt-get install python3-dev
sudo apt-get install uwsgi-plugin-python3

komutlarıyla kuruyoruz. Bu komutları uyguladıktan sonra uwsgi servisimiz için de bir konfigürasyon dosyası oluşturmamız gerekecek. Bu dosyayı da uwsgi_conf adıyla kuracağım ama bu dosyanın uzantısı .ini olmalı ve bu konfigürasyon dosyamızı Django projemizin altında oluşturmamız gerekiyor.

plugins=python3
chdir=/home/ubuntu/sizindizininiz/projeismi/
home=/home/ubuntu/sizindizininiz/virtualenvismi/
module=djangoprojeismi.wsgi:application
master=True
gid=ubuntu
uid=ubuntu
socket=/home/ubuntu/sizindizininiz/projeismi/projeismi.sock
touch-reload=/home/ubuntu/.reload
chmod-socket=666
chown-socket=ubuntu
vacuum=True
env LANG="en-US.utf8"
env LC_ALL="en-US.UTF-8"
env LC_LANG="en-US.UTF-8"

Bu konfigürasyon dosyamızı uwsgi servisimiz altına tanımlamamız gerekiyor. Bunu da

sudo ln -s /home/ubuntu/sizindizininiz/projeismi/uwsgi_conf.ini /etc/uwsgi/apps-enabled/

komutu ile tanımlıyoruz.



Artık sunucumuz adına her şey hazır. Şimdi Django projemizde Settings.py dosyasındaki

ALLOWED_HOSTS = [ sunucuipadresiniz ]

şeklinde güncelliyoruz. Eğer Django ile ilgili bir probleminiz yok ise tüm ayarlarımız bitmiş durumda ve başarılı bir kurulum gerçekleştirmiş sayılırız. Son olarak Nginx ve UWSGI servislerimizi baştan başlatıp sorunsuz bir şekilde web sayfamızı görüntüleyebiliriz.

sudo service nginx restart
sudo service uwsgi restart

Web Tarayıcınızdan Sunucunuzun IP Adresini Girdiğinizde Karşılaşacağınız Ekran

Django
Eksik gördüğünüz ya da çalışmayan yerler var ise yorum olarak yazarsanız güncellemeye ve size yardımcı olmaya çalışırım. Bol şans.

Ek Kaynaklar : FreeCodeCamp - Amazon EC2

Heyy ! Blog'a abone olup yazılarımdan ilk sen haberdar olmak ister misin ?

ABONE OL!

Yorumlar

Mert Uzun | 13.02.2020

Güzel bir çalışma olmuş. Teşekkürler. 👍🏻

Cemşit | 08.05.2020

Güzel çalışma. AWS Ubuntu kullanıyormuş bilmiyordum. Ufak sorum olacaktı: AWS üzerinden gerçek bir websitesi yayınlıyor musunuz?

Yazar | 08.05.2020

Sevgili Cemşit,
Evet AWS çeşitli Linux dağıtımlarını kullanıyor Ubuntu da buna dahil. Sorunuza gelirsek, evet şu an AWS üzerinden gerçek bir websitesi yayınlıyorum. Örnek olarak bu site şu an AWS EC2 üzerinden hizmet vermekte.

Yorum Ekle

Yorumunuz onaylandıktan sonra yayınlanacaktır.