/nadlogar

Spletna storitev za generiranje nalog iz slovenščine

Primary LanguagePythonMIT LicenseMIT

Črkozmed

Črkozmed je spletna storitev za generiranje naključnih nalog iz slovenskega jezika osnovana na podobni storitvi Nadlogar.

Spletno okolje omogoča uporabnikom ustvarjanje delovnih listov in urejanje nalog, ki jih ti vsebujejo. Intuitivni uporabniški vmesnik omogoča dodajanje in odstranjevanje nalog, dodajanje in odstranjevanje primerov pri nalogah in urejanje vrstnega reda nalog.

Po končanem urejanju lahko uporabnik delovni list izvozi v obliki pdf. Primere generiranih delovnih listov lahko najdemo tukaj.

Navodila za namestitev

Črkozmed za svoje delovanje potrebuje naslednjo programsko opremo:

  • HTTP strežnik - nginx
  • WSGI strežnik - gunicorn
  • Python3.6+

Za serviranje statičnih datotek se uporablja HTTP strežnik (npr. nginx ali apache), za serviranje aplikacije pa WSGI strežnik (npr. gunicorn).

struktura

Djangova dokumentacija za postavitev produkcijskega strežnika je na voljo tukaj.

Konfiguracija nginx HTTP strežnika

Pri konfiguraciji nginx strežnika, je potrebno nastaviti poti do statičnih in uporabniško naloženih datotek.

Pri tem je potrebno v nastavitvah aplikacije (config/settings.py) nastaviti pot, kjer se datoteke na disku nahajajo z naslednjima parametroma

STATIC_ROOT = '/var/www/crkozmed.stvari.si/static/'
MEDIA_ROOT = '/var/www/crkozmed.stvari.si/media/'

Poleg tega je potrebno nastaviti še URL naslova, na katerih se nahajajo statične oziroma medijske datoteke.

STATIC_URL = 'http://crkozmed.stvari.si/static/'
MEDIA_URL = 'http://crkozmed.stvari.si/media/'

Primer konfiguracije

Preden poženemo storitev črkozmed, je potrebno pognati ukaz python manage.py collectstatic --settings config.local_settings, ki kopira statične datoteke iz mape projekta v nastavljen STATIC_ROOT, kjer so nato na voljo za prenos s pomočjo HTTP strežnika.

Primer konfiguracije za nginx je podan spodaj.

  • statične datoteke se nahajajo v /var/www/crkozmed.stvari.si/static in so uporabnikom na voljo na URL naslovu http://crkozmed.stvari.si/static/.
  • uporabniško naložene datoteke se nahajajo v /var/www/crkozmed.stvari.si/media in so uporabnikom na voljo na URL naslovu http://crkozmed.stvari.si/media/.
  • vse ostale poizvedbe se preusmerijo na notranji URL (s pomočjo proxy_pass), kjer dejansko teče Črkozmed python aplikacija.
server {

	listen 80;
	listen [::]:80;

	server_name crkozmed.stvari.si;

	location /static {
		alias /var/www/crkozmed.stvari.si/static;
	}

	location /media {
		alias /var/www/crkozmed.stvari.si/media;
	}

	location / {
		proxy_set_header Host $http_host;
		proxy_pass http://127.0.0.1:8000/;
	}
	
}

Dokumentacijo za konfiguracijo komunikacije med nginx in gunicorn lahko najdemo tukaj.

Lokalne nastavitve aplikacije Črkozmed

Po prenosu je za delovanje APIja potrebno strežnik najprej konfigurirati. To lahko storimo tako, da uredimo datoteko nadlogar/config/local_settings.py.

  • SECRET_KEY - ključ, ki se uporablja za kriptografsko podpisovanje. Novega lahko generiramo tukaj.
  • ALLOWED_HOSTS - seznam domen, ki jih Django lahko servira. Med njimi naj bosta lokalni domeni 127.0.0.1 in localhost ter zunanja domena, ki je dostopna iz aplikacije (npr. crkozmed.zrc-sazu.si).
  • FRANCEK_API_KEY - Ključ za komunikacijo s spletno storitvijo franček.si. Če je ključ dodan, se v aplikaciji omogoči prijava z uporabnikovim Franček računom.
  • POT_DO_SLOVARJEV - mapa v kateri se nahajajo slovarji, ki jih aplikacija uporablja za delovanje. Privzeto je to mapa nadlogar/slovarji/. Slovarji zaradi avtorskih pravic niso vključeni v aplikacijo.
  • PRAZEN_DOKUMENT - Python slovar z dvema poljema: naslov - privzeti naslov praznega dokumenta, ki se ustvari ob kliku na gumb "Nov dokument" in opis - privzeti opis praznega dokumenta, ki se ustvari ob kliku na gumb "Nov dokument".
  • STEVILO_DELOVNIH_LISTOV_NA_STRAN - število delovnih listov, ki jih uporabniku prikažemo na strani s seznamom vseh delovnih listov uporabnika.

Generiranje pdf dokumentov

Za generiranje pdf dokumentov, storitev Črkozmed uporablja program latex. V operacijskem sistemu Ubuntu lahko latex in vse potrebne pakete namestimo z naslednjimi ukazi.

# Namestimo osnovni latex
sudo apt-get install texlive

# Namestimo paket lastpage
sudo apt-get install texlive-latex-extra

# Namestimo latex paket za slovenski jezik
sudo apt-get install texlive-lang-european

Generirani pdf dokumenti bodo shranjeni v mapo definirano v MEDIA_ROOT.

V mapo MEDIA_ROOT je potrebno kopirati datoteko nadlogar/media/izpit.cls.

# Kopiramo datoteko izpit.cls v ustrezno mapo
cp media/izpit.cls /var/www/crkozmed.stvari.si/media/izpit.cls

Namestitev

Primer namestitve aplikacije Črkozmed na Ubuntu strežnik lahko vidimo spodaj.

# Namestitev python3.6
# sudo add-apt-repository ppa:deadsnakes/ppa
# sudo apt-get update
# sudo apt install python3.6 python3.6-venv

# Namestitev pip3.6
# curl https://bootstrap.pypa.io/get-pip.py -o get-pip.py
# python3.6 get-pip.py

# Namestitev nginx streznika
sudo apt-get update
sudo apt-get install nginx

# Priprava map za staticne in medijske datoteke
sudo mkdir --parents /var/www/crkozmed.stvari.si/static
sudo mkdir --parents /var/www/crkozmed.stvari.si/media

# TODO: Ustvari novo konfiguracijsko datoteko za nginx in jo uredi
# sudo vim /etc/nginx/sites-available/crkozmed
# sudo ln -s /etc/nginx/sites-available/crkozmed /etc/nginx/sites-enabled/crkozmed
# sudo service nginx restart

# Namestimo latex in vse potrebovane pakete
sudo apt-get install texlive

# Namestimo paket lastpage
sudo apt-get install texlive-latex-extra

# Namestimo latex paket za slovenski jezik
sudo apt-get install texlive-lang-european

# Prenos Crkozmed repozitorija
git clone https://github.com/drobilc/nadlogar.git
cd nadlogar/nadlogar

# TODO: Urejanje nastavitev Crkozmed
# vim config/settings.py

# Ustvarimo in aktiviramo virtualno okolje za python
python3.6 -m venv venv
source ./venv/bin/activate

# Namestitev zahtev crkozmeda
pip3.6 install -r ./requirements.txt

# Namestitev gunicorn WSGI streznika
pip3.6 install gunicorn

# Ustvarimo bazo podatkov
python3.6 manage.py migrate

# Kopiramo staticne datoteke v mapo definirano v nastavitvah
python3.6 manage.py collectstatic

# Kopiramo datoteko izpit.cls v ustrezno mapo
cp media/izpit.cls /var/www/crkozmed.stvari.si/media/izpit.cls

# Pozenemo crkozmeda z uporabo gunicorn
gunicorn config.wsgi