# 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