Oracle ile Django Deployment

  Hoş geldiniz. Bu yazıda django projenizi nasıl ücretsiz bir sunucuda yayınlayacağınızı anlatacağım. Django projenizi bir sunucuda yayınlamak sunucu yönetme becelerinizin gelişmesini ve aslında işlerin nasıl yürüdüğünü anlamanızı sağlar. Sunucu veya hosting arayışına girmiş bir geliştirici için dolar kuru itibariyle yüksek fiyatlar ile karşılaşmak üzücü olabiliyor. Burada karşımıza Oracle çıkıyor. Oracle devasa sunucu odalarında ömür boyu ücretsiz bir şekilde sunucunuzu kurmanıza olanak sağlıyor. Sunucunuzda ister web sitesinizi yayınlayın, ister oyun server 'ı kurun, isterseniz DNS server'ınızı kurun. Sunucuya giriş yaptıktan sonra gerisi sizin ihtiyaçlarınıza kalmış. Dilerseniz uzatmadan başlayalım.

 


İçerik

1) Oracle'a Kayıt Ve Sunucu Açılış İşlemleri

2) Sunucuya SSH ile bağlanma

3) Güvenlik Duvarının Aktif Edilmesi, Gerekli Portların Açılması Ve Test Edilmesi

4) Ubuntu Başlangıç Yapılandırılması

5) Django Yayın Ortamı Yapılandırılması

6) Ücretsiz SSL Sertifikası Temin Etme


 


1) Oracle'a Kayıt Ve Sunucu Açılış İşlemleri

 

Öncelikle buraya tıklayarak oracle 'ın sayfasına gidin ve Ücretsiz Başlayın butonuna basın.

Gelen ekranda bilgileri doldurup devam edin. Kayıt süresince sizden istenilen bilgileri eksiksiz olarak girin. Oracle sizden kart bilgilerinizi isteyecek. Buradaki amaç sembolik olarak kartınızdan 0.80 euro civarı bir para tahsil edip hesabınıza geri yatırarak kart bilgilerinizi almak. Oracle içerisinde siz yükseltme yapmadığınız taktirde kartınızdan asla para çekilmeyecektir.

Sunucuyu hangi bölgeden seçmek istediğiniz sorulduğunda Germany/Frankfurt bölgesini seçebilirsiniz.

 

 


Tüm kayıt işlemlerini tamamladığızda karşınıza aşağıdaki ekran gelecek.

 


 

 


Oracle Sanal Ağ Oluşturma

Sağ üst köşede seçenekler iconuna tıklayalım ve ardından Networking seçeneğini seçelim.

 

Buradan Virtual Cloud Networks seçeneğini seçelim.

 

 

Eğer aşağıdaki gibi en az bir tane listelenmiş sanal ağ görüyorsanız, sanal ağ kurmanıza gerek yok. Bu aşamayı geçebilirsiniz. Fakat yoksa devam ediniz. CREATE VCN WİZARD butonuna tıklayalım.

 

Seçili gelen Create VCN with Internet Connectivity seçeneğiyle Start VCN Wizard butonuna basalım

 

 

Gelen ekranda Sanal Ağınıza bir isim vererek devam ediniz.

 

Next butonuna bastıktan sonra gelen sayfada herhangi bir değişiklik yapmadan Create seçeneğine basınız.

 


 

 


Virtual Private Server Kurulumu

Gelen ekranda imlecinizi aşağı kaydırarak Launch Resources  bölümüne gelin.

 

Create a VM Instance seçeneğine tıklayarak sanal sunucumuzu kurmaya başlayabiliriz.

 


 

 


instance-20221112-2219 ismi yerine sunucunuza istediğiniz ismi verebilirsiniz.

 


 

 

 


Placement bölümünde sunucunuzu Oracle 'ın Frankfurt bölgesinde hangi sunucu odasında kurmak istediğinizi seçebilirsiniz. Hangi seçeneği seçtiğiniz farketmez.


 

 


Image and shape bölümünde sunucumuza hangi işletim sistemini kuracağımızı, hangi işlemciyi, kaç çekirdekli ve ramli kuracağımızı belirleyeceğiz.

 

Change Image butonuna tıklayarak işletim sistemimizi seçelim.

 

 

Eğer herhangi bir linux dağıtımını daha önce kullandıysanız, aşina olduğunuz dağıtımı seçebilirsiniz. Biz bu yazıda Ubuntu 'yu seçiyor olacağız. Dağıtımınızı seçtikten sonra Select Image butonuna tıklayarak devam edebilirsiniz.

 

Sırada sunucumuzun teknik özelliklerini seçeceğimiz Shape bölümüne geçiyoruz.

 

Change Shape butonuna tıklıyoruz.

 

 

Ben tüm haklarımı kullandığımdan ve 30 günlük deneme bonusunu bitirdiğimden dolayı bende böyle gözüküyor. Siz maksimum 4 çekirdek 24 gb ram işaretledikten sonra Select Shape butonuna basabilirsiniz.

 

Networking bölümünde yukarıda oluşturduğumuz network ağını sistem otomatik olarak seçecek.

 

Bu kısım önemli. Biz sunucumuza terminale üzerinden SSH bağlantısı ile bağlanacağız. Dilersek kendi ssh key 'imizi putty ile oluşturabilir ve Upload Public Key Files bölümünden ssh key 'imizi yapıştırarak kullanabiliriz. Veya Oracle 'ın bizim için oluşturacağı SSH Key 'i kullanabiliriz.

Biz Generate a key pair for me seçeneğini seçerek Oracle 'ın bizim için oluşturmuş olduğu SSH Key 'i kullanacağız.

Save private key ve Save public key butonlarına tıklayarak Key'leri bilgisayarımıza indirelim. Artık sunucumuza bu Key'leri kullanarak bağlanacağımız için kolay ulaşabileceğiniz bir konuma yükleyiniz.

 

Oracle bize ücretsiz olarak maksimum 200 GB SSD alanı kullanmamıza izin veriyor. Specify a custom boot volume size seçeneğine tıklayarak depolama alanımızın boyutunu belirleyebiliriz.

 

Default olarak 50 GB seçili gelecek. Biz dilersek bu oranı 200 GB 'a kadar çıkartabiliriz.  Burada depolama alanımızın boyutunu belirledikten sonra hemen altında ki seçenekte;

 

Use in-transit encryption seçeneğinin seçili olduğundan emin olalım.

 

Bütün ayarlarımız bitti. CREATE butonuna basarak sunucumuzu oluşturmaya başlayabiliriz. 20-30 saniye dolmadan sunucumuz hazır hale gelecek.

 

Evett. Tebrikler blush. 4 çekirdekli, 24 GB ram 'e sahip ve 200 GB depolama alanı olan, ömür boyu ücretsiz sunucumuz hazır. Yeşil kalem ile çizdiğim alandaki Public Ip Address ve Username bilgilerini sürekli olarak sunucuya giriş yaparken kullanacağız.


 

 


2) Sunucuya SSH İle Bağlanma

Bilgisayarınıza indirdiğiniz 2 adet SSH Key dosyasının bulunduğu klasörü açın. Daha sonra klasörün içerisinde Terminali açın.

 

ls komutunu yazıp Enter tuşuna bastığınızda 2 adet SSH KEY dosyası görüyorsanız doğru konumdasınız. Terminalde aşağıdaki kodu yazınız. ' .key ' uzantılı dosyayı seçtiğinize ve sunucu ip adresinizi doğru girdiğinize emin olun.

ssh -i sshkey.key ubuntu@sunucu_ip_adresiniz

 

Gelen soruya yes cevabını verin ve Enter tuşuna basın.

 

Bu ekranı görüyorsanız sunucunuz başarılı bir şekilde kuruldu ve siz içeridesiniz.


 

 


3) Güvenlik Duvarının Aktif Edilmesi, Gerekli Portların Açılması Ve Test Edilmesi

Sunucuya girdikten sonra yapacağımız ilk işlem sistemi güncelleyip, bu güncellemeleri yüklemek olacak. Bunun için aşağıdaki kodu yazınız.

sudo apt-get update && sudo apt-get upgrade

Güncellemeden hemen sonra yüklenecek paketleri sunucunuza indirmek için izin istecek. y tuşuna basarak devam ediniz.

 

Kullanıcımıza root yetkisi verelim. Aşşağıdaki satıra www-data parametresini eklememizin sebebi, ileride karşılaşacağınız static dosya hatasının çözümü olmuş olması.

sudo usermod -a -G ubuntu www-data

 

Güvenlik duvarını aktif etmek ve portları açmak için aşağıdaki kodları yazınız.

sudo nano /etc/iptables/rules.v4

 

İçerisine girdiğimiz dosyaya yeşil kalem ile belirttiğim şekilde kodlarımızı ekleyelim.

-A INPUT -p tcp --dport 80 -j ACCEPT
-A INPUT -p udp --dport 80 -j ACCEPT
-A INPUT -p tcp --dport 8000 -j ACCEPT
-A INPUT -p udp --dport 8000 -j ACCEPT
-A INPUT -p tcp --sport 80 -j ACCEPT
-A INPUT -p udp --sport 80 -j ACCEPT
-A INPUT -p tcp --sport 8000 -j ACCEPT
-A INPUT -p udp --sport 8000 -j ACCEPT
-A INPUT -p tcp --sport 443 -j ACCEPT
-A INPUT -p tcp --dport 443 -j ACCEPT
-A INPUT -p udp --sport 443 -j ACCEPT
-A INPUT -p udp --dport 443 -j ACCEPT

Bu satırları CTRL +C kombinasyonu ile kopyalayıp, CTRL + V kombinasyonu ile yapıştırabilirsiniz. Bu işlemleri yaptıktan sonra ise CTRL + X ve hemen ardından CTRL + Y kombinasyonu ile dosyayı kaydedip çıkabilirsiniz.

 

Yaptığımız değişiklikleri kaydetmek için;

sudo iptables-restore < /etc/iptables/rules.v4

 

Yaptığımız değişiklikleri gözlemlemek için;

sudo iptables -L INPUT

 

 


4) Ubuntu Başlangıç Yapılandırılması

 

Python, pip, postgresql, nginx teknolojilerini kuralım.

sudo apt install python3-pip python3-dev libpq-dev postgresql postgresql-contrib nginx curl

 

PostgreSQL Veritabanımızı Oluşturalım

PostgreSQL ile veritabanımızı oluşturalım. Postgre terminaline geçmek için aşağıdaki kodu yazınız.

sudo -u postgres psql

 

Aşağıda bir veritabanı oluşturacağız. veritabanı_ismi, kullanıcı_ismi ve şifre belirleyeceğiz. Unutmamak için lütfen not alın!

Veritabanı oluşturmak için aşağıdaki kodu yazalım.

CREATE DATABASE database_ismi;

 

Oluşturduğumuz veritabanı için bir kullanıcı oluşturalım.

CREATE USER kullanici_adi WITH PASSWORD 'sifre';

 

Saat dilimi, yazı çözümleme gibi ayarlarımızı yapalım.

ALTER ROLE kullanıcı_adi SET client_encoding TO 'utf8';
ALTER ROLE kullanıcı_adi SET default_transaction_isolation TO 'read committed';
ALTER ROLE kullanıcı_adi SET timezone TO 'UTC';

 

Oluşturduğumuz kullanıcıya yetki verelim.

GRANT ALL PRIVILEGES ON DATABASE database_ismi TO kullanıcı_adi;

 

Bu işlemlerden sonra aşağıdaki kodu yazarak postgres terminalinden çıkabiliriz.

\q

 

Proje Dosyamızı Sunucuya Yükleme İşlemi

Burada 2 seçeneğimiz var. Github 'dan projemizi import edebiliriz veya kendi bilgisayarımızdan sunucuya proje dosyamızı yükleyebiliriz.

Github'dan proje import etmek için;

git clone https://github.com/muratcengiizz/muratcengiizz.git #Temsilidir.

 

Kendi bilgisayarınızdan sunucuya projenizi yüklemek için;

Proje klasörünüzün tam yolunu kopyalayın. Daha sonra terminalde SSH Key 'lerinizin bulunduğu klasörde aşağıdaki gibi kodunuzu yazın.

scp -r -i .\ssh-key.key C:\Users\dosya\yolu\proje_dosyaniz ubuntu@132.145.226.79:/home/ubuntu

scp -r -r [sshdosyaniz.key] [projenizin_kendi_bilgisayarınızdaki_tam_yolu] [projeyi_sunucuda_yüklemek_istediğiniz_yol]

 

Projenizi sunucuya yükledikten sonra aşağıdaki komut ile projenizin ana dizinine (manage.py dosyasının olduğu konuma) gidiniz.

cd proje_ismi

 

Proje İçin Sanal Ortam Oluşturma

Projenin ana dizinindeyken aşağıdaki kod ile sanal ortam oluşturalım.

virtualenv venv

 

Sanal ortamı aktif edelim.

source venv/bin/activate

 

Projenizde requirements.txt dosyasını oluşturduğunuzu ve projenin ihtiyaç duyduğu bileşenleri bu dosyayının içine yazdırdığınızı varsayarak requirements.txt dosyasının içerisindeki bileşenleri kuralım.

pip install -r requirements.txt

 

Gunicorn ve PostgreSQL bileşenlerini sanal ortamın içerisine yükleyelim.

pip install gunicorn psycopg2

 

Şimdi projemizin settings.py klasörüne cd komutu ile gidelim ve settings.py dosyasını açalım.

sudo nano settings.py

 

Geliştirme ortamı değerini False yapalım.

DEBUG = False

 

STATIC_ROOT değişkenini ayarlayalım.

#STATICFILES_DIRS = [ 
#    BASE_DIR / 'static'
#]


STATIC_ROOT = BASE_DIR / "static/"

 

Oluşturduğumuz PostgreSQL veritabanı bilgilerinizi settings.py 'de güncelleyelim.

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql_psycopg2',
        'NAME': 'veritabani_isminiz',
        'USER': 'veritabani_kullanici_adiniz',
        'PASSWORD': 'veritabani_sifreniz',
        'HOST': 'localhost',
        'PORT': '',
    }
}

 

Domain adreslerimizi belirleyelim.

ALLOWED_HOSTS = ['sunucu_ip_adresiniz', 'domain_adresiniz.com', 'www.domain_adresiniz.com']

 

Sunucu İle Domaininizi Senkronize Edin

Domain sağlayıcınızın web sitesine gidin (örn: isimtescil, godaddy) ve domaininizin Gelişmiş DNS ayarlarına girin.

 

Kayıt oluştur bölümünden A Kaydı Oluştur seçeneğini seçin. Kayıt bölümüne @ işareti koyun.

 

Bu kaydı tamamladıktan sonra birtane daha A Kaydı oluşturun. Bu kayıt da aşağıdaki gibi olsun.

 

 

Veritabanı şemasını oluşturmak ve static dosyaları toplamak için aşağıdaki kodları yazınız.

python manage.py makemigrations
python manage.py migrate
python manage.py collectstatic

 

Şimdi ise projemizi denemek için çalıştıralım.

python manage.py runserver 0.0.0.0:8000

 

Web tarayıcınızda test etmek için url kısmına aşağıdaki gibi bilgilerinizi giriniz.

http://alan_adi_veya_ip:8000      örneğin:  http://muratcengiz.org:8000

 

Web sitenizi görüntülediyseniz kurulumumuza devam edebiliriz.


 

 


5) Django Yayın Ortamı Yapılandırılması

Gunicorn Servisi Kurulumu

Aşağıdaki kodu yazarak sanal ortamdan çıkalım.

deactivate

 

Gunicorn servis dosyasını oluşturmak için aşağıdaki kodu terminalde yazalım.

sudo nano /etc/systemd/system/gunicorn.service

 

Açılan dosyaya aşağıdaki kodları yapıştırınız.

[Unit]
Description=gunicorn daemon
After=network.target
[Service]
User=ubuntu
Group=www-data
WorkingDirectory=/home/ubuntu/proje_dosyaniz
ExecStart=/home/ubuntu/proje_dosyaniz/venv/bin/gunicorn --access-logfile - --workers 3 --bind unix:/home/ubuntu/proje_dosyaniz/proje_dosyaniz.sock proje_dosyaniz.wsgi:application
[Install]
WantedBy=multi-user.target

Bu dosyayı kendinize göre yapılandırdığınızda dosyayı CTRL + X ve CTR + Y kombinasyonlarıyla kaydedip çıkabilirsiniz.

 

Gunicorn servisini aşağıdaki kodlar ile aktif hale getirelim.

sudo systemctl start gunicorn
sudo systemctl enable gunicorn

 

Gunicorn servisinin doğru bir şekilde çalışıp çalışmadığını test etmek için aşağıdaki kodu yazınız.

sudo systecmtl status gunicorn

 

Yeşil renkte active (running) ifadesini görüyorsanız başarıyla gunicorn servisini aktif ettiniz.

 

 

Nginx Yapılandırılması

Nginx sunucu bloğunu açmak için aşağıdaki kodu yazınız.

sudo nano /etc/nginx/sites-available/proje_ismi

 

Dosyanın içerisinde olması gereken kodlar aşağıdaki gibidir.

server {
    listen 80;
    server_name alan_adi_veya_IP;
    root /home/ubuntu/proje_ismi; # Projenin kök dizini
location /static/ {
    }
location /media/ {
    }
location / {
        include proxy_params;
        proxy_pass http://unix:/home/ubuntu/proje_ismi/proje_ismi.sock;  # Projenin kök dizinindeki 'proje_adı.sock' dosyası
    }
}

 

Nginx dosyasını aktif etmek için sites-enabled dizinine link olarak verme;

sudo ln -s /etc/nginx/sites-available/proje_ismi /etc/nginx/sites-enabled

 

Nginx yapılandırma dosyasında syntax hatası olup olmadığı kontrol etmek için aşağıdaki kodu yazınız.

sudo nginx -t

 

Hata yoksa Nginx sunucusunu yeniden başlatmak için aşağıdaki kodu yazınız.

sudo systemctl restart nginx

 

Tüm bu işlemleri yaptıktan sonra tarayıcınızda açılıyor olması gerekiyor. Eğer bir problem yaşıyorsanız önceki adımları dikkatli bir şekilde uygulayınız. Bana karşılaştığınız hatalar ile ilgili buradan mesaj gönderebilirsiniz.


 

 


6) Ücretsiz SSL Sertifikası Temin Etme

sudo apt install snapd
sudo snap install --classic certbot
sudo certbot --nginx

Son komuttan sonra sizden e-mail adresiniz istenecek. Lütfen doğru mail adresinizi giriniz. Daha sonra enter tuşuna basarak devam edebilirsiniz.

Kabul etmemiz gereken politika ve kuralları kabul edip etmeyeceğimizi soruyor. Tabiki de kabul edeceğiz blush

 

Bize mail yoluyla içerik göndermek istedikleriniz söylüyorlar. Kabul etmeden geçebiliriz.

 

Bu soruları yanıtladıktan sonra gelen soruda birden fazla domaininiz varsa birisini seçmeniz isteniyor. Siz hiçbir seçim yapmadan enter tuşuna basınız. Bu işlemden sonra SSL sertifikanız otomatik olarak kurulmuş olacaktır.


 

 


Kaynakça

[0], [1]

#django #djangodeployment #oracleiledjangoyayınlama # djangodeploymentwithoraclevps #djangoyuvpsdeyayınlama