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.txtYou 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-python3If 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 installBefore 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 python3After 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 serveThis 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-endThese 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 backgroundLogs 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/wwwThis only needs to be done once. To initialize periodic triggers, run the following command as root:
python scripts/setup-cron.pySee 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