WikiOasis runs on a fleet of Debian virtual machines hosted on two bare-metal Proxmox hypervisors (Documentation Index
Fetch the complete documentation index at: https://mintlify.com/wikioasis/salt/llms.txt
Use this file to discover all available pages before exploring further.
metal-us-east-01 and metal-us-east-02) in a single US-East data centre. Each server role is given a structured hostname — <role>-<datacenter>-<rack><index> — which the Salt master uses to target the right configuration at the right machine using glob patterns in top.sls. All VMs communicate over the private DNS domain ovvin.wonet; public traffic enters through the HAProxy load balancers.
Internal network
Every virtual machine is reachable on theovvin.wonet internal DNS domain. For example:
mw-us-east-011.ovvin.wonet— MediaWiki server 1, rack 01, US-Eastproxy-us-east-021.ovvin.wonet— HAProxy load balancer, rack 02, US-Eastdb-c1-us-east-021.ovvin.wonet— MariaDB cluster-1 server, rack 02
40.160.53.92 and 40.160.53.94) and forward ports to their VMs via iptables rules managed by the metal state. VMs themselves are addressed from the 10.0.1.0/24 (rack 01) and 10.0.2.0/24 (rack 02) private subnets. Dual-stack IPv6 is provisioned for VMs whose hostnames match *-us-east-0[0-9][0-9]* via the metal.vm_ipv6 state.
Server roles
mw*
MediaWiki application servers. Serve PHP-FPM via nginx and sit in the HAProxy
mediawiki backend pool. Example: mw-us-east-011, mw-us-east-021.staging*
Staging / canary server. Runs a full MediaWiki stack for pre-production testing. The canary vhost is
test.wikioasis.org. Example: staging-us-east-021.task*
Job runner / task server. Runs MediaWiki job queues via the
mediawiki.jobrunner state alongside PHP-FPM and nginx. Example: task-us-east-011.proxy*
HAProxy load balancers. Terminate HTTP and route to MediaWiki, apps, monitoring, and staging backends. Example:
proxy-us-east-011, proxy-us-east-021.db*
MariaDB database servers. Each cluster has its own server-level pillar override (e.g.
db-c1-us-east-021 gets a 20 GB InnoDB buffer pool). Example: db-c1-us-east-021, db-other-us-east-011.redis*
Redis cache servers. Shared caching layer for MediaWiki sessions and object cache. Per-server pillar can override
maxmemory and eviction policy. Example: redis-us-east-011, redis-us-east-021.opensearch*
OpenSearch search nodes. Form the
wikioasis-search cluster over transport port 9300. Example: opensearch-us-east-011, opensearch-us-east-012.monitoring*
Monitoring server. Runs Icinga 2, Icinga Web 2, Icinga Director, Prometheus, Grafana, and the StatsD exporter. Example:
monitoring-us-east-021.metal*
Bare-metal Proxmox hypervisors. Manage DNS/DHCP, IP forwarding, and VM IPv6 routing for hosted VMs. Example:
metal-us-east-01, metal-us-east-02.apps*
Applications server. Hosts ancillary services such as Phorge (task tracker), Zep (notifications), and the safety portal. Example:
apps-us-east-021.salt*
Salt master. Receives only the
monitoring.nrpe_salt_master state — it monitors itself but is otherwise not managed by Salt.How Salt targets minions
Salt resolves which states and pillar data a minion receives by matching the minion’s ID against the patterns in the relevanttop.sls. WikiOasis uses three matching strategies:
Glob matching (default)
Simple shell-style wildcards match on the minion ID. A* matches any character sequence; [0-9] is a character class.
Compound matching
When a target expression needs Boolean logic (or, and, not) across minion IDs, set match: compound. The compound matcher is placed as the first item in the state list.
Range glob matching
Brace-style ranges let you target numbered hosts without listing each one explicitly:<role>-us-east-0NN naming convention and applies IPv6 routing configuration.
salt/top.sls — full assignment table
The statetop.sls maps minion glob patterns to the state trees they receive.
pillar/top.sls — full assignment table
The pillartop.sls maps minion patterns to the pillar trees they receive. Notice that some clusters receive both the shared init.sls pillar and a per-host override file.
All minions receive the
private pillar either directly (via the '*' rule) or through a role-specific rule (e.g. 'db*' and 'monitoring*'). This ensures every minion has access to the monitoring API credentials and other cross-cutting secrets.Traffic flow
task-us-east-011, which runs the same PHP-FPM and nginx stack as the mw* servers but additionally runs the mediawiki.jobrunner state.