Posodobitve kritičnih PHP ranljivosti (CVE-2026-109618, CVE-2026-109619). VEČ O TEM

✕
Košarica (0)
  • Vaša košarica je trenutno prazna

NEOSERV BLOG

Nasveti, vodiči in koristne informacije o domenah, gostovanju, SSL certifikatih, e-pošti, spletni optimizaciji in varnosti na spletu.

Python: Django aplikacija v cPanel
Kategorija: Triki in nasveti
Objavljeno:

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?

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.si in uporabniško ime uporabnik. 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 izven public_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 znotraj public_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
  • migrate ustvari tabele v bazi (privzeto je to datoteka db.sqlite3 v mapi aplikacije).
  • createsuperuser vas vpraša za uporabniško ime, e-poštni naslov in geslo administratorja.
  • collectstatic skopira statične datoteke v public_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 datoteke index.html,
  • https://vasadomena.si/admin/ prikaže prijavno stran Django administracije s slogi. Prijavite se s podatki iz koraka createsuperuser.

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ženete python manage.py check.
  • Napaka 400 (Bad Request): domena ni dodana v ALLOWED_HOSTS. Dodajte jo z www in brez njega.
  • Administracija je brez slogov: niste zagnali collectstatic ali STATIC_URL in STATIC_ROOT ne ustrezata naslovu aplikacije.
  • KeyError: 'DJANGO_SECRET_KEY': datoteke .env ni v mapi aplikacije ali ni nameščen paket python-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 .env s pravicami 600, ne v kodi.
  • ALLOWED_HOSTS vsebuje vašo domeno.
  • collectstatic je 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.

KOMENTARJI

KOMENTIRAJTE OBJAVO

(obvezno)
(obvezno, e-poštni naslov bo skrit)
(neobvezno)
Varnostno vprašanje, ki potrdi, da ste resnična oseba.