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 . 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
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
#django #djangodeployment #oracleiledjangoyayınlama # djangodeploymentwithoraclevps #djangoyuvpsdeyayınlama