h6 Hello Django

Oma Host kokoonpanoni:

Komponentti Kuvaus Lisätiedot
Emolevy MSI B550-A PRO ATX, AM4
Prosessori AMD Ryzen 9 5900X 12-Core 3.70 GHz
RAM G.Skill Ripjaws V 32GB (4x8GB) DDR4 3600MHz, CL 16, 1.3
Näytönohjain Sapphire PULSE AMD Radeon RX 7900 GRE 16GB
Kovalevy Kingston 1TB A2000 NVMe PCIe SSD M.2
Kovalevy Crucial 512GB MX100 SSD
Kovalevy Crucial 256GB MX100 SSD
Virtalähde Asus 750W TUF Gaming Gold ATX 80 Plus
Kotelo Phanteks Enthoo Pro Full Tower

Käyttöjärjestelmä: Windows 11 Pro 23H2

Virtuaalikone

Oracle VirtualBox 7 - Debian 12 GNU/Linux (bookworm)
6 Prosessoriydintä - 4GB RAM-muistia - 60GB tallennustilaa

Palvelin

UpCloud
Debian 12 GNU/Linux (bookworm)
1 Prosessoriydin - 1GB RAM-muistia - 10GB tallennustilaa

a) Tee yksinkertainen esimerkkiohjelma Djangolla

27.9.2024 klo 11:30

Tähän käytän tietenkin apuna Karvisen Django 4 Instant Customer Database Tutorial:ia

Kirjauduin palvelimelleni ja aluksi päivitetään pakettilista sudo apt-get update

Asennetaan virtualenv virtuaaliympäristö sudo apt-get -y install virtualenv

Luodaan uusi kansio virtualenville, joka sisältää viimeisimmät paketit virtualenv --system-site-packages -p python3 env/

Venvpaketit

Otetaan virtuaaliympäristö käyttöön source env/bin/activate

venvkayttoon

Nyt ollaan virtuaaliympäristössä, emme halua käyttää “pip”:iä ilman virtualenviä, eikä sitä saa käyttää “sudo”:lla. En halua antaa palvelinta muiden käyttöön, joten noudatan ohjetta tarkasti. Teen kyselyn, jotta varmistutaan, että olemme asentamassa virtuaaliympäristöön

whichpip

Luon ohjeen mukaan varmuudeksi “requirements.txt.” tiedoston microlla, jotta ei vahingossakaan tule kirjoitusvirheitä kun asennetaan django pip:llä. Tiedoston sisään kirjoitan “django” ja tallennan tiedoston “ctrl+s” ja poistun “ctrl+q”

requirementstxt

Varmuuden vuoksi kopioin requirements.txt tekstin ja katson vielä cat requirements.txt komennolla, että siellä varmasti lukee oikein “django”

catrequirements

Tämä voi tuntua hätävarjelun liioittelulta, mutta en halua ottaa ylimääräisiä riskejä

Seuraavaksi asennetaan django pip:llä pip install -r requirements.txt, hieman jännittävä toimenpide, mutta siitä selvittiin

djangoinstalled

Aloitan uuden Django projektin nimeltä “sant” django-admin startproject sant

Seuraavaksi kokeillaan laittaa Django palvelin toimimaan ohjeen mukaan, menen “sant” kansioon, siellä .manage.py runserver

managerunserver

Nyt on tuotantopalvelin päällä. Tätä palvelinta ei kannata päästää internetiin. Kokeillaan mennä selaimella osoitteeseen “http://127.0.0.1:8000/”

Ei toimi, tuo .manage.py runserver antoi punaisella tekstillä herjaa “You have 18 unapplied migration(s). Your project may not work properly until you apply the migrations for app(s): admin, auth, contenttypes, sessions.” ja korjaukseksi komento python manage.py migrate, joten kokeilen sitä

migrateisson

Tämän jälkeen uudestaan .manage.py runserver ja nyt ei tule virheilmoituksia

djangoserveron

Kokeillaan uudestaan selaimella “http://127.0.0.1:8000/”. Eikä toimi vieläkään, tietenkin tämä johtuu siitä, että olen virtuaalipalvelimella, jossa ei ole muuta kuin CLI käyttöliittymä. Pitää siis tehdä kaikki uudestaan paikallisesti. exit komennolla takaisin “taulu” virtuaalikoneelle. Teen samat asiat kuin aiemmin

djangoversion

Nyt käynnistettyäni palvelimen, pääsen selaimella “http://127.0.0.1:8000/”, ja homma toimii, voi taas äiti olla ylpeä pojastaan

djangoworks

Hauskana yksityiskohtana huomaan, nyt kun palvelin on päällä, palvelin näyttää käyntini tuolla sivulla suoraan reaaliajassa ja herjaa, että favicon.ico:a ei voitu toimittaa, eli se pieni kuvake mikä näkyy selaimen välilehdellä

kayntitiedotreaali

Seuraavaksi lisätään admin url:lle “http://127.0.0.1:8000/admin/” suoraan Karvisen ohjeilla, kätevä tuo salasananluontityökalu

historymakeadmin

Nyt pääsen admin-kirjautumisikkunaan osoitteella “http://127.0.0.1:8000/admin/”

adminlogin

Jätin käyttäjänimikentän tyhjäksi, joten oletuksena käyttäjä on tässä tapauksessa “santeri”, olen sisällä

sisallaadminina

Loin uuden käyttäjän “sant” kohdasta “users - add”

santuus

Annoin käyttäjälle “staff”, sekä “superuser”-statuksen

superstaff

Kirjauduin ulos, ja takaisin sisään, tällä kertaa “sant” nimisenä käyttäjänä

santsissal

Kokeilin mennä käyttäjienhallintaan muokkaamaan oikeuksia, otin alkuperäiseltä “santeri”:lta “staff”-oikeudet pois, todettakoon, että superkäyttäjän oikeudet toimivat tällä uudella käyttäjällä

santerisstaffpois

Luodaan asiakastietokanta

Luodaan “crm/” kansio CRM-sovellukselle ./manage.py startapp crm

Lisätään sovellus asennettuihin sovelluksiin micro sant/settings.py

crmlisatty

Lisätään modeleja micro crm/models.py. Tiedostossa oli valmiina “from django.db import models”. Lisätään sinne vielä class Customer(models.Model): name = models.CharField(max_length=300). Täten tietokantaan tulee “customer”-tietue “name” sarakkeella

crmcustodata

Nyt ajetaan samat ./manage.py makemigrations ja ./manage.py migrate

Rekisteröidään tietokanta admin/ kansioon micro crm/admin.py, ja sille lisätään tiedot from . import models admin.site.register(models.Customer)

Nyt pystytään lisäilemään asiakkaita, tosin niiden nimet ovat luokkaa “Customer object (1)”

asiakkaatcustobject

Mennään muokkaamaan models.py tiedostoa micro crm/models.py ja lisätään sinne pari riviä, jotka saavat asiakkaan nimen näkymään oikein

asiakasnimetmuok

Nyt kun yrittää käynnistää palvelinta, tulee herja

pyerrorii

Kopioin suoraan Karvisen ohjeesta tuon koko koodin, jolla sain taas palvelimen käyntiin

koodikopied

Nyt näkyy asiakkaiden nimet oikein

asiakkaidennimetoikein

klo 13:08, aikaa kului 1h 38min

b) Tee Djangon tuotantotyyppinen asennus

Voit halutessasi tehdä asennuksen omalle, paikalliselle virtuaalikoneelle. Sen ei tarvitse näkyä Internetiin.

klo 13:30

Tähän käytän pohjana Tero Karvisen Deploy Django 4 - Production Install ohjeita

Teen tämän paikallisella virtuaalikoneellani. Apache2 ja micro on jo asennettu, joten menen suoraan kohtaan “Create some web content as a user”

Luon kansioita tätä varten mkdir -p publicwsgi/sant/static/, sekä .html tiedoston echo "Onpas mukava nähdä teitä täällä tänään."|tee publicwsgi/sant/static/index.html

Käyn varmistamassa, että kyseiset kansiot ja tiedosto tuli luotua oikein

onpasmukava

Looking good. Seuraavaksi lisään uuden virtualhostin sudoedit /etc/apache2/sites-available/sant.conf seuraavilla tiedoilla

conffitiedot

Laitan apachen hyväksymään sivun sudo a2ensite sant.conf, “000-default.conf”:n olen jo laittanut pois, mutta lähtötilanteessa sudo a2dissite 000-default.conf hoitaa sen, laitetaan myös aiemmassa tehtävässä tekemäni “hattu.example.com.conf” ja “tama.juttu.com.conf” pois sudo a2dissite komennolla

Varmistetaan konfiguraation toimivuus /sbin/apache2ctl configtest

configtest

AH00558 herja lienee normaalia, pääasia, että “Syntax OK” ilmestyy lopussa

Potkaistaan demonia, eli käynnistetään apache uudelleen sudo systemctl restart apache2 ja curlataan localhostia curl http://localhost/static/, joten nähdään päästäänkö tietoihin käsiksi

curllocal

Mennään “~/publicwsgi” kansioon, jossa komennolla virtualenv -p python3 --system-site-packages env. Hypätään virtualenviin source env/bin/activate

which pip “/home/santeri/publicwsgi/env/bin/pip”. Tehdään taas requirements.txt ja sinne “django”, jonka jälkeen pip install -r requirements.txt ja django-admin --version “5.1.1”, ok

Kopioin a) kohdassa tekemäni sant/ kansion tuonne publicwsgi/ kansioon home/santeri/ kansiosta cp -R sant/ publicwsgi/

django-admin startproject sant, koska sant/ kansio on jo olemassa, joten ei tarvinnut tätä vaihetta näemmä tehdä enää

santalready

Seuraavaksi yhdistetään Python Apacheen käyttäen mod_wsgi:tä. Ohjeessa kerrotaan, että kaiken toimiakseen, täytyy tietää kolme absoluuttista polkua, joten ne kannattaa ottaa ylös tekstitiedostoon, josta niitä voi kopioida tarvittaessa.

Tiedostosijainnit ovat:

djangosant

wsgisant

sitepackansio

Käyn muokkaamassa sant.conf tiedostoa sudoedit /etc/apache2/sites-available/sant.conf, nyt ohjeessa on niin pitkälti tietoa, jota tuonne tulee, että kopioin suoraan kaiken tiedostoon ja muokkaan omilla poluilla ja nimillä. Tässä tulee hyötykäyttöön äsken hakemani sijainnit, en lähtenyt muuttamaan muuta kuin nuo sijainnit

sijainnitsianconffi

Jatketaan, asennan WSGI moduulin, jotta Apache tietää mitä WSGI komennot tarkoittavat. sudo apt-get -y install libapache2-mod-wsgi-py3

/sbin/apache2ctl configtest antaa “Syntax OK”:ta, joten kaikki hyvin. Potkaistaan demonia sudo systemctl restart apache2, kokeillaan curl -s localhost|grep title

successgrep

On se helppoa, kun on hyvät ohjeet. Kokeillaan vielä curl -sI localhost|grep Server

onseapache

On se Apache, tässä vielä näkymä selaimella

selaimellatoimii

Otetaan DEBUG pois käytöstä

Navigoidaan “/home/santeri/publicwsgi/sant/sant” micro settings.py

Sieltä muutetaan

Jos menisi oikeaan tuotantoon, laittaisin esim. [“localhost”, “testisivu.santerivauramo.com”]

hosoiri

Näillä komennoilla ladattiin uudet asetukset, tämä muutos tarvinnee sudo systemctl restart apache2 toimiakseen

http://localhost/admin selaimeen, pääsee kirjautumaan admin näkymään, mutta näyttää karulta. Aiemmassa vaiheessa luotu “santeri” käyttäjällä pääsee generoidulla salasanalla kirjautumaan. Sivu tosin näyttää tältä:

djangoapachejuttu

Korjataan kauneusvirheet

Mennään uudestaan micro settings.py ja lisätään sinne

Nyt cd .. ja ./manage.py collectstatic, promptiin “yes”

staticitmanage

Testataan miltä nyt näyttää “http://localhost/admin”, kaunista

productstyle

klo 15:05

Homma kaiketi siinä, jäi vielä mietityttämään kun ohjeessa puhuttiin tästä

ohjekayttaja

Eli WSGI moduulin ajamiseen ei kannata käyttää sudo käyttäjää, jotein täytyy tehdä uusi käyttäjä tätä varten

Kävin tämän tiimoilta luomassa uuden käyttäjän ilman kummempia oikeuksia sudo adduser djangotyyppi

Jonka jälkeen muokkasin “sudoedit /etc/apache2/sites-available/sant.conf”:sta “TUSER”:n “djangotyyppi”:ksi

djangosankari

Yritin asentaa “acl” “Access Control List” ohjelmaa käyttäjien hallintaa varten näillä ohjeilla, mutta se oli jo asennettu. Piti kuitenkin mountata filesystem acl optiolla, koska ohjelma antoi virheen

aclasennus

Jostain syystä djangotyyppi oli päässä muuttunut debiantyypiksi, tarkkuutta mies

Nyt pystyin antamaan komennolla setfacl -R -m user:djangotyyppi:7 /home/santeri/publicwsgi djangotyypille oikeudet tuohon kansioon. -R viittaa tuohon kansioon ja kaikkiin sen alikansioihin ja tiedostoihin

Nyt kokeilen vielä muokata kansioiden sisältöä djangotyypillä. Ensin vaihdetaan käyttäjää komennolla su djangotyyppi

djangosekoilu

Nyt mennään takaisin santerina ja käydään katsomassa onko tallennettu tiedosto todella tuolla su santeri

siellon

Siellä se on

sielse

Lähteet

Debian Wiki. Permissions. Luettavissa: https://wiki.debian.org/Permissions. Luettu 27.9.2024 Django. django-admin and manage.py. Luettavissa: https://docs.djangoproject.com/en/5.1/ref/django-admin/. Luettu 27.9.2024
Karvinen, T. 2022. Deploy Django 4 - Production Install. Luettavissa: https://terokarvinen.com/2022/deploy-django/. Luettu 27.9.2024
Karvinen, T. 2022. Django 4 Instant Customer Database Tutorial. Luettavissa: https://terokarvinen.com/2022/django-instant-crm-tutorial/. Luettu 27.9.2024
W3Schools. Django Tutorial. Luettavissa: https://www.w3schools.com/django/index.php. Luettu 27.9.2024


Tätä dokumenttia saa kopioida ja muokata GNU General Public License (versio 2 tai uudempi) mukaisesti. http://www.gnu.org/licenses/gpl.html
Pohjana Tero Karvinen 2012: Linux kurssi, http://terokarvinen.com

Kirjoittanut Santeri Vauramo, 2024

← Back