Dotaverse is a free web service for predicting Dota 2 pro match results based on open stats.
Completed v0.0.1 ✓
- Database models
- Alembic migrations
- Celery worker
- FastAPI routing
- Pydantic schemas
- Parsing/DB/Redis services
- Most used utils
- React GA & i18n modules
- Docker compose .dev & .prod
- Github actions CI/CD pipeline
- Python 3.11.6
- FastAPI 0.108
- Uvicorn 0.25.0
- Gunicorn 22.0.0
- SQLAlchemy 2.0.25
- Alembic 1.13.1
- Pydantic 2.5.3
- Celery 5.3.6
- Redis 7.2.5
- RabbitMQ 3.13.2
- PostgreSQL 16
- Node 18.19.1
- Vite 4.4.5
- React 18.2.0
- TypeScript 5.0.2
- Docker 26.1.3
- Docker Compose 2.27.0
- Pytest 8.1.1
- Nginx 1.25
- Certbot
- CI/CD
-
Clone the repository to the local machine
git clone https://github.com/Segfaul/dotaverse.git
-
Specify .env (DEBUG=False to use PostgreSQL, SECRET_KEY for JWT AUTH)
# Global .env (DEBUG, SECRET_KEY) cp .env.example .env nano .env # Frontend .env (GA_KEY, BACKEND_URL) cp frontend/.env.example frontend/.env nano frontend/.env
-
Build images and run app in dev mode
docker compose -f docker-compose.dev.yml up -d --build
-
Checkout http://127.0.0.1:3000 (Vite), http://127.0.0.1:8000 (Uvicorn)
# Also add new admin user to your app docker exec -it dotaverse_app_dev-backend-1 bash python -m backend.config.admin --username admin --password password Admin ${username} created successfully. exit
-
Stop/Down the app
# Without removing containers docker compose -f docker-compose.dev.yml stop # Removing containers docker compose -f docker-compose.dev.yml down # Removing containers and docker volumes (not local ones) docker compose -f docker-compose.dev.yml down -v
-
Specify .env
# Force to use PostgreSQL DEBUG=False ... # Specify proxy to run background tasks for parsing data PROXY='http://login:paswword@ip:port' ... # Specify postgres db_name and db_password POSTGRES_DB='dotaverse' POSTGRES_USER='postgres' POSTGRES_PASSWORD='password' POSTGRES_HOST='127.0.0.1' POSTGRES_PORT=5432 ... # Specify origins & server params for your own domain ALLOWED_ORIGINS='http://localhost:3000,http://127.0.0.1:3000' SERVER_NAME=localhost.localdomain SERVER_EMAIL=example@example.com
-
Specify nginx.conf
# Nginx root for ssl_certificate doesn't support .env variables nano nginx/nginx.conf # Specify those roots strictly with your server_name ssl_certificate /etc/letsencrypt/live/${SERVER_NAME}/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/${SERVER_NAME}/privkey.pem; # Example ssl_certificate /etc/letsencrypt/live/lhost.ldomain/fullchain.pem; ssl_certificate_key /etc/letsencrypt/live/lhost.ldomain/privkey.pem;
-
Build images and run app in prod mode
docker compose -f docker-compose.prod.yml up -d --build
-
Open ${SERVER_NAME} in your browser
# In case of any issues also checkout logs cat logs-data/dotaverse.log | tail -15
-
Stop/Down the app
# Without removing containers docker compose -f docker-compose.dev.yml stop # Removing containers docker compose -f docker-compose.dev.yml down # Removing containers and docker volumes (not local ones) docker compose -f docker-compose.dev.yml down -v