# Odevzdávací Systém Matematické Olympiády

## 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/web/config.py podle etc/config.py.example
	mkdir -p data/imports

	bin/flask run

	# Po běžných úpravách není potřeba balíček přeinstalovávat

## Instalace na produkční server

	# 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 -e 'CREATE ROLE mo_osmo'
	psql -e 'CREATE ROLE "mo-web" LOGIN'
	psql -e 'GRANT mo_osmo TO "mo-web"'	# a případně dalším uživatelům
	psql -e '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 db/ruian/ a db/schools/parsed/ z jiné instance (nebo je znovu stáhnout)
	. ../venv/bin/activate
	bin/test-init	# 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