- Vaša košarica je trenutno prazna
Django aplikacija na spletnem gostovanju (cPanel)
Django je priljubljeno ogrodje (ang. framework) za programski jezik Python, s katerim hitro izdelate zmogljivo spletno stran ali aplikacijo z administracijo, uporabniki in podatkovno bazo. V tem prispevku vam pokažemo, kako Django aplikacijo postavite na paket gostovanja z nadzorno ploščo cPanel, od ustvarjanja Python okolja do delujoče administracije.
Ko boste sledili postopku, boste imeli Django aplikacijo, ki:
- prikaže vašo prvo stran,
- naloži Django skrbniški vmesnik (ang. admin) z vsemi slogi,
- shranjuje podatke v bazo SQLite, MariaDB (MySQL) ali PostgreSQL.
Postopek velja za Django 5.2 in 6.x.
Kazalo
- Kaj potrebujete?
- Ustvarite Python aplikacijo v cPanel
- Namestite Django in ustvarite projekt
- Nastavite projekt za delovanje na strežniku
- Pripravite bazo, administratorja in statične datoteke
- Uporaba baze MariaDB ali PostgreSQL
- Aplikacija v podmapi in WordPress na isti domeni
- Pogoste napake
- Kontrolni seznam pred objavo
Kaj potrebujete?
Za namestitev Django aplikacije na spletnem gostovanju potrebujete:
- Paket gostovanja z ikono Setup Python App (paketi Zeleni, Modri, Rdeči, Reseller in Turbo).
- Dostop do ukazne vrstice prek SSH ali aplikacije Terminal v nadzorni plošči cPanel.
- Domeno, na kateri bo aplikacija delovala. V primerih uporabljamo
vasadomena.siin uporabniško imeuporabnik. Oboje zamenjajte s svojimi podatki.
Če Python v cPanel postavljate prvič, si najprej oglejte prispevek Python aplikacija na spletnem gostovanju.
Ustvarite Python aplikacijo v cPanel
1. Prijavite se v nadzorno ploščo cPanel.
2. V sekciji Software kliknite ikono Setup Python App in nato gumb CREATE APPLICATION.
3. Izpolnite polja:
- Python version: izberite 3.12 ali novejšo. Django 6 potrebuje Python 3.12 ali novejši.
- Application root: mapa, v kateri bo aplikacija, npr.
myapp. Mapa je izvenpublic_html, zato datoteke aplikacije niso dostopne prek spleta. - Application URL: domena in po želji podmapa. V tem prispevku aplikacija teče na korenu domene (
vasadomena.si/). - Application startup file: pustite prazno.
- Application Entry point: pustite prazno.
4. Kliknite CREATE.
5. Na vrhu strani se izpiše ukaz za vstop v virtualno okolje, npr.:
source /home/uporabnik/virtualenv/myapp/3.12/bin/activate && cd /home/uporabnik/myapp
Ukaz si skopirajte, saj ga boste potrebovali v naslednjem koraku.
Namestite Django in ustvarite projekt
1. Prek SSH se povežite na paket gostovanja in zaženite ukaz za vstop v virtualno okolje. Ukazna vrstica se zdaj začne z (myapp:3.12), kar pomeni, da delate v virtualnem okolju aplikacije. Če sejo prekinete, ukaz ob naslednji prijavi ponovite.
2. Namestite Django in knjižnico za branje nastavitev iz datoteke .env:
pip install django python-dotenv
Če imate seznam paketov v datoteki requirements.txt, jih namestite z ukazom pip install -r requirements.txt. Mape venv in __pycache__ s svojega računalnika ne nalagajte na strežnik.
3. Ustvarite Django projekt v mapi aplikacije (pika na koncu je pomembna):
django-admin startproject myapp .
V mapi myapp sta zdaj datoteka manage.py in podmapa myapp z nastavitvami projekta.
4. Ustvarite mapo za predloge in prvo stran:
mkdir -p templates/static_pages
echo "Pozdravljen svet!" > templates/static_pages/index.html
Nastavite projekt za delovanje na strežniku
Preden Django aplikacijo zaženete na strežniku, morate urediti skrivni ključ, nastavitve projekta, usmerjanje URL naslovov in zagonsko datoteko.
Skrivni ključ v datoteki .env
Gesla in skrivni ključ hranite v datoteki .env v mapi aplikacije, ne v programski kodi. Datoteko ustvarite z ukazom:
python -c "from django.core.management.utils import get_random_secret_key as k; print('DJANGO_SECRET_KEY=' + k())" > .env
chmod 600 .env
Datoteka settings.py
Z urejevalnikom besedila odprite datoteko ~/myapp/myapp/settings.py in na konec datoteke dodajte:
# --- Nastavitve za gostovanje ---
import os
from dotenv import load_dotenv
load_dotenv(BASE_DIR / ".env")
SECRET_KEY = os.environ["DJANGO_SECRET_KEY"]
DEBUG = False
ALLOWED_HOSTS = ["vasadomena.si", "www.vasadomena.si"]
TEMPLATES[0]["DIRS"] = [BASE_DIR / "templates"]
STATIC_URL = "/static/"
STATIC_ROOT = "/home/uporabnik/public_html/static"
Kaj pomenijo te nastavitve:
DEBUG = False: na spletni strani, ki je dostopna javnosti, mora biti razhroščevalni način izklopljen, sicer Django obiskovalcem ob napaki prikaže kodo in nastavitve.ALLOWED_HOSTS: domene, na katerih aplikacija odgovarja. Če domene ni na seznamu, Django vrne napako 400.STATIC_ROOT: mapa znotrajpublic_html, kamor Django skopira slike, CSS in JavaScript. Spletni strežnik jih nato servira neposredno, brez Pythona.
Datoteka urls.py
Vsebino datoteke ~/myapp/myapp/urls.py zamenjajte s kodo:
from django.contrib import admin
from django.urls import path
from django.views.generic.base import TemplateView
urlpatterns = [
path("admin/", admin.site.urls),
path("", TemplateView.as_view(template_name="static_pages/index.html")),
]
Datoteka passenger_wsgi.py
Vsebino datoteke ~/myapp/passenger_wsgi.py (ustvaril jo je cPanel) zamenjajte s kodo:
import os
import sys
sys.path.insert(0, os.path.dirname(__file__))
os.environ.setdefault("DJANGO_SETTINGS_MODULE", "myapp.settings")
from django.core.wsgi import get_wsgi_application
application = get_wsgi_application()
Dodatne nastavitve iz starejših navodil (npr. PassengerPathInfoFix) niso potrebne.
Pripravite bazo, administratorja in statične datoteke
V virtualnem okolju zaženite:
python manage.py migrate
python manage.py createsuperuser
python manage.py collectstatic
migrateustvari tabele v bazi (privzeto je to datotekadb.sqlite3v mapi aplikacije).createsuperuservas vpraša za uporabniško ime, e-poštni naslov in geslo administratorja.collectstaticskopira statične datoteke vpublic_html/static.
Nato v nadzorni plošči cPanel pod Setup Python App pri aplikaciji kliknite RESTART. Aplikacijo ponovno zaženite po vsaki spremembi kode ali nastavitev.
Preverite delovanje:
https://vasadomena.si/prikaže vsebino datotekeindex.html,https://vasadomena.si/admin/prikaže prijavno stran Django administracije s slogi. Prijavite se s podatki iz korakacreatesuperuser.
Uporaba baze MariaDB ali PostgreSQL
SQLite je primerna za manjše projekte. Za več sočasnih uporabnikov priporočamo bazo MariaDB (združljiva z MySQL) ali PostgreSQL (na voljo od paketa Zeleni naprej).
Bazo, uporabnika in pravice ustvarite v nadzorni plošči cPanel (MySQL® Database Wizard oz. PostgreSQL Databases).
Podatke za dostop dodajte v datoteko .env:
DB_NAME=uporabnik_django
DB_USER=uporabnik_django
DB_PASSWORD=vase-geslo
MariaDB (MySQL)
Za povezavo z MariaDB priporočamo knjižnico PyMySQL, ki je napisana v celoti v Pythonu in se namesti brez prevajanja:
pip install pymysql
Na konec datoteke settings.py dodajte:
import pymysql
pymysql.install_as_MySQLdb()
DATABASES = {
"default": {
"ENGINE": "django.db.backends.mysql",
"NAME": os.environ["DB_NAME"],
"USER": os.environ["DB_USER"],
"PASSWORD": os.environ["DB_PASSWORD"],
"HOST": "localhost",
"OPTIONS": {
"charset": "utf8mb4",
"init_command": "SET sql_mode='STRICT_TRANS_TABLES'",
},
"CONN_MAX_AGE": 60,
"CONN_HEALTH_CHECKS": True,
}
}
Zaradi vrstice pymysql.install_as_MySQLdb() Django uporabi PyMySQL namesto knjižnice mysqlclient, ki se na strežniku pogosto ne prevede. Nastavitev init_command vklopi strogi način (ang. strict mode), ki ga Django priporoča za MariaDB.
PostgreSQL
Namestite knjižnico:
pip install "psycopg[binary]"
in na konec datoteke settings.py dodajte:
DATABASES = {
"default": {
"ENGINE": "django.db.backends.postgresql",
"NAME": os.environ["DB_NAME"],
"USER": os.environ["DB_USER"],
"PASSWORD": os.environ["DB_PASSWORD"],
"HOST": "localhost",
"CONN_MAX_AGE": 60,
"CONN_HEALTH_CHECKS": True,
}
}
Novejše različice Djanga potrebujejo novejši PostgreSQL: Django 5.2 in 6.0 različico 14 ali novejšo, Django 6.1 različico 15 ali novejšo. Različico PostgreSQL na vašem strežniku vidite v orodju phpPgAdmin.
Če ob zagonu dobite napako PostgreSQL 14 or later is required, uporabite bazo MariaDB ali nas kontaktirajte.
Po zamenjavi baze ponovno zaženite python manage.py migrate in python manage.py createsuperuser, nato aplikacijo znova zaženite.
Več o bazah v prispevku: Python aplikacija in baza MySQL (MariaDB).
Aplikacija v podmapi in WordPress na isti domeni
Če aplikacija teče v podmapi (npr. Application URL vasadomena.si/app), sta potrebni dve prilagoditvi:
1. STATIC_URL in STATIC_ROOT morata vsebovati ime podmape:
STATIC_URL = "/app/static/"
STATIC_ROOT = "/home/uporabnik/public_html/app/static"
2. Če je na korenu domene WordPress (ali drug sistem s pravili za preusmeritve), bo WordPress prestregel vse naslove pod /app/ in prikazal svojo stran »Stran ni najdena«. Deluje samo prva stran aplikacije.
Rešitev: v datoteko public_html/app/.htaccess (ustvaril jo je cPanel) na konec dodajte vrstico:
RewriteEngine On
Vrstic med oznakama DO NOT REMOVE ne spreminjajte.
Pogoste napake
Pri uporabi Django aplikacije lahko naletite na naslednje težave:
- Stran vrne napako 500 ali se ne naloži: poglejte datoteko
~/myapp/stderr.log, kamor se zapisujejo napake aplikacije. Napake v nastavitvah najhitreje najdete tako, da v virtualnem okolju zaženetepython manage.py check. - Napaka 400 (Bad Request): domena ni dodana v
ALLOWED_HOSTS. Dodajte jo zwwwin brez njega. - Administracija je brez slogov: niste zagnali
collectstaticaliSTATIC_URLinSTATIC_ROOTne ustrezata naslovu aplikacije. KeyError: 'DJANGO_SECRET_KEY': datoteke.envni v mapi aplikacije ali ni nameščen paketpython-dotenv.PostgreSQL 14 or later is required: strežnik ima starejšo različico PostgreSQL. Uporabite MariaDB.- Spremembe niso vidne: aplikacijo ponovno zaženite v Setup Python App.
- Prvi obisk je počasnejši: aplikacija se po nekaj minutah brez obiskov samodejno ustavi in se ob naslednjem obisku znova zažene. Prvi obisk zato traja približno sekundo, nadaljnji so hitrejši.
Kontrolni seznam pred objavo
Pred objavo Django aplikacije preverite nastavitve:
DEBUG = False, skrivni ključ in gesla so v datoteki.envs pravicami600, ne v kodi.ALLOWED_HOSTSvsebuje vašo domeno.collectstaticje zagnan, stili (CSS) administracije se naložijo.- Za domeno je vklopljen SSL certifikat (https).
- Baza SQLite je v mapi aplikacije, ne v
public_html.
Pri NEOSERV vam ponujamo gostovanje s podporo za Python in Django, ki ga lahko naročite v nekaj korakih. Če potrebujete pomoč pri postavitvi, smo vam na voljo.
KOMENTIRAJTE OBJAVO
Vaš komentar je bil uspešno oddan
Komentar bo viden na strani, ko ga naši moderatorji potrdijo.