This repository details all of the underlying production infrastructure for databases, reverse proxies, and administration tools that the coursetable abstracts away.
The infrastructure is currently designed to provision on a monolithic VM. However, it is configuration-agonistic. Its pure dependencies are docker and docker compose. Please see deployment.md for instructions on how to bootstrap a new server.
Each directory denotes a separate Docker Compose configuration, each with its own network.
Below is the list of every network and its attached services (including those defined in coursetable):
traefiktraefik- Container Name / Docker Hostname:
traefik - Purpose: Reverse proxy router for all incoming requests
- Access: Public (*coursetable.com)
- Container Name / Docker Hostname:
dbdb- Container Name / Docker Hostname:
${DB_HOST?db} - Purpose: Standing Postgres DB for all course data (see ferry) and user data
- Access: Local
- Container Name / Docker Hostname:
pgadmin- Container Name / Docker Hostname:
pgadmin - Purpose: DB Management GUI
- Access: Authorized Public
- Container Name / Docker Hostname:
pgbouncer- Container Name / Docker Hostname:
pgbouncer - Purpose: Connection pooler for Postgres DB
- Access: Authorized Public
- Container Name / Docker Hostname:
${API_NETWORK}api- Container Name / Docker Hostname:
${EXPRESS_HOST} - Purpose: Continuously deployed application server
- Access: Public api.coursetable.com
- Container Name / Docker Hostname:
api_servicesgraphql-engine- Container Name / Docker Hostname:
${GRAPHQL_ENGINE_HOST} - Purpose: Hasura Engine wrapping the
ferrycontainer - Access: Local (Public Proxy: https://coursetable.com/graphiql)
- Container Name / Docker Hostname:
redis- Container Name / Docker Hostname:
${REDIS_HOST} - Purpose: KV cache for session management
- Access: Local
- Container Name / Docker Hostname:
under_maintenanceweb- Container Name / Docker Hostname:
under_maintenance - Purpose: Maintenance page that loads if the
apiservice is not up. - Access: Public (*coursetable.com)
- Container Name / Docker Hostname: