This app has two main components: the back-end API (written in Python), and the front-end (written in JS using Vue). As they are written in different languages, there are two different pieces of setup.
First, install Python 3.6+ and virtualenv. Then, use the following commands to set up the required Python environment:
virtualenv -p python3 venv
source venv/bin/activate
pip install -r requirements.txt
You must also install uwsgi
. If it is available in your distribution's repository, use that. On Debian, this can be done via:
sudo apt-get install uwsgi uwsgi-plugin-python3
If it is not available through your distribution, you can install it with pip
or conda
:
pip install uwsgi # this WILL NOT WORK if you got Python via Anaconda,
# use the below command instead
conda install uwsgi
This project uses yarn for package management. After installing both Node and Yarn, setup is straightforward:
cd frontend
yarn install
Before running anything, you need to connect to the database. Credentials and
other configuration settings are stored in keys.conf
which is not committed
to the repository. To initialize it, copy keys.conf.sample
to keys.conf
and
fill out the required fields.
The backend must be run via uWSGI to be mounted at the right endpoint:
DEBUG=true uwsgi api-dev.ini --plugin python3
After modifying the API, kill uWSGI and and run it again.
The DEBUG
environment variable enables cross-domain cookies for local
development (required due to the frontend and backend running on different ports). NEVER set it in a production environment.
The front-end can be run similarly easily:
cd frontend
yarn serve
This command does not need to be re-run when the front-end code changes.
This project has a few tests to cover key features, though coverage of the project as a whole is incomplete. The tests & lints can be run as follows:
pytest api # test the API
flake8 api # lint the API
cd frontend
yarn test # test the front-end
yarn lint # lint the front-end
These are all run on GitHub each time new commits are pushed.
The backend does not have a required build step. However, the frontend does:
cd frontend
yarn build
The server is setup to host the backend via uWSGI hidden behind an NGINX
instance. All paths beginning with /api
are mapped to the API. All other
paths are mapped to the front-end. See the wiki for details on NGINX configuration.
The API will start on boot, but if you need to (re)start it manually, use the following commands:
./stop-api.sh # stop the API, if it is running
./start-api.sh # start the API in the background
Logs for the API can be found at /var/log/algotips/api.log
.
To deploy the front-end, first build it (see above) and then copy the contents of the frontend/dist/
folder to /var/www/
on the server. Ensure that the contents are readable by the server. A simple way to do this is to run:
chown -R nginx:nginx /var/www
This only needs to be done once. To initialize periodic triggers, run the following command as root:
python scripts/setup-cron.py
See the wiki for full details on the alert trigger system.
Alerts can only be triggered from the server by default. To trigger one manually, log into the server and run:
curl -X POST http://localhost/api/alert/trigger