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):
traefik
traefik
- Container Name / Docker Hostname:
traefik
- Purpose: Reverse proxy router for all incoming requests
- Access: Public (*coursetable.com)
- Container Name / Docker Hostname:
db
db
- 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_services
graphql-engine
- Container Name / Docker Hostname:
${GRAPHQL_ENGINE_HOST}
- Purpose: Hasura Engine wrapping the
ferry
container - 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_maintenance
web
- Container Name / Docker Hostname:
under_maintenance
- Purpose: Maintenance page that loads if the
api
service is not up. - Access: Public (*coursetable.com)
- Container Name / Docker Hostname: