blob: 6b79b29df37cfafca4da5fbf464e3aafc4f053de [file] [view]
# devstack
Shared dev-substrate kit. One colima VM runs all containers; a single shared Traefik on
`127.0.0.1:80/443` serves `https://*.airavata.host` (mkcert-trusted) across per-project
docker networks. dnsmasq maps the dev TLD to `127.0.0.1`.
---
## One-time prerequisites
### macOS
```bash
# Install deps (idempotent via Homebrew)
brew install colima docker dnsmasq mkcert
# Trust the mkcert CA in system and NSS stores
mkcert -install
# Then run setup (writes dnsmasq drop-in, /etc/resolver, starts the colima VM and Traefik)
./devstack/devstack setup # run as your normal user — it elevates via sudo internally only for DNS
```
### Ubuntu / Debian Linux
```bash
sudo apt-get update && sudo apt-get install -y dnsmasq mkcert libnss3-tools
# colima + docker for Linux must be installed separately:
# https://github.com/abiosoft/colima/blob/main/docs/INSTALL.md
mkcert -install
./devstack/devstack setup # run as your normal user — it elevates via sudo internally only for DNS
```
After `setup` completes, run `tilt up` from the repo root to start the project services.
---
## Daily workflow
```bash
# First terminal — start/resume the shared substrate (idempotent, no sudo)
./devstack/devstack ensure
# Second terminal — start the project
tilt up
```
`ensure` is also the first resource in the `Tiltfile`; `tilt up` runs it automatically.
---
## Status
```bash
./devstack/devstack status
# profile=airavata project=airavata tld=airavata.host
# INFO colima [profile=airavata] is running
# traefik: Up 3 hours
```
---
## Restart matrix
| Scenario | Command | Effect |
|----------|---------|--------|
| Reboot (colima auto-starts) | `./devstack/devstack ensure` | Idempotent bring-up |
| colima stopped manually | `colima start -p airavata` then `ensure` | Restores VM + ingress |
| Stop everything | `./devstack/devstack down` | Stops ingress + colima VM; **global** (all projects) |
| Full reset | `./devstack/devstack reset` | Deletes the VM; **global + destructive** prompts for profile name |
`down` and `reset` are both global they affect every project sharing the same colima VM.
After `reset`, re-run `./devstack/devstack setup` to recreate everything from scratch.
---
## Traefik provider decision
Phase 1 uses the **docker-socket-proxy** variant (Task 1 empirically verified):
- `tecnativa/docker-socket-proxy:0.3.0` advertises a modern Docker API version to Traefik,
bypassing the colima socket version mismatch (`client version 1.24 is too old, min 1.44`).
- Labels on project containers are the routing source of truth (no per-service file fragments).
- The file provider is also active (`traefik/dynamic/`) for the TLS store default cert and
per-project cert entries written by `ingress_register_project`.
---
## Config
Defaults live in `~/.airavata-devstack/config.env`:
```env
DEVSTACK_PROFILE=airavata
DEVSTACK_PROJECT=airavata
DEVSTACK_TLD=airavata.host
```
Override any key before running `setup` or `ensure`; values are persisted on first `setup`.
---
## State directory layout
```
~/.airavata-devstack/
config.env # profile/project/tld
certs/
rootCA.pem # mkcert CA (copied from CAROOT)
airavata.host.pem # wildcard+apex cert
airavata.host-key.pem
traefik/
traefik.yml # static config (copied from devstack/traefik/)
dynamic/
_tls-default.yml # default TLS store cert
airavata.yml # per-project cert entry
```
All state is under `$HOME` colima requires host mounts to be under the home directory
(not `/tmp`). `tilt down -v` removes containers but leaves this state intact; only
`devstack reset` destroys it.
---
## Hostnames
| URL | Service |
|-----|---------|
| `https://api.airavata.host` | Airavata server (gRPC + REST) |
| `https://auth.airavata.host` | Keycloak |
| `https://adminer.airavata.host` | Adminer (`--profile tools`) |
| `https://gateway.airavata.host` | Django portal (portals repo) |
| `db.airavata.host:3306` | MariaDB raw TCP on host `127.0.0.1:3306` (connect with a DB client, not a browser) |