Files
computer-playbook/docs/contributing/environment/hardware.md
T
kevinveenbirkenbachandClaude Sonnet 4.6 9d863f1ef4 feat(inventory): add SERVICES_DISABLED env var support and environment test flow
- Add services_disabler.py: parse SERVICES_DISABLED, disable services in host_vars,
  remove provider roles from inventory
- Wire apply_services_disabled_from_env into cli/create/inventory/cli.py after deploy
- Add unit tests for all services_disabler functions
- Update hardware.md and variables.md with SERVICES_DISABLED documentation
- Update environment.sh: deploy dashboard with SERVICES_DISABLED=matomo first,
  assert dashboard reachable + matomo not reachable, then deploy matomo and assert
  reachable; extract assert_http_status / assert_http_status_not helpers

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-29 15:00:24 +02:00

4.6 KiB

Manage Low-Hardware Resources

Use this guide when you work on a machine with limited CPU, RAM, or disk.

Goal Hardware

A practical long-term target is:

  • 64 GB RAM
  • a swapfile about the same size as RAM
  • an external SSD with more than 500 GB
  • enough room for Docker images, volumes, build cache, and local repositories

If disk space is tight, move Docker data, caches, and your working directory to the SSD.

On Linux, you can move Docker to a different data path:

{
  "data-root": "/mnt/ssd/docker"
}

Then restart Docker:

sudo systemctl restart docker

Make sure the mount is available before Docker starts. Otherwise the daemon may fall back to the system drive or fail to start cleanly.

On macOS and Windows, use Docker Desktop settings instead of daemon.json.

A same-size swapfile helps absorb memory spikes on Linux. On Windows and macOS, keep enough free disk space available for virtual memory and local caches.

Load Only What You Need

For a broad stack like the Community Hub, start only the services you actually need. If you are working on Discourse, you do not need Mastodon, Pixelfed, PeerTube, or Friendica in the same session.

The main lever is each role's config/main.yml, where Compose services are enabled or disabled:

  • use enabled: true only for services you actually need
  • set enabled: false for optional services
  • for shared services, also set shared: false if they are not needed

Alternatively, set the SERVICES_DISABLED environment variable before creating the inventory to disable services automatically across all applications without editing any file:

SERVICES_DISABLED="matomo" make deploy-fresh-purged-app APPS=web-app-discourse

This sets enabled: false and shared: false for every listed service in the generated inventory. See variables.md for details.

Service Required What it provides Effect of disabling Safe to disable when
oidc 🟠 Single sign-on via Keycloak App falls back to local login You are not testing SSO/OIDC flows
ldap 🟠 Central user directory via OpenLDAP App uses its own local user store You are not testing LDAP/user sync
matomo 🔴 Analytics tracking No usage statistics collected — usually no functional impact You are not testing analytics integration
css 🟠 Custom theming/branding stylesheet App uses its default upstream theme You are not testing visual customization
logout 🟠 Shared logout endpoint across apps Single sign-out does not propagate You are not testing cross-app logout
dashboard 🟠 Central navigation hub App is not reachable via the dashboard You access the app directly by URL
redis 🟢 In-memory cache and session store Caching and queuing are disabled The app does not require sessions or queues (rarely safe)
database 🟢 Shared relational database (MariaDB/Postgres) App cannot persist data Never disable — required by almost every app

Legend:

  • 🟢 Required — cannot be disabled.
  • 🟠 Optional — can be disabled, reduces functionality.
  • 🔴 Safe to disable — usually no functional impact.

This is a development profile, not a production target. Enable SSO, LDAP, or analytics only when you need them.

Test Smarter

On small machines, limit validation to the role you are touching.

For Discourse, start with:

SERVICES_DISABLED="matomo" APPS=web-app-discourse make deploy-fresh-purged-app

If the local inventory and stack already exist, reuse them:

SERVICES_DISABLED="matomo" APPS=web-app-discourse make deploy-reuse-kept-app

Use make deploy-fresh-kept-all only when you need broad coverage and have enough time and resources.

Measure Before You Delete

Before cleaning up, check what is actually consuming space:

docker system df
docker ps -a
docker images
journalctl --disk-usage
df -h

That makes it easier to see whether the real issue is Docker, journald, a package cache, or project state.

Cleanup

The cleanup SPOT is the purge guide. Use that page for the canonical entry points.

For the one-time Windows cleanmgr /sageset:1 setup, set PURGE_WINDOWS_CLEANMGR_SETUP=true before you run make purge-system.

For related local helpers, see the local purge guide and the local reset guide.

Discussion

Discuss this topic in the related forum article.