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:
mysql
mysql
- Container Name / Docker Hostname:
${MYSQL_HOST}
- Purpose: Standing MySQL DB for all user data
- Access: Local
- Container Name / Docker Hostname:
phpmyadmin
- Container Name / Docker Hostname:
phpmyadmin
- Purpose: PHP My Admin GUI for MySQL DB
- Access: Authorized Public pma.coursetable.com
- Container Name / Docker Hostname:
ferry
db
- Container Name / Docker Hostname:
${FERRY_HOST}
- Purpose: Standing Postgres DB for all course data (see ferry)
- 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: