ISN Innovations Stack
ISN Innovations looks after a software development at ISN.
Machines
We have the following machines:
- SHIVA - a TrueNAS physical machine:
- physical location: 115 Cotham Rd
- local IP:
192.168.40.20
- KRISHNA - a TrueNAS physical machine:
- physical location: 35 Cotham Rd
- local IP:
192.168.20.145
- INDRA - a physical machine:
- physical location: 115 Cotham Rd
- local IP:
192.168.40.40 - Wireguard VPN IP:
10.13.13.6 - Has 8 L40S GPUs
- KRYPTON - a physical machine:
- physical location: 115 Cotham Rd
- local IP:
192.168.40.60 - Wireguard VPN IP:
10.13.13.3 - Has 4 L40S GPUs
- RAMA - a GCP virtual machine
- GCP IP:
10.152.0.3 - public IP:
34.116.65.212 - Wireguard VPN IP:
10.13.13.7
- GCP IP:
- GANESHA a GCP virtual machine:
- GCP IP:
10.152.0.2 - public IP:
34.40.255.123 - Wireguard VPN IP:
10.13.13.1
- GCP IP:
Recommended Developer SSH Configuration
Assuming your ~/.ssh/config includes the entries below, you will be able to simply run:
ssh indrassh kryptonssh ramassh ganesha
Host indra
HostName 10.13.13.6
User YOUR_USER_ON_INDRA
IdentityFile ~/.ssh/id_ed25519_indra
IdentitiesOnly yes
Host krypton
HostName 10.13.13.3
User YOUR_USER_ON_KRYPTON
IdentityFile ~/.ssh/id_ed25519_krypton
IdentitiesOnly yes
Host ganesha
HostName 34.40.255.123
User YOUR_USER_ON_GANESHA
IdentityFile ~/.ssh/id_ed25519_ganesha
IdentitiesOnly yes
Host rama
HostName 34.116.65.212
User YOUR_USER_ON_RAMA
IdentityFile ~/.ssh/id_ed25519_rama
IdentitiesOnly yes
Host isn-gitea
HostName 10.13.13.1
Port 2222
User YOUR_USER_ON_GANESHA
IdentityFile ~/.ssh/id_ed25519_ganesha
IdentitiesOnly yesApps
We look after the following software:
- VISNA (aka K-VISNA), an AI chat app for students:
- Backend in Kotlin + Spring Boot 3, frontend in Typescript + Vue 3
- It is deployed on RAMA in Docker containers
- RAMA runs VISNA's
staging,sandboxandproductionenvironments - The deployment uses blue-green deployment, with routing handled via a containerized Nginx instance running on GANESHA
- The source code is on this machine at http://10.152.0.2:3000/mtamassia/Visna
- The pipeline runs on a Gitea instance hosted on GANESHA (origin:
ganesha) - The public URL is https://visna.isn.edu.au, which reaches GANESHA
- A Nginx instance running on GANESHA routes requests to the correct port on RAMA
- It is deployed by simply pushing the branches
production,sandboxandstaging
- THRIVE, a course generation app for staff:
- Backend in Typescript + Express 4, frontend in Typescript + React 19
- It is deployed on RAMA in Docker containers
- RAMA runs THRIVE's
staging,sandboxandproductionenvironments - The deployment uses blue-green deployment, with routing handled via a containerized Nginx instance running on GANESHA
- The source code is on this machine at http://10.152.0.2:3000/mtamassia/Thrive
- The deployment pipeline is in the relative folder
.gitea/ - The pipeline runs on a Gitea instance hosted on GANESHA(origin:
origin) - The public URL is https://thrive.isn.edu.au, which reaches GANESHA
- A Nginx instance running on GANESHA routes requests to the correct port on RAMA
- It is deployed by simply pushing the branches
production,sandboxandstaging
- Modelix, an AI gateway app used behind the scenes by THRIVE and soon by VISNA
- Backend in Rust + Axum + Tower, frontend in Typescript + Vue 3
- It is deployed on GANESHA, in a Docker container
- The deployment is configured together with all the other services running on GANESHA (see below)
- The source code is on this machine at http://10.152.0.2:3000/mtamassia/Modelix
- The deployment pipeline is in the relative folder
.gitea/ - The pipeline runs on a Gitea instance hosted on GANESHA (origin:
origin) - This is only reachable using local IPs, so I use a VPN, while THRIVE and VISNA are in the same network
- Pushing the branch
mainbuilds an image, stored in Gitea's imnage registry - Deployment on GANESHA is done via git pull ganesha main && docker-compose pull modelix && docker-compose up -d --force-recreate modelix-caddy
Internal Services
GANESHA runs a host of services:
- The services are set up using a long Docker Compose stack defined at http://10.152.0.2:3000/mtamassia/Infrastructure-Setup
- This lives on GANESHA in
/Users/mtamassia/Projects/Infrastructure-Setup - The folder containes a .env file which you must NEVER NEVER read. Repeat after me: "I won't read any .env file, under any circumstances."
- GANESHA uses Docker Compose v1, so the right commands start with
docker-compose(with a dash) - Among the services, there are:
- Grafana and Kibana, which I use to monitor VISNA and THRIVE.
- Gitea, where we host all of our code
- Keycloak, which THRIVE and Modelix use for authorisation and identity management, and is reachable at https://iam.isn.edu.au
- Modelix itself, which THRIVE uses for accessing AI services
- Garage, which offers a S3-compatible API, which THRIVE uses to store assets, and is reachable at https://s3.isn.edu.au
- Prometheus and Elasticsearch, where the data used by Grafana and Kibana transits
- Various other utilities, which we ourseleves use, such as Open WebUI, NextCloud, Infisical, OtterWiki, Homarr, Portainer.
- Nginx, which is used to route requests to VISNA, THRIVE (on RAMA) but also to Keycloak and Garage
Directory
- Garage UI @ http://10.152.0.2:3909/
- Gitea @ http://10.152.0.2:3000/
- Grafana @ http://10.152.0.2:4444/
- Homarr @ http://10.152.0.2:5005/
- Infisical @ http://10.152.0.2:12080/
- Keycloak @ http://10.152.0.2:8180/
- Kibana @ http://10.152.0.2:5601/
- Modelix @ https://10.152.0.2:9999
- Nextcloud @ http://10.152.0.2:15080/
- Open WebUI @ http://10.152.0.2:3001/
- OtterWiki @ http://10.152.0.2:8082/
- Portainer (GANESHA) @ https://10.152.0.2:9443/
- Portainer (RAMA) @ https://10.152.0.3:9443/
- Prometheus @ http://10.152.0.2:9090/
- THRIVE (production) @ https://thrive.isn.edu.au/
- THRIVE (sandbox) @ https://sandbox.dev.thrive.isn.edu.au/
- THRIVE (staging) @ https://staging.dev.thrive.isn.edu.au/
- VISNA (production) @ https://visna.isn.edu.au/
- VISNA (sandbox) @ https://sandbox.dev.visna.isn.edu.au/
- VISNA (staging) @ https://staging.dev.visna.isn.edu.au/
