Files
claudetools/wiki/systems/ix-server.md
Mike Swanson f98b111193 docs(wiki): full IX server inventory from live SSH
Expand wiki/systems/ix-server.md with a 2026-06-05 live SSH inventory:
- Host: CloudLinux 9.7, cPanel/WHM 134, 64-core Xeon Gold 6130, 62 GiB,
  4.4 T /home; Apache 2.4.67, MariaDB 10.11.16, ea-php 5.6-8.5,
  Exim 4.99.4, Dovecot 2.4.2, BIND 9.16.
- 72 cPanel accounts / 185 domains / 101 WordPress; full account ->
  primary-domain -> disk map (the "where does client X live" reference).
- ACG subdomain docroots (radio, community/Flarum, analytics/Matomo,
  portal, support, etc.) under the azcomputerguru account.
- GuruRMM agent enrolled (gururmm-agent.service).
- Backups appear unconfigured (/backup ~178M vs 1.6T /home) - flagged.
- SSH key auth from GURU-5070 now works; updated reference_ix_server_access
  memory (was stale: claimed key auth not set up) + index summary.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
2026-06-05 17:58:10 -07:00

234 lines
11 KiB
Markdown
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
---
type: system
name: ix-server
display_name: IX Web Hosting Server
last_compiled: 2026-06-05
compiled_by: GURU-5070/claude-main
sources:
- live SSH inventory 2026-06-05 (root@172.16.3.10, key auth from GURU-5070)
- .claude/memory/reference_radio_website.md
- .claude/memory/reference_ix_server_access.md
- wiki/clients/internal-infrastructure.md
- projects/radio-show/website/ (source tree)
---
# IX Web Hosting Server
`ix.azcomputerguru.com` — Arizona Computer Guru's cPanel/WHM shared-hosting box.
It hosts ACG's own static sites (incl. **radio.azcomputerguru.com**), the Flarum
community forum, Matomo analytics, and ~72 client cPanel accounts (185 domains,
101 WordPress installs).
> Operational history (account cleanups, WordPress hygiene, mail routing, the
> Cox→Cloudflare BGP workaround) lives in
> [`wiki/clients/internal-infrastructure.md`](../clients/internal-infrastructure.md).
> **This article is the systems-level inventory** — what the box is, what runs on
> it, and where each hosted thing lives. Last verified by live SSH 2026-06-05.
## Host facts
| Item | Value |
|---|---|
| Hostname | `ix.azcomputerguru.com` |
| Internal IP | `172.16.3.10` (also `172.16.1.39`); Tailscale or office LAN required |
| External IP | `72.194.62.5` (SSH `:22` firewalled from WAN — internal only) |
| OS | CloudLinux 9.7 (Pavel Popovich), kernel `5.14.0 ...tuxcare.els` (TuxCare ELS) |
| CPU / RAM | 64× Intel Xeon Gold 6130 @ 2.10 GHz / 62 GiB |
| Disk | `/` 70 G (xfs, 50% used); **`/home` 4.4 T (xfs, 1.6 T used, 35%)**; `/boot` + EFI on `sdb` |
| Control panel | cPanel/WHM **134.0 (build 35)** |
| Web | Apache **2.4.67** (cPanel EA4) |
| DB | MariaDB **10.11.16** (per-account MySQL) |
| PHP | ea-php **5.6 → 8.5** installed; default CLI **8.1.34** |
| Mail | Exim **4.99.4**, Dovecot **2.4.2** |
| DNS | BIND **9.16** (104 local zones) |
| WHM / cPanel UI | `https://ix.azcomputerguru.com:2087` (WHM) · `:2083` (cPanel) · `:2096` (webmail) — **must stay grey-cloud / DNS-only** in Cloudflare (non-standard ports can't traverse the tunnel) |
### Access
| From | How |
|---|---|
| **GURU-5070** | `ssh root@172.16.3.10`**SSH key auth works** (verified 2026-06-05). System OpenSSH, internal IP, Tailscale up. |
| Scripts to `gurushow` paths | paramiko `look_for_keys=False, allow_agent=False` (account-level key auth disabled) |
| Password fallback | Vault `infrastructure/ix-server.sops.yaml` (root password) |
| WHM API | `whmapi1 <fn>` over SSH (e.g. `whmapi1 listaccts`) |
| RMM | `gururmm-agent.service` is enrolled and running — drive via `/rmm` when SSH isn't handy |
### Edge / routing
Cloudflare tunnel **`acg-origin`** (UUID `78d3e58f-1979-4f0e-a28b-98d6b3c3d867`,
`cloudflared` container on Jupiter) fronts the ACG hostnames → IX `:443`.
`ix.azcomputerguru.com` itself is grey-cloud (direct to `72.194.62.5`) so WHM/cPanel
ports route. This tunnel is the workaround for the Cox BGP→Cloudflare routing break
(see internal-infrastructure.md).
### GuruRMM agent
- Service: `gururmm-agent.service` (active/running), binary `/usr/local/bin/gururmm-agent`
- Config: `/etc/gururmm/agent.toml` (root-only, 0600)
- Means IX is reachable through the GuruRMM fleet as well as SSH.
### Backups — gap to watch
`/backup` exists but is only **~178 M** against a 1.6 T `/home`, and no WHM remote
backup-transport destinations are configured. cPanel account backups do **not**
appear to be comprehensively enabled/offloaded. [WARNING] Treat IX as **not
currently backed up** until verified — flag before any risky account/site work.
---
## ACG-owned sites on IX
The **`azcomputerguru`** cPanel account (`/home/azcomputerguru/public_html/`) hosts
ACG's own sites as subdirectories. `gurushow` and `acg` are separate accounts.
| Hostname | Stack | Document root |
|---|---|---|
| **radio.azcomputerguru.com** | Astro static + React 19 islands | `.../public_html/radio` |
| azcomputerguru.com | Astro static (public site) | `.../public_html` |
| community.azcomputerguru.com | Flarum forum | `.../public_html/community/public` |
| analytics.azcomputerguru.com | Matomo | `.../public_html/analytics` |
| portal / clientportal / clients / support / express / rdb / logos / adlice / khalsaportal .azcomputerguru.com | misc apps/portals | `.../public_html/<name>` |
| phoenixmanagedservices.com (+ subdomain) | site | `.../public_html/phoenixmanagedservices.com` |
| gurushow.com | radio show brand site | account `gurushow``/home/gurushow/public_html` |
| (radio audio archive) | static MP3 archive | account `gurushow``/home/gurushow/public_html/archive/Radio/` |
| acghosting.com | hosting brand | account `acg` |
(`*.cprapid.com` auto-domains are cPanel temporary URLs — ignore.)
### radio.azcomputerguru.com — "The Computer Guru Show" website
Public site for the radio show. **Built by Claude; source in the ClaudeTools repo**
(`projects/radio-show/website/`) — the server holds only the built `dist/`. Live
build confirmed 2026-06-05 (`<html data-theme="dark">`, dark-mode via localStorage;
last deploy ~Mar 2026).
| Item | Value |
|---|---|
| URL | https://radio.azcomputerguru.com |
| Source | `projects/radio-show/website/` (ClaudeTools repo) |
| Framework | Astro `^6.0.4`, `output: 'static'` |
| Islands / libs | `@astrojs/react` (React 19), MDX, sitemap, RSS; `wavesurfer.js` (episode audio), `fuse.js` (client search) |
| Node | `>= 22.12.0` |
| Content | MD/MDX collections `src/content/episodes/`, `src/content/blog/` |
| Pages | index, about, community, contact, live, subscribe, episodes/, blog/, feed.xml (RSS), 404 |
| Layout | `src/layouts/BaseLayout.astro`; components under `src/components/{global,home,episodes}/` |
| Analytics | Matomo site ID 3 — tracker injected into built HTML before `</head>` |
**Build & deploy** (pure static — no server runtime):
```bash
cd projects/radio-show/website
npm install # first time (node >= 22.12.0)
npm run build # -> dist/
rsync -az --delete dist/ root@172.16.3.10:/home/azcomputerguru/public_html/radio/
```
It is tier 1/3 of the post-show content workflow in
[`wiki/projects/radio-show.md`](../projects/radio-show.md) (episode pages + blog
posts generated per episode). The audio pipeline / archive DB / FastAPI UI are
separate from this static site.
**human-flow note:** the AST scanner can analyze the `.tsx` island components under
`src/components`; it skips `.astro` page templates (those need a manual/heuristic pass).
---
## Client cPanel accounts (72 accounts, 185 domains)
The "where does client X's website live" map — primary domain per account, sorted by
disk. Account home is `/home/<account>/`, web root `/home/<account>/public_html/`.
**101 WordPress installs** across these accounts.
| Disk | Account | Primary domain |
|---|---|---|
| 85 G | westernt | westerntire.com |
| 38 G | azcomputerguru | azcomputerguru.com (ACG — see above) |
| 27 G | grabblaw | grabblaw.com |
| 25 G | voicesofthewest | voicesofthewest.net |
| 18 G | computergurume | computerguru.me |
| 8.7 G | acg | acghosting.com (ACG) |
| 8.7 G | gurushow | gurushow.com (ACG — radio archive) |
| 8.0 G | sparcora | sparcoracing.com |
| 7.6 G | azrestaurant | azrestaurantsupply.com |
| 7.0 G | acepickupparts | acepickupparts.com |
| 6.7 G | perkins | classicsingleaction.com |
| 6.1 G | danaise | danaise.com |
| 5.3 G | sandtekomachine | sandtekomachinery.com |
| 4.4 G | remotesystems | remotesystems.us |
| 4.3 G | thegirlsestate | thegirlsestatesales.com |
| 3.0 G | upracing | upracing.com |
| 2.8 G | farwest | farwestwell.com |
| 2.6 G | tucsonadobe | tucsonadobe.com |
| 2.5 G | hightechmortgage | hightechmortgage.com |
| 2.1 G | bruceext | bruceexterminating.com |
| 2.0 G | outaboundssports | outaboundssports.com |
| 1.9 G | jrkco | jrkco.com |
| 1.9 G | compoundfitness | compoundfunctionalfitness.com |
| 1.7 G | ezfastautoglass | ezfastautoglass.com |
| 1.5 G | rednourlaw | rednourlaw.com |
| 1.4 G | johnmartell | martellappraisals.com |
| 1.4 G | peacefulspirit | bestmassageintucson.com |
| 1.1 G | rrspc | rrspc.com (active local mail, MX to mail.rrspc.com) |
| 1.1 G | nwpool | northwestpoolcare.com |
| 898 M | azwebdesign | arizonawebsitedesign.pro |
| 835 M | berman | agingwithoutfamily.org |
| 819 M | arizonahatters | arizonahatters.com |
| 805 M | tucsongc | tucsongoldencorral.com |
| 795 M | pcatucson | pcatucson.com |
| 774 M | themarcgroup | themarcgroup.com |
| 722 M | fsgtucson | fsgtucson.com |
| 680 M | antivaxxer | anti-vaxxer.org |
| 635 M | desertfox | tucsonpaintball.net |
| 604 M | tarafulcreations | tarafulcreations.com |
| 583 M | phxpropane | phxpropane.com |
| 568 M | gentlemansacres | gentlemansacres.com |
| 518 M | rarengineer | rarengineer.com (MX may resolve to IX) |
| 492 M | ucryo | ucryo.com |
| 479 M | packetdial | packetdial.com |
| 358 M | royalweedcontrol | royalweedcontrol.net |
| 356 M | drsticken | drsticken.com |
| 345 M | photonicapps | photonicapps.com |
| 340 M | thrive | thriveappraisalservices.com |
| 325 M | cryoweave | cryoweave.com |
| 299 M | atlantisbevco | atlantisbevcollc.com |
| 267 M | zammit | valleydevelopmentcorp.com |
| 258 M | blackswanarchery | blackswanarchery.com |
| 242 M | lifelong | lifelonglearningacademy.com |
| 239 M | thecentu | thecenturions.com |
| 151 M | ultraper | ultraperformance.com |
| 80 M | goldench | goldenchoicecatering.com |
| 78 M | cascades | cascadestucson.com |
| 67 M | jefffurr | jefffurrier.com |
| 37 M | lamaddux | lamaddux.com |
| 34 M | martylryan | martylryan.com |
| 33 M | hoopevents | hoopevents.news |
| 27 M | grygutis | barbaragrygutis.com |
| 25 M | bardach | bardach.net |
| 24 M | wolkin | rswolkin.com |
| 20 M | devconllc | devconllc.com |
| 19 M | horseshoemgt | horseshoemgt.com |
| 16 M | starrpass | starrpass.com |
| 16 M | jparkinsonaz | jparkinsonaz.com |
| 16 M | heieck | heieck.org |
| 8 M | jackfurr | jackfurrier.com |
| 8 M | glaztech | glaztech.com |
| 3 M | drelenaparra | drelenaparra.com |
> Several of these map to ACG managed-service clients — e.g. `cryoweave`
> (CryoWeave), `rednourlaw` (Rednour Law), `peacefulspirit` (Peaceful Spirit),
> `grabblaw` (Grabb & Durando), `ucryo` (Universal Cryogenics), `horseshoemgt`
> (Horseshoe Mgmt), `glaztech` (Glaz-Tech), `westernt`/`jackfurr`/`jefffurr`
> (Furrier / Western Tire). 185 total domains include addon/parked/subdomains.
To regenerate this inventory: `ssh root@172.16.3.10` then `whmapi1 listaccts` (full
account data), `/etc/trueuserdomains` (primary domain → account), `/etc/userdomains`
(all domains → account), `/var/cpanel/userdata/<account>/<domain>` (per-domain docroot).
---
## Backlinks
- [`wiki/clients/internal-infrastructure.md`](../clients/internal-infrastructure.md) — IX operational record (cPanel/WordPress hygiene, mail, Cox/Cloudflare tunnel)
- [`wiki/projects/radio-show.md`](../projects/radio-show.md) — radio show project (audio pipeline + post-show workflow)
- [`wiki/systems/jupiter.md`](jupiter.md) — runs the `cloudflared` tunnel container fronting IX
- Memory: `reference_radio_website.md`, `reference_ix_server_access.md`, `reference_resource_map.md`