គោលដៅ​ចុង​​ក្រោយ​នៃ​ការបង្កើត​កម្មវិធី​ Django គឺ​​ដើម្បី​អោយ​កម្មវិធី​នេះ​អាច​ដំណើរការ​ទៅ​ដោយ​រលូន​ នៅ​លើ​បណ្តាញ​ Internet ។ ហើយ​មាន​ក្រុមហ៊ុន​ជា​ច្រើន​​បាន​និង​កំពុង​ផ្តល់​​សេវា​ ទទួល​យក​កម្មវិធី​គេហទំព័រ​ទៅ​ដាក់​នៅ​លើ​បណ្តាញ Internet ។ ជា​ភាសា​អង់គ្លេស សេវា​ប្រភេទនេះ​ត្រូវ​ហៅ​​ថា​ជា​សេវា hosting ។

 

នៅ​ក្នុង​ចំណោម​ក្រុមហ៊ុន​ផ្តល់​សេវា hosting ទាំងនោះ Heroku ជា​ក្រុមហ៊ុន​ដែល​ផ្តល់​សេវា​​ hosting សំរាប់​កម្មវិធី​គេហទំព័រ​សរសេរ​ជា​ភាសា Python, Node.js, Ruby, Java, PHP, Go, Scala, និង Clojure។ លើស​ពី​នេះ​ទៀត សំរាប់​អ្នក​ទើប​​នឹង​ចាប់​ផ្តើម​រៀន​​សរសេរ​កម្មវិធី​គេហទំព័រជាន់​ដំបូង ដែល​មិន​ត្រូវ​ការ​សេវា​ថ្នាក់​ខ្ពស់ ក្រុមហ៊ុន Heroku ផ្តល់​សេវា​អោយ​ដោយ​មិន​យក​ប្រាក់​។ ក៏ប៉ុន្តែ យើង​ចាំបាច់​ត្រូវ​បង្កើត​គណនី​មួយ​នៅ​ក្នុង​គេហទំព័រ​របស់​ក្រុមហ៊ុន​នេះ​ជាមុន​សិន ទើប​អាច​ប្រើប្រាស់​សេវា​នៅ​ទីនោះ​បាន​ដោយ​សេរី​។

 

ទន្ទឹម​គ្នា​នេះ​ដែរ យើង​ក៏​គួរ​តែ​បង្កើត​គណនី​មួយ​ទៀត​​នៅ​ក្នុង​គេហទំព័រ​របស់​ក្រុមហ៊ុន GitHub ដែល​កំពុង​ផ្តល់​សេវា​ដ៏​កំពុង​និយម​មួយ​ ក្នុងការទទួល​រក្សាទុក​នូវ​បណ្តា​ឯកសារ​ជា​កម្មវិធី​គេហទំព័រ​ទាំងឡាយ​។ ហើយ​សេវា​នេះ​​ក៏​​អនុញ្ញាត​​ផង​ដែរ អោយ​បណ្តាក្រុម​​អ្នក​អភិវឌ្ឍន​កម្មវិធី​គេហទំព័រ​​ មាន​ឱកាស​ធ្វើការ​រួម​គ្នា​ ក្នុង​ការកែប្រែ​ឯកសារ​ទាំងនោះ បង្កើត​ជា​កម្មវិធី​គេហទំព័រ​កំរឹត​អន្តរជាតិ​ ទោះ​បី​ជា​ពួក​គេ​រស់​នៅ​ក្នុង​ប្រទេស​ខុស​ៗ​គ្នា​យ៉ាងណា​ក៏​ដោយ​។

 

យ៉ាងណាម៉ិញ មាន​ក្រុមហ៊ុន​​ផ្តល់​សេវា hosting ជា​ច្រើន​នៅ​ជុំវិញ​ពិភពលោក រួម​ទាំងក្រុមហ៊ុន Heroku ផងដែរ បាន​ភ្ជាប់​សេវា​ជា​មួយ​នឹង​ក្រុមហ៊ុន GitHub ក្នុង​ការចំលងយក​ឯកសារ​នៃ​កម្មវិធី​គេហទំព័រ​ ពី​ប្រព័ន្ធ GitHub មក​បង្កើត​ជា​កម្មវិធី​គេហទំព័រ​​ជាស្វ័យប្រវត្តិ នៅ​ក្នុង​​ប្រព័ន្ធ​​របស់ពួក​គេ។ អាស្រ័យ​ហេតុ​នេះ បើ​សិន​ជា​យើង​មាន​ឯកសារ​ដែល​ជា​​កម្មវិធី​គេហទំព័រ​របស់​យើង​​នៅ​លើប្រព័ន្ធ GitHub រួច​ហើយ វា​ជា​រឿង​ងាយ​ស្រួល​បំផុត ក្នុង​ការអនុញ្ញាត​អោយ​ប្រព័ន្ធ​ Heroku ចំឡង​យក​ឯកសារ​ទាំងនោះ​ទៅ​បង្កើត​ជា​កម្មវិធី​គេហទំព័រ​នៅ​ក្នុង​ប្រព័ន្ធ​របស់​ពួក​គេ​ជា​ស្វ័យប្រវត្តិ​​។

 

អាស្រ័យ​ហេតុនេះ ក្រោយ​ពី​មាន​គណនី​មួយ​នៅ​ក្នុង​ប្រព័​ន្ធ GitHub និង repository មួយ​ត្រូវ​បាន​បង្កើត​រួច​ហើយ ហើយ​ផ្នែកទន់ git ក៏​ត្រូវ​បាន​ដំឡើង​នៅ​ក្នុង​កំព្យូទ័រ​យើង​ផង​ដែរ យើង​អាច​​ចំលង​យក​បណ្តា​ឯកសារ​ដែល​ជា​កម្មវិធី​គេហទំព័រ​របស់​យើង​ ទៅ​ដាក់​​នៅក្នុង​ repository នោះ​បាន​ ដោយ​សរសេរ​កូដ​​នៅ​លើ​បង្អួច​ terminal ដូច​ខាង​ក្រោម​នេះ៖

 

git init
git remote add origin https://github.com/Sokhavuth/«repository_name».git
git add .
git commit -m "First commit"
git push origin master

ក៏ប៉ុន្តែ កម្មវិធី Django របស់​យើង​ឈ្មោះ blog ដែល​យើង​បានបង្កើត​កន្លង​មក មិន​ទាន់​មាន​លក្ខណៈ​គ្រប់គ្រាន់​អាច​អោយ​ប្រព័ន្ធ Heroku ចំលង​យក​ទៅ​បង្កើត​ជា​កម្មវិធី​គេហទំព័រ​បាន​នៅ​ឡើយ​​នោះ​ទេ ពីព្រោះ​ប្រព័ន្ធ​ចុង​ក្រោយ​នេះ​ត្រូវ​ការ​នូវ​ឯកសារ​ចាំបាច់​មួយ​ចំនួន​ទៀត ក្នុងការ​បង្កើត​កម្មវិធី​គេហទំព័រ​​ដែល​​ប្រើប្រាស់​កញ្ចប់​ Django ។

 

ដើម្បី​បំពេញ​លក្ខខ័ណ្ឌ​ទាំងអស់​នោះ ជាបឋម​យើង​ត្រូវតំលើង​កញ្ចប់​ gunicorn និងកញ្ចប់ whitenoise នៅ​ក្នុង​បរិដ្ឋាន​សិប្បនិមិត្ត​របស់​យើង ដោយ​សរសេរ​នៅ​លើ​បង្អួច terminal ថា៖

 

pip install gunicorn whitenoise

 

បន្ទាប់​មកទៀត យើង​ត្រូវ​បង្កើត​ឯកសារចាំបាច់​មួយ​មាន​ឈ្មោះ​ថា requirements.txt ដោយ​សរសេរ​នៅ​លើ​បង្អួច terminal ថា៖

 

pip freeze > requirements.txt

 

បើ​សិន​ជា​យើង​បើក​ថត​នៃ​គំរោង​ Django របស់​យើង​ដែល​ជាថត​ mysite យើង​នឹង​ឃើញ​ឯកសារ​ requirements.txt ត្រូវ​បាន​បង្កើត​ឡើង​ដោយ​ស្វ័យប្រវត្តិ ដែល​នៅ​ក្នុង​នោះ​មាន​​ការសរសេរ​ព័ត៌មាន​ស្តី​ពីកញ្ចប់​ផ្សេង​ៗ​ ដែល​កម្មវិធី​គេហទំព័រ​របស់​យើង​ត្រូវការ​ជាចាំបាច់​។ ព័ត៌មាន​ទាំងអស់​នោះ គឺ​សំរាប់​ប្រាប់​អោយ​ប្រព័ន្ធ Heroku ដំឡើង​កញ្ចប់​ទាំង​នោះ​នៅ​លើ​ប្រព័ន្ធ​របស់​វា ដើម្បីអាច​​អោយ​កម្មវិធី​គេហទំព័រ​របស់យើង​​​ដំណើរ​ការ​ទៅ​បាន​។

 

asgiref==3.3.4
Django==3.2.2
gunicorn==20.1.0
pytz==2021.1
sqlparse==0.4.1
whitenoise==5.2.0

 

បន្ទាប់​មក​ទៀត យើង​ត្រូវ​ធ្វើការកែតំរូវ​មួយ​ចំនួន នៅ​ក្នុង​ឯកសារ setting.py នៅ​ក្នុង​ថត mysite/mysite ។

 

import os
from pathlib import Path

# Build paths inside the project like this: BASE_DIR / 'subdir'.
BASE_DIR = Path(__file__).resolve().parent.parent


# Quick-start development settings - unsuitable for production
# See https://docs.djangoproject.com/en/3.2/howto/deployment/checklist/

# SECURITY WARNING: keep the secret key used in production secret!
SECRET_KEY = 'django-insecure-^600f@y^42j=f^shx@g64pt#&y7!yu$%a-79j^x5ua7-9bh9#l'

# SECURITY WARNING: don't run with debug turned on in production!
DEBUG = True

ALLOWED_HOSTS = ['*']


# Application definition

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'django.contrib.contenttypes',
    'django.contrib.sessions',
    'django.contrib.messages',
    'django.contrib.staticfiles',
]

MIDDLEWARE = [
    'django.middleware.security.SecurityMiddleware',
    'django.contrib.sessions.middleware.SessionMiddleware',
    'django.middleware.common.CommonMiddleware',
    'django.middleware.csrf.CsrfViewMiddleware',
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.messages.middleware.MessageMiddleware',
    'django.middleware.clickjacking.XFrameOptionsMiddleware',
    'whitenoise.middleware.WhiteNoiseMiddleware',
]

ROOT_URLCONF = 'mysite.urls'

TEMPLATES = [
    {
        'BACKEND': 'django.template.backends.django.DjangoTemplates',
        'DIRS': ['blog/templates'],
        'APP_DIRS': True,
        'OPTIONS': {
            'context_processors': [
                'django.template.context_processors.debug',
                'django.template.context_processors.request',
                'django.contrib.auth.context_processors.auth',
                'django.contrib.messages.context_processors.messages',
            ],
        },
    },
]

WSGI_APPLICATION = 'mysite.wsgi.application'


# Database
# https://docs.djangoproject.com/en/3.2/ref/settings/#databases

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3',
        'NAME': BASE_DIR / 'db.sqlite3',
    }
}


# Password validation
# https://docs.djangoproject.com/en/3.2/ref/settings/#auth-password-validators

AUTH_PASSWORD_VALIDATORS = [
    {
        'NAME': 'django.contrib.auth.password_validation.UserAttributeSimilarityValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.MinimumLengthValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.CommonPasswordValidator',
    },
    {
        'NAME': 'django.contrib.auth.password_validation.NumericPasswordValidator',
    },
]


# Internationalization
# https://docs.djangoproject.com/en/3.2/topics/i18n/

LANGUAGE_CODE = 'en-us'

TIME_ZONE = 'Asia/Phnom_Penh'

USE_I18N = True

USE_L10N = True

USE_TZ = True


# Static files (CSS, JavaScript, Images)
# https://docs.djangoproject.com/en/3.2/howto/static-files/

STATIC_URL = '/static/'

STATIC_ROOT = os.path.join(BASE_DIR, 'staticfiles')

STATICFILES_STORAGE = 'whitenoise.storage.CompressedManifestStaticFilesStorage'

STATICFILES_DIRS = [
    BASE_DIR / "static",
]

# Default primary key field type
# https://docs.djangoproject.com/en/3.2/ref/settings/#default-auto-field

DEFAULT_AUTO_FIELD = 'django.db.models.BigAutoField'

 

ការកែតំរូវ​គឺ​ជា​ការសរសេរ​បន្ថែម​ដូច​នៅ​លើ​បន្ទាត់​លេខ 1, 39, 112, 114, 116-117-118 ។

 

បន្តាប់​មក​ទៀត យើង​ចាំបាច់​ត្រូវ​បង្កើត​ឯកសារ​ចំនួន​ពីរ​ទៀតសំរាប់​ប្រព័ន្ធ​ Heroku ។ ឯកសារ​ទី​មួយ​ត្រូវ​មាន​ឈ្មោះ​ថា Procfile ដែល​នៅ​ក្នុង​នោះ យើង​ត្រូវ​សរសេរ​ព័ត៌មាន​ប្រាប់​អោយប្រព័ន្ធ Heroku ប្រើប្រាស់​កញ្ចប់ gunicorn ជា​ server ក្នុង​ការដំណើរការ​កម្មវិធី​គេហទំព័រ​របស់​យើង​។

 

web: gunicorn mysite.wsgi

 

ឯសារ​ទី​ពីរ​ត្រូវ​មាន​ឈ្មោះ​ថា runtime.txt ដែល​នៅ​ក្នុង​នោះ​ យើង​ចាំបាច់​ត្រូវ​សរសេរ​ព័ត៌មាន​ប្រាប់​អោយ​ប្រព័ន្ធ Heroku ប្រើប្រាស់​ផ្នែក​ទន់​ Python លេខ​ណា​មួយក្នុង​ការដំណើរការ​កម្មវិធី​របស់​យើង​។

 

python-3.9.0

 

លុះ​មាន​ឯកសារ​ទាំងអស់​នោះ​ហើយ យើង​អាច​​ update repository ​របស់​យើង​នៅ​លើ​ប្រព័ន្ធ GitHub បាន​ដោយ​សរសេរ​នៅ​លើ​បង្អួច terminal ដូច​ខាង​ក្រោម​នេះ៖

 

git add .
git commit -m "Make it better"
git push origin master

 

ចុងក្រោយ​បង្អស់​ យើង​អាច​ប្រាប់​អោយ​ប្រព័ន្ធ Heroku ចំឡង​យក​ឯកសារ​​នៃ​កម្មវិធី​គេហទំព័រ​របស់​យើង​មាន​នៅ​ក្នុង​ប្រព័ន្ធ GitHub ទៅ​បង្កើត​ជា​កម្មវិធី​គេហទំព័រ​នៅ​ក្នុង​ប្រព័ន្ធ​នេះ ដោយ​ជា​ដំបូង​យើង​ត្រូវ​បង្កើត​សំបក​កម្មវិធី​គេហទំព័រ​មួយ​នៅ​លើ​ប្រព័ន្ធ Heroku ជាមុន​សិន ដោយ​ដាក់ឈ្មោះ​ថា​អ្វី​ក៏​បាន​ដែរ​។ បន្ទាប់​មក​ទៀត យើង​ត្រូវ​ចុច​យក​ប្រព័ន្ធ GitHub សំរាប់​ចំលង​យក​ឯកសារ​នៃ​កម្មវិធី​​របស់​យើង និង​ចុច Deploy Branch ដើម្បី​បញ្ជា​អោយ​ប្រព័ន្ធ Heroku ចាប់​ផ្តើម​ប្រតិបត្តិការ​៕