Django app deploy shared hosting Cpanel

Yazılıma ilk başladığım günlerde en çok merak ettiğim konulardan biri Python ile geliştirdiğim bir web uygulamasını nasıl shared hostinge deploy edebilirim olmuştu ve bu süreci not tadında basitleştirmek istedim.

İhtiyacımız olan iki temel şey: Django App ve Python destekleyen bir hosting firması. Türkiye'de bu hizmeti verenlerden birisi Cenuta. Her şey hazır ise sürecin kısa özeti şu şekilde:

1 - İlk olarak projemizi zipleyelim.
2 - CPanel kullanarak File Manager bölümünden upload edelim.
3 - Ziplediğimiz projeyi unzipleyelim.
4 - Yine CPanelde Postgresql bölümünü kullarak DB ve Kullanıcı oluşturalım : Örnek: user=django; database=djangoDB
5 - Oluşturulan User ile DB entegresini yapalım.
6 - settings.py dosyası içinden DB ayarlarını güncelleyelim. Örnek:

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.postgresql',
        'NAME': '<DBName>',
        'USER': '<USER>',
        'PASSWORD': '<PASSWORD>',
        'HOST': 'localhost',
        'PORT': '5432',
    }
}

7 - CPanelde Setup Python App bölümüne girelim.
8 - Create Application ile Python uygulamamızı oluşturalım.
    a - Python versiyonu bağımlılıklarınıza göre değişir.
    b - Root belirtelim. Projenin manage.py dosyasını barındırdığı dizin.
    c - ve create diyelim.
9 - Bizim için bir virtualenv oluşturacak ve sonrasında venv aktif etmek için komut satırı verecek. Örnek:

source /home/httpdwgp/virtualenv/blog/3.8/bin/activate && cd /home/httpdwgp/blog

10 - CPanelden terminale girelim veya SSH baglantısı yapalım. Örnek bağlantı için:

sudo ssh -i id_rsa <user>@burakovali.com

11 - Terminale girdikten sonra bağlantıyı yapıştırarak venv aktif edelim ve proje dosyamıza gidelim. Aslında burası local geliştirme yaptığımız aşamayla aynı. Mantık venv oluştur, projeni izole et, bağımlılıkları yükle, localde çalıştır.
12 - Bağımlılıkları ve gerekli paketleri kuralım:

pip install -r <requirements.txt>

13 - Tarayıcımızdan URL'e gittiğimiz zaman 'it work python version 3.718' mesajını göreceksiniz.
14 - 8.adımı tamamladığımızda passenger_wsgi.py dosyasının proje dizininde oluştuğunu göreceksiniz.
15 - passenger_wsgi.py dosyasını düzenleyelim.

import os
import sys

sys.path.insert(0, os.path.dirname(__file__))

def application(environ, start_response):
    start_response('200 OK', [('Content-Type', 'text/plain')])
    message = 'It works!\n'
    version = 'Python %s\n' % sys.version.split()[0]
    response = '\n'.join([message, version])
    return [response.encode()]

16 - message bölümünü değiştirdiğimizde yeni bir requeste dönen response ilginizi çekebilir.
17 - terminali veye SSH bağlantımızı yeniden açalım ve DB işlemlerini yapalım:

python3 manage.py makemigrations && python3 manage.py migrate

18 - pgadmine girerek oluşturulan tabloları kontrol edebiliriz
19 - passenger_wsgi.py'a projemizi import edelim. yeni passenger_wsgi.py (dizine göre farklılık gösterir):

import os
import sys

sys.path.insert(0, os.path.dirname(__file__))

from <dir>.wsgi import application

20 - Python uygulamamızı CPanel üzerinden yeniden başlatalım.
21 - Karşınıza bazı hatalar çıkabilir. Django deploy ayarlarınızı tamamsa herhangi bir sorun çıkmayacaktır. Debug ve ALLOWED_HOSTS'a dikkat edelim.
22 - Static dosyalarımızı ayarlayalım.

STATIC_URL = '/static/'
STATICFILES_DIRS = (
    os.path.join(BASE_DIR, 'static'),
)

STATIC_ROOT = '/home/httpdwgp/public_html/static'

MEDIA_ROOT  = '/home/httpdwgp/public_html/media'
MEDIA_URL = '/media/'

23 - Son olarak komutu çalıştıralım ve bu kadar.

python3 manage.py collectstatic 

İletişime geçmek, yorum bırakmak veya hatalarımı düzetlmek istersen mail atabilirsin.

iletişim için tıklama yeri