Files
homelab-docs/manifest.md
2026-01-01 02:58:37 +00:00

2.2 KiB

🛡️ My Cloud Hub: Architecture & Operations

🌐 Global Architecture

  • Compute: Linode 2GB Shared Instance (Chicago/us-ord)
  • OS: Ubuntu 22.04 LTS
  • Ingress: Cloudflare Zero Trust (Tunnels) with MFA/WARP
  • Backups: Nightly (2:00 AM) to Linode Object Storage (S3) via rclone

🖥️ System Specs & Tuning

  • RAM: 2GB (Shared)
  • Swap: 1.5GB Total
    • Partition: /dev/sdb (512MB default)
    • File: /swapfile (1GB manual)
  • Swappiness: Default (60)

🏗️ Docker Network Topology

Network Driver Purpose
web_gateway bridge (ext) External traffic from Cloudflare to containers
db_network bridge (ext) Private traffic between Apps and Postgres

📦 Service Inventory

Service URL Directory Database
Dashboard home.davisdre.com /opt/docker/dashboard Static (Nginx)
Gitea git.davisdre.com /opt/docker/gitea gitea (Postgres)
Linkwarden links.davisdre.com /opt/docker/linkwarden linkwarden (Postgres)
FreshRSS news.davisdre.com /opt/docker/freshrss freshrss (Postgres)
Memos memos.davisdre.com /opt/docker/memos memos (Postgres)
Surmai travel.davisdre.com /opt/docker/surmai Internal SQLite
Postgres Internal Only /opt/docker/global-db Universal DB

🛠️ Standard Operating Procedures (SOPs)

1. Updating the Dashboard

  1. Modify index.html on local PC.
  2. git add . && git commit -m "update" && git push
  3. On Linode, run: updatedash (alias for /opt/docker/dashboard/update-dash.sh)

2. Adding a New App (Postgres-backed)

Run these commands to provision the DB before deploying the container:

# 1. Update global-db/compose.yaml environment list first
# 2. Manually provision the DB (Live Instance)
docker exec -it global_postgres psql -U postgres -c "CREATE DATABASE app_name;"
docker exec -it global_postgres psql -U postgres -c "CREATE USER app_name WITH PASSWORD 'my-custom-password';"
docker exec -it global_postgres psql -U postgres -c "GRANT ALL PRIVILEGES ON DATABASE app_name TO app_name;"
docker exec -it global_postgres psql -U postgres -c "ALTER DATABASE app_name OWNER TO app_name;"