From 8828d962d4b7e5164906b50d096dd70f6e5a403d Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 5 Dec 2024 11:47:25 +0200 Subject: [PATCH 1/4] Remove old non-working installation stuff --- installer/linux/deb/DEBIAN/control | 11 - installer/linux/deb/DEBIAN/postinst | 18 -- installer/windows/INSTRUCTIONS | 13 - installer/windows/Kipa_win_asennus_flow.dia | Bin 8313 -> 0 bytes installer/windows/apache/INSTRUCTIONS | 4 - installer/windows/install.cfg | 16 -- installer/windows/installer.c | 294 -------------------- installer/windows/installeri.xml | 34 --- installer/windows/python/INSTRUCTIONS | 3 - installer/windows/setup.exe | Bin 27930 -> 0 bytes installer/windows/web/INSTRUCTIONS | 2 - 11 files changed, 395 deletions(-) delete mode 100755 installer/linux/deb/DEBIAN/control delete mode 100755 installer/linux/deb/DEBIAN/postinst delete mode 100755 installer/windows/INSTRUCTIONS delete mode 100644 installer/windows/Kipa_win_asennus_flow.dia delete mode 100755 installer/windows/apache/INSTRUCTIONS delete mode 100755 installer/windows/install.cfg delete mode 100644 installer/windows/installer.c delete mode 100644 installer/windows/installeri.xml delete mode 100755 installer/windows/python/INSTRUCTIONS delete mode 100755 installer/windows/setup.exe delete mode 100755 installer/windows/web/INSTRUCTIONS diff --git a/installer/linux/deb/DEBIAN/control b/installer/linux/deb/DEBIAN/control deleted file mode 100755 index 4942146b..00000000 --- a/installer/linux/deb/DEBIAN/control +++ /dev/null @@ -1,11 +0,0 @@ -Package: kipa -Version: 0.9-0 -Architecture: all -Maintainer: Frans Korhonen [frans.korhonen@gmail.com] -Depends: apache2, python , python-django (>= 1.0), libapache2-mod-python -Section: opt -Priority: extra -Description: KiPa(KisaPalvelu), tuloslaskentajärjestelmä partiotaitokilpailuihin - - - diff --git a/installer/linux/deb/DEBIAN/postinst b/installer/linux/deb/DEBIAN/postinst deleted file mode 100755 index 97d67454..00000000 --- a/installer/linux/deb/DEBIAN/postinst +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/bash - -chown www-data /opt/kipa/web -chown www-data /opt/kipa/web/tupa.db -ln -s /opt/kipa/web/media /var/www/kipamedia - -apacheConf=/etc/apache2/httpd.conf - -echo '' >> ${apacheConf} -echo ' SetHandler python-program' >> ${apacheConf} -echo ' PythonHandler django.core.handlers.modpython' >> ${apacheConf} -echo ' SetEnv DJANGO_SETTINGS_MODULE web.settings' >> ${apacheConf} -echo ' PythonDebug On' >> ${apacheConf} -echo " PythonPath \"['/opt/kipa'] + sys.path\"" >> ${apacheConf} -echo '' >> ${apacheConf} - -/etc/init.d/apache2 restart - diff --git a/installer/windows/INSTRUCTIONS b/installer/windows/INSTRUCTIONS deleted file mode 100755 index 61579742..00000000 --- a/installer/windows/INSTRUCTIONS +++ /dev/null @@ -1,13 +0,0 @@ -Kipa windows installer - -Setup : -1. Copy the Apache installer to root dir. (where this README is located) -2. Modify install.cfg so that the filename and keys apply to the Apache to be installed. (registry key version number) -3. Copy python that has reportlab and mod_python addon suitable for the specific apache under dir "python". -4. Copy Apache addons under dir "Apache" -5. Copy Kipa source under web -6. Run setup.exe and confirm that kipa installs and works. -7. Create self extracting package that runs setup.exe automatically. Use some nice free sofware like ChilkatZipSE. settings for ChilkatZipSE are in installeri.xml -8. Install and test. -9. Release the file. - diff --git a/installer/windows/Kipa_win_asennus_flow.dia b/installer/windows/Kipa_win_asennus_flow.dia deleted file mode 100644 index 10d9460c767506a8732c039237ce2925ae932d3b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 8313 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 DWASO( diff --git a/installer/windows/apache/INSTRUCTIONS b/installer/windows/apache/INSTRUCTIONS deleted file mode 100755 index 53d37cdb..00000000 --- a/installer/windows/apache/INSTRUCTIONS +++ /dev/null @@ -1,4 +0,0 @@ -Here comes all addons to Apache (mod_python) -Dlls go to bin (msvcrt71.dll) (python.dll) -mod_python.so goes undes modules. - diff --git a/installer/windows/install.cfg b/installer/windows/install.cfg deleted file mode 100755 index 2b21b1b8..00000000 --- a/installer/windows/install.cfg +++ /dev/null @@ -1,16 +0,0 @@ -# Program name for apache httpd.conf etc. -program_name = kipa -# static media root url for apache: -media_destination = /kipamedia -# media source directory in program (without trailing /) -media_dir = media -# default installation dir (after program files) -default_dir = kipa -# Apache installer command for advanced users. -advanced_apache_installer = apache_2.2.14-win32-x86-openssl-0.9.8k.msi -# Apache installer to be run in the beginning. -apache_installer = msiexec /i apache_2.2.14-win32-x86-openssl-0.9.8k.msi /passive ALLUSERS=1 SERVERADMIN=admin@localhost SERVERNAME=localhost SERVERDOMAIN=localhost SERVERPORT=80 -# registery key and value for getting the current Apache installation dir -apache_dir_key = SOFTWARE\Apache Software Foundation\Apache\2.2.14 -apache_dir_64key = SOFTWARE\Wow6432Node\Apache Software Foundation\Apache\2.2.14 -apache_dir_value = ServerRoot diff --git a/installer/windows/installer.c b/installer/windows/installer.c deleted file mode 100644 index a6b83135..00000000 --- a/installer/windows/installer.c +++ /dev/null @@ -1,294 +0,0 @@ -#include -#include -#include -#include -#include - - -int getconf(char *filename,char **keys,char **values,int max_str_len) ; // function for getting values from config files - -void getString(char *string) { // Function for getting raw line input from user - char ch; - while ((ch = getchar()) != '\n') { - if(ch=='\b' && strlen(string) ) string[strlen(string)-1]=0 ; - else { - string[strlen(string)]=ch ; - string[strlen(string)+1]=0 ; - } - } -} - -int main(int argc, char** argv) { - char apachedir[256]=""; - // Luetaan Konffitiedosto - char defaultdir[256] ; - char apache_installer[256] ; - char apache_dir_key[256] ; - char apache_dir_64key[256] ; - char apache_dir_value[256] ; - char program_name[256] ; - char media_destination[256] ; - char media_dir[256] ; - char advanced_apache_installer[256] ; - char *keys[] = {"default_dir", - "apache_installer", - "apache_dir_key", - "apache_dir_64key", - "apache_dir_value", - "program_name", - "media_destination", - "media_dir", - "advanced_apache_installer", - NULL} ; - char *values[9] ; - values[0]=defaultdir ; - values[1]=apache_installer ; - values[2]=apache_dir_key ; - values[3]=apache_dir_64key ; - values[4]=apache_dir_value ; - values[5]=program_name ; - values[6]=media_destination ; - values[7]=media_dir ; - values[8]=advanced_apache_installer ; - getconf("install.cfg",keys,values,256) ; - - // Haetaan program files muuttuja : - char installdir[256]="" ; - char *program_files ; - program_files=getenv("ProgramFiles") ; - strcpy(installdir,program_files) ; - strcat(installdir,"\\") ; - strcat(installdir,defaultdir) ; - - printf("\nTervetuloa kipan asennusohjelmaan.\n") ; - char asennus[256] = "" ; - while( asennus[0]!='1' && asennus[0]!='2' ){ - asennus[0] = 0 ; - printf("\nValitse asennuksen tyyppi.\n 1) Helppo \n 2) Muokautettu \n\n >>" ) ; - getString(asennus) ; - } - - // Kysell��n tyhmi�: - printf("\nMihin hakemistoon %s asennetaan? (Oletus=%s)\n Jos oletuspaikka on ok, paina vaan enter. \n\n>>", program_name,installdir) ; - char hakemisto[256]=""; - getString(hakemisto) ; - - - printf("Asennetaan apache.\n") ; - // Ajetaan apache asentaja - if( asennus[0]=='2') system(advanced_apache_installer); - else system( apache_installer) ; - - printf("Asennetaan kipa.\n"); - - // Ronkitaan rekisterist�,tai kysyt��n k�ytt�j�lt�, apachen asennus hakemisto. - HKEY hkey; - unsigned long datalen; - unsigned long datatype; - if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, - apache_dir_key, - NULL, - KEY_QUERY_VALUE, - &hkey) == ERROR_SUCCESS) // Normal windows - { - if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, - apache_dir_64key, - NULL, - KEY_QUERY_VALUE, - &hkey) == ERROR_SUCCESS) // 64 bit windows 7 - { - printf("\nAsennus ei l�yt�nyt Apachea rekisterist�.\n Kerro Apachen siainti koneellasi \n (Hakemisto jonka alla on suoraan \"modules\" ja \"bin\" hakemisto):\n"); - getString(apachedir) ; - } - } - datalen = 256; - if (RegQueryValueExA(hkey, - apache_dir_value , - NULL, - &datatype, - apachedir, - &datalen) != ERROR_SUCCESS && !apachedir[0]) - { - printf("\nAsennus ei l�yt�nyt Apachea rekisterist�.\nKerro Apachen siainti koneellasi. \n (Hakemisto on se jonka alla on suoraan \"modules\" ja \"bin\" hakemistot):\n"); - getString(apachedir) ; - } - RegCloseKey(hkey); - - // Toistetaan itsest��nselvyys: - printf("Apache on hakemistossa:%s\n",apachedir); - - if (hakemisto[0]) { - installdir[0]=0 ; - strcpy(installdir , hakemisto) ; - } - - - int i; - for( i =0 ; i< strlen(installdir) ; i++ ) { // korvataan kaikki / - - if (installdir[i]==47) installdir[i]='\\' ; - } - if (installdir[strlen(installdir)-1]=='\\' ) installdir[strlen(installdir)-1]= 0 ; - printf("Asennetaan %s hakemistoon \"%s\n\"" , program_name ,installdir) ; - - // Kopioidaan tiedostoja: - char p_kom[256]; - sprintf(p_kom,"xcopy python\\* \"%s\\python\" /s /y /i /R",installdir ); - char db_bak[256]; - sprintf(db_bak,"xcopy \"%s\\web\\*.db\" \"%s\\web\\bak\\\" /y",installdir, installdir ); - char db_res[256] ; - sprintf(db_res,"xcopy \"%s\\web\\bak\\*.db\" \"%s\\web\\\" /y",installdir, installdir ); - char w_kom[256]; - sprintf(w_kom,"xcopy web\\* \"%s\\web\" /s /i /y /R",installdir ); - char a_kom[256]; - sprintf(a_kom,"xcopy apache\\* \"%s\" /s /i /y /R",apachedir ); - - - // Paivitetaan pythonpath - char pyPath[256]; - sprintf(pyPath,"%s\\python;%s\\python\\lib;%s\\python\\DLLs;%s\\python\\plat-win;%s\\python\\lib\\lib-tk",installdir,installdir,installdir,installdir,installdir); - if (!RegOpenKeyExA(HKEY_LOCAL_MACHINE, - "SYSTEM\\CurrentControlSet\\Control\\Session Manager\\Environment", - NULL, - KEY_SET_VALUE, - &hkey) == ERROR_SUCCESS) - { - printf("Ei onnistu laittamaan python pathia.\n Kokeile ajaa uudestaan admin oikeuksilla."); - while( !kbhit()); - return -1 ; - } - datalen = 256; - RegSetValueEx( - hkey, - "PythonPath", - 0, - REG_EXPAND_SZ, - pyPath, - 255); - RegCloseKey(hkey); - - // Nollataan apachen konfigurointitiedosto. Ettei p�ivitett�ess� kumuloidu. - char ht_kom[256]; - sprintf(ht_kom ,"copy \"%s\\conf\\original\\httpd.conf\" \"%s\\conf\\\"", apachedir,apachedir) ; - - system( p_kom ); - system( db_bak ) ; - system( w_kom ); - system( db_res ) ; - system( a_kom ); - system( ht_kom ); - - // Paivitetaan httpd.conf - - char httpd_conf[512] ; - sprintf(httpd_conf,"Alias %s \"%s\\web\\%s\" \n \n Order allow,deny \n Allow from all \n \n LoadModule python_module modules/mod_python.so \n \n SetHandler python-program \n PythonHandler django.core.handlers.modpython \n SetEnv DJANGO_SETTINGS_MODULE web.settings \n PythonDebug On \n PythonPath \"['%s'] + sys.path\" \n \n",media_destination, - installdir, - media_dir, - installdir, - media_dir, - program_name, - installdir) ; - - char httpd_filename[256] ; - sprintf(httpd_filename,"%s\\conf\\httpd.conf",apachedir) ; - - FILE *fp; - fp = fopen(httpd_filename, "a"); - for (i=0; i - - - Chilkat Software, Inc. - http://www.chilkatsoft.com/ - - C:\ransu\code\kipa_win\kipa_1.0.2-full-win32.zip - - - 1 - 0 - 0 - 0 - 1 - 1 - 0 - 128 - 14.3.0 - - - - - - - - - setup.exe - - - - - 1 - - diff --git a/installer/windows/python/INSTRUCTIONS b/installer/windows/python/INSTRUCTIONS deleted file mode 100755 index 5932369e..00000000 --- a/installer/windows/python/INSTRUCTIONS +++ /dev/null @@ -1,3 +0,0 @@ -Here comes the python. -Python must be equipped with correct mod_python and reportlab - diff --git a/installer/windows/setup.exe b/installer/windows/setup.exe deleted file mode 100755 index 1ca0ef0e313537aa31b6fb8c76248dc9cc4f76b1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 27930 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 Date: Thu, 5 Dec 2024 16:11:20 +0200 Subject: [PATCH 2/4] Add wsgi capability Now Kipa can be run with gunicorn. --- requirements.txt | 3 +-- web/wsgi.py | 7 +++++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 web/wsgi.py diff --git a/requirements.txt b/requirements.txt index fe4adc89..d5223166 100644 --- a/requirements.txt +++ b/requirements.txt @@ -1,3 +1,2 @@ django==5.1 -#mysql-python -# git+https://github.com/PyMySQL/mysqlclient-python.git@v1.4.6#egg=MySQLdb +gunicorn==23.0.0 diff --git a/web/wsgi.py b/web/wsgi.py new file mode 100644 index 00000000..4aa749a3 --- /dev/null +++ b/web/wsgi.py @@ -0,0 +1,7 @@ +import os + +from django.core.wsgi import get_wsgi_application + +os.environ.setdefault("DJANGO_SETTINGS_MODULE", "settings") + +application = get_wsgi_application() From 17839699bfa6f7e7fd23663473be5e479d52a29c Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Thu, 5 Dec 2024 16:13:34 +0200 Subject: [PATCH 3/4] Use Nginx & gunicorn to run Kipa in container --- .dockerignore | 1 + .github/workflows/continuous-integration.yml | 2 +- Dockerfile | 31 +++++++++++---- db/.keep | 0 docker-compose.yml | 6 --- docker-entrypoint.sh | 10 ----- docs/installation.md | 2 +- nginx.conf | 42 ++++++++++++++++++++ web/settings/docker.py.example | 7 +--- 9 files changed, 70 insertions(+), 31 deletions(-) create mode 100644 .dockerignore delete mode 100644 db/.keep delete mode 100644 docker-compose.yml delete mode 100755 docker-entrypoint.sh create mode 100644 nginx.conf diff --git a/.dockerignore b/.dockerignore new file mode 100644 index 00000000..98037882 --- /dev/null +++ b/.dockerignore @@ -0,0 +1 @@ +web/settings/local.py diff --git a/.github/workflows/continuous-integration.yml b/.github/workflows/continuous-integration.yml index 34a02ffc..c5f45305 100644 --- a/.github/workflows/continuous-integration.yml +++ b/.github/workflows/continuous-integration.yml @@ -50,7 +50,7 @@ jobs: pip install robotframework pip install robotframework-seleniumlibrary - name: start SUT - run: docker run -d -p 3000:3000 kipa + run: docker run -d -p 3000:80 kipa - name: wait SUT to start run: while ! curl -s -f 'http://localhost:3000/kipa' ; do sleep 2; docker ps; done shell: bash diff --git a/Dockerfile b/Dockerfile index 46ad8b45..de834b30 100644 --- a/Dockerfile +++ b/Dockerfile @@ -1,11 +1,26 @@ -FROM python:3.12 +FROM ubuntu/nginx:1.24-24.04_beta -WORKDIR /app/web +RUN apt-get update \ + && apt-get install -y python3.12 python3.12-venv \ + && apt-get clean -ENTRYPOINT ["/app/docker-entrypoint.sh"] -EXPOSE 3000 -CMD ["python", "./manage.py", "runserver", "0.0.0.0:3000"] +COPY web /app/ +COPY --chown=nobody:nogroup web/media /media +COPY web/settings/docker.py.example /app/settings/docker.py +COPY requirements.txt / +COPY nginx.conf /etc/nginx/ -COPY . /app/ -COPY web/settings/docker.py.example /app/web/settings/docker.py -RUN pip install -r /app/requirements.txt +RUN python3.12 -m venv venv +ENV PATH="/venv/bin:$PATH" + +WORKDIR /app + +RUN rm -rf /app/media \ + && mkdir /db \ + && pip install -r /requirements.txt \ + && tr -dc A-Za-z0-9 < /dev/urandom | head -c 40 > /secret.txt \ + && python manage.py makemigrations tupa \ + && python manage.py migrate \ + && nginx -t \ + && echo "gunicorn --daemon --bind unix:/tmp/kipa.sock wsgi --error-logfile /tmp/errors " > /docker-entrypoint.d/gunicorn.sh \ + && chmod +x /docker-entrypoint.d/gunicorn.sh \ diff --git a/db/.keep b/db/.keep deleted file mode 100644 index e69de29b..00000000 diff --git a/docker-compose.yml b/docker-compose.yml deleted file mode 100644 index afbbc6c4..00000000 --- a/docker-compose.yml +++ /dev/null @@ -1,6 +0,0 @@ -version: '3' -services: - web: - build: . - ports: - - 3000:3000 diff --git a/docker-entrypoint.sh b/docker-entrypoint.sh deleted file mode 100755 index 9727dbcd..00000000 --- a/docker-entrypoint.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/bash - -if [ ! -f "/app/db/secret.txt" ]; then - tr -dc A-Za-z0-9 < /dev/urandom | head -c 40 > /app/db/secret.txt -fi -if [ ! -f "/app/db/kipa.db" ]; then - cp /app/docs/initial.db /app/db/kipa.db -fi - -exec "$@" diff --git a/docs/installation.md b/docs/installation.md index a950aab2..59427704 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -26,7 +26,7 @@ riittävän hyvää verkkoyhteyttä. token [täältä](https://github.com/settings/tokens) jakirjaudu Docker-clientillä sisään GitHubin pakettivarantoon esimerkiksi komennolla `docker login ghcr.io` -2. Aja komento `docker run -d -p 3000:3000 -v kipa_db:/app/db --name kipa -d ghcr.io/partio-scout/kipa:latest` +2. Aja komento `docker run -d -p 3000:80 -v kipa_db:/app/db --name kipa -d ghcr.io/partio-scout/kipa:latest` * Halutessasi voit myös käyttää kehitysversiota vaihtamalla `latest`-tagin sijaan `develop`in. 3. Mene selaimella osoitteeseen http://localhost:3000/kipa/ – voilá! diff --git a/nginx.conf b/nginx.conf new file mode 100644 index 00000000..ac66cab9 --- /dev/null +++ b/nginx.conf @@ -0,0 +1,42 @@ +worker_processes 1; + +user nobody nogroup; +error_log /var/log/nginx/error.log warn; +pid /var/run/nginx.pid; + +events { + worker_connections 1024; + accept_mutex off; # set to 'on' if nginx worker_processes > 1 +} + +http { + include mime.types; + # fallback in case we can't determine a type + default_type application/octet-stream; + access_log /var/log/nginx/access.log combined; + sendfile on; + + upstream app_server { + server unix:/tmp/kipa.sock fail_timeout=0; + } + + server { + listen 80 deferred; + client_max_body_size 4G; + server_name kipa; + keepalive_timeout 5; + + location /kipamedia { + alias /media; + } + location / { + proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; + proxy_set_header X-Forwarded-Proto $scheme; + proxy_set_header Host $http_host; + # we don't want nginx trying to do something clever with + # redirects, we set the Host: header above already. + proxy_redirect off; + proxy_pass http://app_server; + } + } +} diff --git a/web/settings/docker.py.example b/web/settings/docker.py.example index 1c7806ad..46cf2bd2 100644 --- a/web/settings/docker.py.example +++ b/web/settings/docker.py.example @@ -1,12 +1,9 @@ -with open("/app/db/secret.txt", "r") as f: +with open("/secret.txt", "r") as f: SECRET_KEY = f.readline() DATABASES = { "default": { "ENGINE": "django.db.backends.sqlite3", - "NAME": "/app/db/kipa.db", + "NAME": "/db/kipa.db", } } - -# Should we serve the media files through Python? -SERVE_MEDIA = True From 2f1bcd2847049aaeda22c05c99c91506eac25359 Mon Sep 17 00:00:00 2001 From: Ilmari Marttila Date: Sat, 7 Dec 2024 18:42:12 +0200 Subject: [PATCH 4/4] Document new installation flow --- docs/installation.md | 149 +++++++++++++++++-------------------------- 1 file changed, 59 insertions(+), 90 deletions(-) diff --git a/docs/installation.md b/docs/installation.md index 59427704..38002b86 100644 --- a/docs/installation.md +++ b/docs/installation.md @@ -5,10 +5,10 @@ ### Lähiverkko Kaikkien tietokoneiden pitää olla samassa verkossa niin että niillä on -verkkoyhteys palvelimelle johon Kipa on asennettu. Yhteyden toimivuutta voi -kokeilla vaikka ping \ komennolla. Palvelimelle tarvitaan -portti 80 auki http-liikennöintiä varten. Jos kisatoimistosta ei ole pääsy -Internettiin kannattaa harkita palomuurin sammuttamisesta palvelimelta. +verkkoyhteys palvelimelle johon Kipa on asennettu. Palvelimelle tarvitaan +käytetty TCP-portti auki http-liikennöintiä varten. Jos kisatoimistosta ei +ole pääsyä Internettiin kannattaa harkita palomuurin sammuttamista +palvelimelta. ### Internet @@ -22,89 +22,58 @@ riittävän hyvää verkkoyhteyttä. ## Docker-asennus -1. Luo itsellesi GitHubin personal access - token [täältä](https://github.com/settings/tokens) jakirjaudu - Docker-clientillä sisään GitHubin pakettivarantoon esimerkiksi - komennolla `docker login ghcr.io` -2. Aja komento `docker run -d -p 3000:80 -v kipa_db:/app/db --name kipa -d ghcr.io/partio-scout/kipa:latest` - * Halutessasi voit myös käyttää kehitysversiota vaihtamalla `latest`-tagin sijaan `develop`in. -3. Mene selaimella osoitteeseen http://localhost:3000/kipa/ – voilá! - -Yllä opastettu ajotapa käyttää kipa_db-nimisessä Docker-volumessa olevaa -SQLite-kantaa. Sen sijaan voit käyttää esimerkiksi MySQL-kantaa -mounttaamalla erillisen local.py-tiedoston tähän tapaan: -`-v /home/user/kipa/local.py:/app/web/settings/local.py`. Voit myös yliajaa -muita settings/__init__.py:ssä olevia määrityksiä em. tavalla, esimerkiksi -ottaa käyttöön välimuistituksen. - -## macOS-asennus - -Toimivaksi todettu macOS Montereylla (12.0), luultavasti toimii myös -uudemmilla käyttöjärjestelmillä. Huom! Tämä ohje asentaa Kipan -kehityspalvelimen (development server). - -macOS sisältää valmiiksi kaiken muun, paitsi itse Djangon. Sen asennus on -hyvin yksinkertainen ja onnistuu keneltä tahansa pääkäyttäjän oikeuksilla. - -1. Avaa Terminal klikkaamalla oikeasta yläkulmasta suurennuslasia ja - kirjoittamalla hakukenttään Terminal -2. Asenna Django kirjoittamalla terminaaliin - `sudo easy_install django==1.3.1` - Anna salasanasi, jos terminaali sitä kysyy. Tämä asentaa Djangon - uusimman saatavilla olevan version. -3. Hae Kipa GitHubista kirjoittamalla - `git clone https://github.com/partio-scout/kipa.git` - Jos et ole aiemmin käyttänyt Gittiä, tulee näytölle varmistus Command - Line Developer Toolsin asentamisesta. Hyväksy asennus ja aja käsky - uudelleen. -4. Hyväksy terminaalin mahdollinen kysymys palvelimen sertifikaatista. -5. Siirry Kipan web-hakemistoon kirjoittamalla `cd kipa/web` -6. Käynnistä Django ja Kipa `sudo python manage.py runserver` -7. Jos saat ilmoitukseksi “Development server is running at...”, voit avata - selaimen (esim. Safari) ja kirjoittaa osoitteeksi 127.0.0.1:8000/kipa/ - -Kun lopetat Kipan käytön, siirry terminaaliin ja paina Ctrl+C, joka -pysäyttää Djangon. - -## Linux-asennus - -Pohjalle tarvitaan moderni Linux-käyttöjärjestelmä, testattu Ubuntu -20.04:lla - -Huom! Ohjeessa {{kipa_asennus}} viittaa kansioon, johon Kipa on asennettu -(eli 2. Kohdassa .zip tiedosto purettu). - -1. Lataa Kipa - lähdekoodi [GitHubista](https://github.com/partio-scout/kipa/archive/refs/heads/master.zip) -2. Pura .zip tiedosto kansioon, johon haluat asentaa Kipa -3. Asenna tarvittavat paketit komennolla - `sudo apt install apache2 python libapache2-mod-python mysql-server libmysqlclient-dev python-dev build-essential` - -* Pythonin asennuksen jälkeen asenna pip, katso esim. - ohjeet: https://stackoverflow.com/a/66719099 -* Pip:n asennuksen jälkeen asenna vaadittava versio Djangosta ajamalla - kipa-kansiossa komento pip install -r requirements.txt - -4. Lisää /etc/apache2/apache2.conf tiedoston loppuun seuraavat rivit - - - SetHandler python-program - PythonHandler django.core.handlers.modpython - SetEnv DJANGO_SETTINGS_MODULE web.settings - PythonDebug On - PythonPath "['{{kipa_asennus}}/kipa', '{{kipa_asennus}}/kipa/web'] + sys.path" - - -5. Aja seuraavat komennot - - chown www-data {{kipa_asennus}}/kipa/web - chown www-data {{kipa_asennus}}/kipa/web/tupa.db - ln -s {{kipa_asennus}}/kipa/web/media /var/www/html/kipamedia - -6. Käynnistä apache2 uudestaan komennolla `sudo systemctl restart apache2` -7. Kipa pitäisi toimia nyt osoitteessa localhost://kipa/ - -## Windows-asennus - -Lataa [asennustiedosto](https://github.com/partio-scout/kipa/releases/tag/1.6.2) -ja aja se. Testattu toimivaksi Windows 10 ja Windows XP. \ No newline at end of file +Suositeltu tapa ajaa Kipaa on Docker-kontissa ajaminen. Ainoa +ennakkovaatimus Kipa-koneelle on toimiva Docker-asennus tai vastaava. +Aloittelijaystävällisin tapa on Docker Desktop, jonka asennusohjeet +löytyy [täältä](https://docs.docker.com/desktop/). + +Dockerin avulla Kipa-palvelin saadaan "eristettyä" omaksi kokonaisuudekseen +niin, ettei se häiritse muita koneen toimintoja. Kontti, johon Kipa on +valmiiksi asennettu, on saatavilla [GitHubin konttirekisteristä] +(https://github.com/partio-scout/kipa/pkgs/container/kipa). + +Kipan saa käymään yksinkertaisimmillaan komennolla +`docker run -p 8000:80 --name kipa -d --volume kipa-volume:/db ghcr.io/partio-scout/kipa:latest`, +jonka jälkeen Kipan pitäisi löytyä selaimella osoitteesta +http://localhost:8000/kipa. Kipan käyttämä tietokanta tallennetaan +Docker-volumeen, eli Kipan kontin sammutaminen tai uudelleenkäynnistäminen +ei aiheuta tietokannan häviämistä. + +Kipan sammuttaminen tapahtuu esimerkiksi komennolla `docker stop kipa`. +Uudelleenkäynnistys voidaan tämän jälkeen tehdä komennolla +`docker start kipa` tai sitten Kipa-kontti voidaan poistaa komennolla +`docker rm kipa`. + +Mikäli haluaa käynnistää Kipasta kehitysversion se tapahtuu vaihtamalla +tagin `latest` tilalle `develop`. + +## Asennus Nginx-proxyn taakse + +Paremmin konfikuroitava ja joustavampi tapa ajaa Kipaa on ajaa sitä +WSGI-palvelin Gunicornin avulla käyttäen http-palvelin Nginx:ää proxynä. +Paikallisesti ajettuna Kipan SQLite-tietokannan sijainnin voi asettaa +johonkin sopivaksi katsottuun paikkaan: luo asetushakemistoon +`web/settings/` local.py, jossa asetetaan tietokannan polku. Tietokantana +voi myös käyttää jotakin muuta Djangon tukemaa tietokantaa. + +Asennuksen vaiheet: + +1. Asenna Nginx. +2. Asenna Kipan tukema Python. +3. Luo jonnekkin virtuaaliympäristö: `python -m venv /polku/venv` +4. Aktivoi virtuaaliympäristö: `source /polku/venv/bin/activate` +5. Asenna riippuvuudet: `pip install -r requirements.txt` +6. Siirry Kipan `web`-hakemistoon. +7. Aja Kipa gunicornin avulla: + `gunicorn --daemon --bind unix:/tmp/kipa.sock wsgi` + * Muilla kuin *unix pohjaisilla järjestelmillä voi bindata soketin + sijasta oletusarvoiseen http-porttiin 8000: `gunicorn --daemon wsgi` +8. Konfiguroi Nginx ohjaamaan liikenne valitusta portista Gunicornin + luomaan sokettiin tai sen kuuntelemaan TCP-porttiin. +9. Luo Nginx:än konfiguraatioon esim. alias, joka palvelee staattisten + tiedostojen kyselyjä (`/kipamedia/*`) hakemistosta `web/media/`, + varmista että Nginx-prosessin käyttäjällä on lukuoikeus kyseiseen + hakemistoon. + +Esimerkki Nginx:än konfikuraatiosta löytyy repositorion juuresta tai +sitten [Gunicornin dokumentaatiosta](https://docs.gunicorn.org/en/latest/deploy.html).