- This project provides the OpenDota API for consumption.
- This API powers the OpenDota UI, which is also an open source project.
- Raw data comes from the WebAPI provided by Valve and fully automated parsing of match replays (.dem files).
- A public deployment of this code is maintained by The OpenDota Project.
- Microservices: Node.js
- Databases: PostgreSQL/Redis/Cassandra
- Parser: Java (powered by clarity)
- Install Docker:
curl -sSL https://get.docker.com/ | sh. If you are on Windows, make sure you shared the working drive with Docker.
- Install Docker Compose:
curl -L "https://github.com/docker/compose/releases/download/1.17.1/docker-compose-$(uname -s)-$(uname -m)" -o /usr/local/bin/docker-compose && chmod +x /usr/local/bin/docker-compose. If you are on Windows, docker-compose comes with the msi package.
- Create .env file with required config values in KEY=VALUE format (see config.js for a full listing of options)
cp .env_example .env
STEAM_API_KEYYou need this in order to access the Steam Web API, which is used to fetch basic match data, player profile data, and cosmetic item data. You can use your main account to obtain the API key; it does not have to match the account used for the
STEAM_PASSoptions. You can request an API key here: https://steamcommunity.com/dev/apikey
STEAM_USER, STEAM_PASSA Steam account is required to fetch replay salts. It is recommended to use a new account for this purpose (you won't be able to use the account on two different hosts at the same time, and the account must not have Steam Guard enabled). This is not required if you don't need to download/parse replays.
- Start containers and initialize databases:
- Make some changes and commit them.
- Submit a pull request. Wait for it to be reviewed and merged.
- OPTIONAL Add your DOTA friend code (SteamId3) to the
- Congratulations! You're a contributor.
- The API runs on port 5000 by default.
- File changes made in the host directory get mirrored into the container.
- Get a terminal into the running container:
docker exec -it odota-core bash
- The process manager
pm2is used to manage the individual services. Each is run as a separate Node.js process.
pm2 listSee the currently running services.
pm2 start manifest.jsonStart all the services according to the manifest file
pm2 start manifest.json --only webStarts a specific service
pm2 stop webStop a specific service
pm2 stop allStop all the services
pm2 logs webInspect the output of a service
docker system pruneCleans your system of any stopped containers, images, and volumes
docker-compose buildRebuilds your containers (e.g. for database schema updates)
docker pull odota/parserYou may need to do this if the parser has updated. Remove and recreate the parser container to run the latest code.
- Tests are written using the
npm testruns the full test suite.
mochaCLI for more fine-grained control over the tests you want to run.
- Starter data
- You can request some parses by ID to get some parsed data.
- You can also run
scannerto get some matches from the API.
- Join us on Discord (https://discord.gg/opendota)! We're always happy to help and answer questions.
- The following blog posts may help you understand the codebase/architecture:
- General Learnings: https://odota.github.io/blog/2016/05/13/learnings/
- Architecture: https://odota.github.io/blog/2016/05/15/architecture/
- Deployment/Infrastructure: https://odota.github.io/blog/2016/08/10/deployment/
- Project started in August 2014
- Forked from https://github.com/RJacksonm1/matchurls