Blame
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 1 | # ISN Innovations Stack |
| 2 | ||||
| 3 | ISN Innovations looks after a software development at ISN. |
|||
| 4 | ||||
| 5 | ## Machines |
|||
| 6 | We have the following machines: |
|||
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 7 | * **SHIVA** - a TrueNAS physical machine: |
| 8 | * physical location: 115 Cotham Rd |
|||
| 9 | * local IP: `192.168.40.20` |
|||
| 1ceaa9 | Anonymous | 2026-05-05 00:31:34 | 10 | * Wireguard VPN IP: `10.13.13.8` |
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 11 | * **KRISHNA** - a TrueNAS physical machine: |
| 12 | * physical location: 35 Cotham Rd |
|||
| 46129a | Anonymous | 2026-04-27 02:07:29 | 13 | * local IP: `192.168.20.145` |
| 1ceaa9 | Anonymous | 2026-05-05 00:31:34 | 14 | * Wireguard VPN IP: `10.13.13.9` |
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 15 | * **INDRA** - a physical machine: |
| 16 | * physical location: 115 Cotham Rd |
|||
| 17 | * local IP: `192.168.40.40` |
|||
| 18 | * Wireguard VPN IP: `10.13.13.6` |
|||
| 32ad2b | Anonymous | 2026-04-14 06:39:13 | 19 | * Has 8 L40S GPUs |
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 20 | * **KRYPTON** - a physical machine: |
| 21 | * physical location: 115 Cotham Rd |
|||
| 22 | * local IP: `192.168.40.60` |
|||
| 23 | * Wireguard VPN IP: `10.13.13.3` |
|||
| 32ad2b | Anonymous | 2026-04-14 06:39:13 | 24 | * Has 4 L40S GPUs |
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 25 | * **RAMA** - a GCP virtual machine |
| 26 | * GCP IP: `10.152.0.3` |
|||
| 27 | * public IP: `34.116.65.212` |
|||
| 28 | * Wireguard VPN IP: `10.13.13.7` |
|||
| 29 | * **GANESHA** a GCP virtual machine: |
|||
| 30 | * GCP IP: `10.152.0.2` |
|||
| 31 | * public IP: `34.40.255.123` |
|||
| 32 | * Wireguard VPN IP: `10.13.13.1` |
|||
| 33 | ||||
| 97faf5 | Anonymous | 2026-05-05 01:00:31 | 34 | ### How to Connect |
| 35 | ```sh |
|||
| 36 | PEER=nathan |
|||
| 37 | ssh ganesha "docker exec wireguard /app/show-peer $PEER" |
|||
| 38 | ssh ganesha "sudo cat /var/lib/docker/volumes/infrastructure-setup_wireguard_config/_data/peer_$PEER/peer_$PEER.conf" |
|||
| 39 | ``` |
|||
| 40 | ||||
| 41 | ```powershell |
|||
| 42 | $PEER = "nathan" |
|||
| 43 | ssh ganesha "docker exec wireguard /app/show-peer $PEER" |
|||
| 44 | ssh ganesha "sudo cat /var/lib/docker/volumes/infrastructure-setup_wireguard_config/_data/peer_$PEER/peer_$PEER.conf" |
|||
| 45 | ``` |
|||
| 46 | ||||
| 47 | ```cmd |
|||
| 48 | set PEER=nathan |
|||
| 49 | ssh ganesha "docker exec wireguard /app/show-peer %PEER%" |
|||
| 50 | ssh ganesha "sudo cat /var/lib/docker/volumes/infrastructure-setup_wireguard_config/_data/peer_%PEER%/peer_%PEER%.conf" |
|||
| 51 | ``` |
|||
| 52 | ||||
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 53 | ### Recommended Developer SSH Configuration |
| 54 | ||||
| 55 | Assuming your `~/.ssh/config` includes the entries below, you will be able to simply run: |
|||
| 56 | * `ssh indra` |
|||
| 57 | * `ssh krypton` |
|||
| 58 | * `ssh rama` |
|||
| 59 | * `ssh ganesha` |
|||
| c36029 | Anonymous | 2026-05-05 00:37:38 | 60 | * `ssh shiva` |
| 61 | * `ssh krishna` |
|||
| 22c114 | Anonymous | 2026-05-05 02:10:52 | 62 | * `git add remote origin git@10.152.0.2:2222:REPO-OWNER/REPO-NAME.git` |
| 2282d8 | Anonymous | 2026-05-05 00:38:05 | 63 | * `git add remote origin git@isn-gitea:REPO-OWNER/REPO-NAME.git` |
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 64 | |
| 65 | ``` |
|||
| 66 | Host indra |
|||
| 67 | HostName 10.13.13.6 |
|||
| 68 | User YOUR_USER_ON_INDRA |
|||
| 69 | IdentityFile ~/.ssh/id_ed25519_indra |
|||
| 70 | IdentitiesOnly yes |
|||
| 71 | ||||
| 72 | Host krypton |
|||
| 73 | HostName 10.13.13.3 |
|||
| 74 | User YOUR_USER_ON_KRYPTON |
|||
| 75 | IdentityFile ~/.ssh/id_ed25519_krypton |
|||
| 76 | IdentitiesOnly yes |
|||
| 77 | ||||
| 78 | Host ganesha |
|||
| ebdd9a | Anonymous | 2026-05-05 02:16:12 | 79 | HostName 10.13.13.1 |
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 80 | User YOUR_USER_ON_GANESHA |
| 81 | IdentityFile ~/.ssh/id_ed25519_ganesha |
|||
| 82 | IdentitiesOnly yes |
|||
| 83 | ||||
| 84 | Host rama |
|||
| ebdd9a | Anonymous | 2026-05-05 02:16:12 | 85 | HostName 10.13.13.6 |
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 86 | User YOUR_USER_ON_RAMA |
| 87 | IdentityFile ~/.ssh/id_ed25519_rama |
|||
| 88 | IdentitiesOnly yes |
|||
| 89 | ||||
| 90 | Host isn-gitea |
|||
| 91 | HostName 10.13.13.1 |
|||
| 92 | Port 2222 |
|||
| 93 | User YOUR_USER_ON_GANESHA |
|||
| 94 | IdentityFile ~/.ssh/id_ed25519_ganesha |
|||
| 95 | IdentitiesOnly yes |
|||
| c153cd | Anonymous | 2026-05-05 00:36:21 | 96 | |
| 97 | Host shiva |
|||
| 98 | HostName 10.13.13.8 |
|||
| 99 | User mtamassia |
|||
| 100 | IdentityFile ~/.ssh/id_ed25519_shiva |
|||
| 101 | IdentitiesOnly yes |
|||
| 102 | ||||
| 103 | Host krishna |
|||
| 104 | HostName 10.13.13.9 |
|||
| 105 | User mtamassia |
|||
| 106 | IdentityFile ~/.ssh/id_ed25519_krishna |
|||
| 107 | IdentitiesOnly yes |
|||
| 44eb28 | Anonymous | 2026-04-14 06:21:26 | 108 | ``` |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 109 | |
| 110 | ## Apps |
|||
| 111 | We look after the following software: |
|||
| 0f3af6 | Anonymous | 2026-05-05 06:47:57 | 112 | * **VISNA**, an AI chat app for students: |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 113 | * Backend in Kotlin + Spring Boot 3, frontend in Typescript + Vue 3 |
| 114 | * It is deployed on RAMA in Docker containers |
|||
| 115 | * RAMA runs VISNA's `staging`, `sandbox` and `production` environments |
|||
| 116 | * The deployment uses blue-green deployment, with routing handled via a containerized Nginx instance running on GANESHA |
|||
| 22c114 | Anonymous | 2026-05-05 02:10:52 | 117 | * The source code is on this machine at [https://gitea.dev.isn.edu.au/ISN-Innovations/Visna](https://gitea.dev.isn.edu.au/ISN-Innovations/K-VISNA) |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 118 | * The pipeline runs on a Gitea instance hosted on GANESHA (origin: `ganesha`) |
| 119 | * The public URL is https://visna.isn.edu.au, which reaches GANESHA |
|||
| 120 | * A Nginx instance running on GANESHA routes requests to the correct port on RAMA |
|||
| 121 | * It is deployed by simply pushing the branches `production`, `sandbox` and `staging` |
|||
| 0f3af6 | Anonymous | 2026-05-05 06:47:57 | 122 | * **THRIVE**, a course generation app for staff: |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 123 | * Backend in Typescript + Express 4, frontend in Typescript + React 19 |
| 124 | * It is deployed on RAMA in Docker containers |
|||
| 125 | * RAMA runs THRIVE's `staging`, `sandbox` and `production` environments |
|||
| 126 | * The deployment uses blue-green deployment, with routing handled via a containerized Nginx instance running on GANESHA |
|||
| 22c114 | Anonymous | 2026-05-05 02:10:52 | 127 | * The source code is on this machine at [https://gitea.dev.isn.edu.au/ISN-Innovations/Thrive](https://gitea.dev.isn.edu.au/ISN-Innovations/Thrive) |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 128 | * The deployment pipeline is in the relative folder `.gitea/` |
| 129 | * The pipeline runs on a Gitea instance hosted on GANESHA(origin: `origin`) |
|||
| 130 | * The public URL is https://thrive.isn.edu.au, which reaches GANESHA |
|||
| 131 | * A Nginx instance running on GANESHA routes requests to the correct port on RAMA |
|||
| 132 | * It is deployed by simply pushing the branches `production`, `sandbox` and `staging` |
|||
| 0f3af6 | Anonymous | 2026-05-05 06:47:57 | 133 | * **Modelix**, an AI gateway app used behind the scenes by THRIVE and soon by VISNA |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 134 | * Backend in Rust + Axum + Tower, frontend in Typescript + Vue 3 |
| 135 | * It is deployed on GANESHA, in a Docker container |
|||
| 136 | * The deployment is configured together with all the other services running on GANESHA (see below) |
|||
| 22c114 | Anonymous | 2026-05-05 02:10:52 | 137 | * The source code is on this machine at [https://gitea.dev.isn.edu.au/ISN-Innovations/Modelix](https://gitea.dev.isn.edu.au/ISN-Innovations/Modelix) |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 138 | * The deployment pipeline is in the relative folder `.gitea/` |
| 139 | * The pipeline runs on a Gitea instance hosted on GANESHA (origin: `origin`) |
|||
| 140 | * This is only reachable using local IPs, so I use a VPN, while THRIVE and VISNA are in the same network |
|||
| 141 | * Pushing the branch `main` builds an image, stored in Gitea's imnage registry |
|||
| 142 | * Deployment on GANESHA is done via git pull ganesha main && docker-compose pull modelix && docker-compose up -d --force-recreate modelix-caddy |
|||
| 143 | ||||
| 144 | ||||
| 0f3af6 | Anonymous | 2026-05-05 06:47:57 | 145 | ## Services |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 146 | GANESHA runs a host of services: |
| 22c114 | Anonymous | 2026-05-05 02:10:52 | 147 | * The services are set up using a long Docker Compose stack defined at [https://gitea.dev.isn.edu.au/ISN-Innovations/Infrastructure-Setup](https://gitea.dev.isn.edu.au/ISN-Innovations/Infrastructure-Setup) |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 148 | * This lives on GANESHA in `/Users/mtamassia/Projects/Infrastructure-Setup` |
| 1fe959 | Anonymous | 2026-05-05 00:47:30 | 149 | * The folder containes a .env file, too |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 150 | * GANESHA uses Docker Compose v1, so the right commands start with `docker-compose` (with a dash) |
| 151 | * Among the services, there are: |
|||
| 0f3af6 | Anonymous | 2026-05-05 06:47:57 | 152 | * **Grafana** and **Kibana**, which I use to monitor VISNA and THRIVE. |
| 153 | * **Gitea**, where we host all of our code, is reachable at [https://gitea.dev.isn.edu.au](https://gitea.dev.isn.edu.au) |
|||
| 154 | * **Keycloak**, which THRIVE and Modelix use for authorisation and identity management, and is reachable at [https://iam.isn.edu.au](https://iam.isn.edu.au) |
|||
| 155 | * **Garage**, which offers a S3-compatible API, which THRIVE uses to store assets, and is reachable at [https://s3.isn.edu.au](https://s3.isn.edu.au) |
|||
| 156 | * **Otterwiki**, where we collect our knowledge, is reachable at [https://wiki.dev.isn.edu.au](https://wiki.dev.isn.edu.au) |
|||
| 157 | * **Prometheus** and **Elasticsearch**, where the data used by Grafana and Kibana transits |
|||
| 158 | * Various other utilities, which we ourseleves use, such as **NextCloud**, **Infisical**, **Homarr**, **Portainer**. |
|||
| 159 | * **Nginx**, which is used to route requests to VISNA, THRIVE (on RAMA) but also to Keycloak and Garage |
|||
| 160 | * **Modelix**, our AI gateway, is reachable at [https://ai.isn.edu.au](https://ai.isn.edu.au) |
|||
| 161 | * **Open WebUI**, an AI chat app, is reachable at [https://chat.staff.isn.edu.au](https://chat.staff.isn.edu.au) |
|||
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 162 | |
| 163 | ## Directory |
|||
| 817e80 | Anonymous | 2026-05-05 02:14:49 | 164 | * Garage UI @ http://10.152.0.2:3909/ | https://s3.isn.edu.au |
| 165 | * Gitea @ http://10.152.0.2:3000/ | https://gitea.dev.isn.edu.au |
|||
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 166 | * Grafana @ http://10.152.0.2:4444/ |
| 167 | * Homarr @ http://10.152.0.2:5005/ |
|||
| 168 | * Infisical @ http://10.152.0.2:12080/ |
|||
| 817e80 | Anonymous | 2026-05-05 02:14:49 | 169 | * Keycloak @ http://10.152.0.2:8180/ | https://iam.isn.edu.au |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 170 | * Kibana @ http://10.152.0.2:5601/ |
| 817e80 | Anonymous | 2026-05-05 02:14:49 | 171 | * Modelix @ https://10.152.0.2:9999 | https://ai.isn.edu.au |
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 172 | * Nextcloud @ http://10.152.0.2:15080/ |
| 817e80 | Anonymous | 2026-05-05 02:14:49 | 173 | * Open WebUI @ http://10.152.0.2:3001/ | https://chat.staff.isn.edu.au |
| 174 | * OtterWiki @ http://10.152.0.2:8082/ | https://wiki.dev.isn.edu.au |
|||
| dbfc72 | Anonymous | 2026-04-13 07:00:10 | 175 | * Portainer (GANESHA) @ https://10.152.0.2:9443/ |
| 176 | * Portainer (RAMA) @ https://10.152.0.3:9443/ |
|||
| 177 | * Prometheus @ http://10.152.0.2:9090/ |
|||
| 178 | * THRIVE (production) @ https://thrive.isn.edu.au/ |
|||
| 179 | * THRIVE (sandbox) @ https://sandbox.dev.thrive.isn.edu.au/ |
|||
| 180 | * THRIVE (staging) @ https://staging.dev.thrive.isn.edu.au/ |
|||
| 181 | * VISNA (production) @ https://visna.isn.edu.au/ |
|||
| 182 | * VISNA (sandbox) @ https://sandbox.dev.visna.isn.edu.au/ |
|||
| 183 | * VISNA (staging) @ https://staging.dev.visna.isn.edu.au/ |
|||
| b7186b | Anonymous | 2026-05-05 06:38:24 | 184 | |
| 185 | ## Setup Client |
|||
| 186 | ||||
| 187 | 1. Build config |
|||
| 3e2e11 | Anonymous | 2026-05-05 06:41:31 | 188 | ```sh |
| 189 | ssh ganesha "sudo bash -c 'V=/var/lib/docker/volumes/infrastructure-setup_wireguard_config/_data && printf \"[Interface]\nAddress = 10.13.13.9\nPrivateKey = \$(cat \$V/peer_$PEER/privatekey-peer_$PEER)\n\n[Peer]\nPublicKey = jI0naHt99LeIcbZUBXW4Q25Lhksxsjl7fdoWiOlMXF0=\nPresharedKey = RPEETrKWpDcJsFiMahBYJY5+nOisRavqaNGoaN81xNM=\nEndpoint = 34.40.255.123:51820\nAllowedIPs = 10.152.0.0/24, 10.13.13.0/24\nPersistentKeepalive = 25\n\"'" > /tmp/$PEER_wg0.conf |
|||
| 190 | ``` |
|||
| b7186b | Anonymous | 2026-05-05 06:38:24 | 191 | |
| 192 | 2. Copy to /tmp |
|||
| 3e2e11 | Anonymous | 2026-05-05 06:41:31 | 193 | ```sh |
| 194 | scp -i ~/.ssh/id_ed25519_$PEER /tmp/$PEER_wg0.conf $SSH_USER@$SSH_HOST:/tmp/wg0.conf && rm /tmp/$PEER_wg0.conf |
|||
| 195 | ``` |
|||
| b7186b | Anonymous | 2026-05-05 06:38:24 | 196 | |
| 197 | 3. Install |
|||
| 198 | a. Server Setup |
|||
| 3e2e11 | Anonymous | 2026-05-05 06:41:31 | 199 | ```sh |
| 200 | ssh -i ~/.ssh/id_ed25519_$PEER -t $SSH_USER@$SSH_HOST "sudo install -m 600 -o root -g root /tmp/wg0.conf /etc/wireguard/wg0.conf && rm /tmp/wg0.conf && sudo systemctl enable --now wg-quick@wg0" |
|||
| 201 | ``` |
|||
| b7186b | Anonymous | 2026-05-05 06:38:24 | 202 | |
| 203 | b. Desktop Setup |
|||
| 3e2e11 | Anonymous | 2026-05-05 06:41:31 | 204 | ```sh |
| 205 | ssh ganesha "sudo cat /var/lib/docker/volumes/infrastructure-setup_wireguard_config/_data/peer_$PEER/peer_$PEER.conf" |
|||
| 206 | ``` |
|||
| b7186b | Anonymous | 2026-05-05 06:38:24 | 207 | |
| 208 | d. Mobile Setup |
|||
| 3e2e11 | Anonymous | 2026-05-05 06:41:31 | 209 | ```sh |
| 210 | ssh ganesha "docker exec wireguard /app/show-peer $PEER" |
|||
| 211 | ``` |
