Skip to content
Snippets Groups Projects
Select Git revision
  • master default protected
  • jiri-skrobanek/persistence
  • om-graphs
  • vk-dynamic
  • fs-succinct
  • pm-streaming
6 results

dsbook

  • Clone with SSH
  • Clone with HTTPS
  • Odevzdávací Systém Matematické Olympiády

    OSMO je webová aplikace pro účastníky i organizátory Matematické olympiády, která obstarává většinu agendy okolo chodu soutěže: přihlášky, zadávání úloh, odevzdávání řešení, bodování, sestavování výsledkových listin atd.

    OSMO primárně vzniklo pro českou Matematickou olympiádu, ale po menších úpravách ho lze používat i pro jiné, podobné soutěže. Není v našich silách provozovat další instance OSMO, ale pokud chcete s úpravami a provozem systému poradit, ozvěte se nám na adrese osmo@mo.mff.cuni.cz.

    OSMO můžete používat a distribuovat pod licencí GNU Affero General Public License verze 3 nebo novější (viz soubor LICENSE).

    Autoři

    Martin Mareš <mj@ucw.cz>
    Jiří Kalvoda
    Jan Prachař
    Jiří Setnička

    Instalace vývojového prostředí

    python3 -m venv venv
    . venv/bin/activate
    pip install wheel
    pip install -c constraints.txt --editable .
    # vytvořit mo/config.py podle etc/config.py.example
    bin/init-data-dir
    
    bin/flask run
    
    # Po běžných úpravách není potřeba balíček přeinstalovávat

    Instalace na produkční server

    # Pro systém s jádrem < 5.4 zvýšit net.core.somaxconn (jako root)
    [ "`cat /proc/sys/net/core/somaxconn`" -lt 4096 ] && echo net.core.somaxconn=4096 >> /etc/sysctl.conf && sysctl -p
    
    # Založit účet mo-web (jako root)
    adduser --system mo-web --shell /bin/bash
    loginctl enable-linger mo-web
    
    # Založit databázi (jako správce PostgreSQL)
    psql -c 'CREATE ROLE mo_osmo'
    psql -c 'CREATE ROLE "mo-web" LOGIN'
    psql -c 'GRANT mo_osmo TO "mo-web"'	# a případně dalším uživatelům
    psql -c 'CREATE DATABASE mo_osmo_test WITH OWNER=mo_osmo'
    
    # Inicializovat databázi (už jako mo-web)
    psql mo_osmo_test <db/db.ddl
    
    # Založit adresář pro instanci
    mkdir /akce/mo/osmo-test
    chmod 770 /akce/mo/osmo-test
    setfacl -m u:mo-web:rwx -m g:mo:rwx /akce/mo/osmo-test
    setfacl -d -m u:mo-web:rwx -m g:mo:rwx /akce/mo/osmo-test
    
    # Zbytek jako uživatel mo-web v /akce/mo/osmo-test
    git clone <repozitář> src
    
    # Vytvořit etc/config.py podle src/etc/config.py.example
    # Vytvořit etc/uwsgi.ini podle src/etc/uwsgi.ini.example
    cd src
    bin/deploy
    
    # Zpřístupnit socket Nginxu
    setfacl -m u:www-data:x /akce/mo/osmo-test /akce/mo/osmo-test/var
    
    # Inicializovat regiony v DB
    # Obstarat si extra/ruian/ a extra/schools/parsed/ z jiné instance (nebo je znovu stáhnout)
    . ../venv/bin/activate
    bin/test-init mo_osmo_test data		# případně podmnožinu
    
    # Případně ručně otestovat, že uwsgi funguje
    # uwsgi --ini etc/osmo.ini
    
    # Založit ~/.config/systemd/user/osmo_test.service podle etc/osmo.service.example
    systemctl --user daemon-reload
    systemctl --user enable osmo_test.service
    systemctl --user start osmo_test.service
    systemctl --user status osmo_test.service
    
    # Nastavit nginx:
    location /osmo-test {
    	include uwsgi_params;
    	uwsgi_pass unix:/akce/mo/osmo-test/var/osmo.sock;
    }
    
    # Na instalaci nové verze pak stačí spustit bin/deploy

    Mražení závislostí

    pip freeze | grep -v '^osmo=' >constraints.txt

    Testovací prostředí

    # Umíme automaticky založit testovací prostředí se soutěžemi, uživateli
    # a jejich rolemi. Obvykle na to používáme samostatnou databázi a datový
    # adresář.
    
    # Do mo/config.py připsat:
    SQLALCHEMY_DATABASE_URI = ... připojení k databázi mo_osmo_test
    DATA_DIR = "data-test"
    CURRENT_YEAR = 42
    INSECURE_TEST_LOGIN = True
    
    # Vytvoření prostředí
    bin/test-init mo_osmo_test data-test
    
    # Spuštění webových prohlížečů pro testovací uživatele
    bin/test-browser garanti
    
    # Přepnutí soutěží do konkrétního stavu
    bin/test-state running