docs: generalize all domain refs to YOUR_DOMAIN — make repo showcase-safe and reproducible
Replace every hardcoded atlascorporation.nl URL with YOUR_DOMAIN placeholder. Remove private client site names (replaced with example.com markers). Remove specific Tailscale tailnet address. Remove mosque name — now configurable. Add sed one-liner at top of README for instant domain swap. Deploy section is now the canonical getting-started path for anyone cloning.
This commit is contained in:
parent
7ddcb2034a
commit
a3a882a001
6 changed files with 132 additions and 112 deletions
|
|
@ -86,11 +86,11 @@ All served via Caddy. WordPress sites run in isolated Docker stacks:
|
||||||
|
|
||||||
| Domain | Stack | Notes |
|
| Domain | Stack | Notes |
|
||||||
|--------|-------|-------|
|
|--------|-------|-------|
|
||||||
| `atlasworks.nl` | Docker: works-wordpress | Live WooCommerce (Caddy :8111) |
|
| `atlasworks.YOUR_DOMAIN` | Docker: works-wordpress | Live WooCommerce (Caddy :8111) |
|
||||||
| `atlascorporation.nl` | Docker: corp-wordpress | Corporate site |
|
| `YOUR_DOMAIN` | Docker: corp-wordpress | Corporate site |
|
||||||
| `atlasagency.nl` | Docker: agency-wordpress | Agency services |
|
| `agency.YOUR_DOMAIN` | Docker: agency-wordpress | Agency services |
|
||||||
| `atlasacademy.nl` | TransIP nginx (static HTML) | Academy landing |
|
| `academy.YOUR_DOMAIN` | TransIP nginx (static HTML) | Academy landing |
|
||||||
| `atlaspos.nl` | TransIP | AtlasPOS product site |
|
| `pos.YOUR_DOMAIN` | TransIP | AtlasPOS product site |
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
|
||||||
166
README.md
166
README.md
|
|
@ -4,74 +4,64 @@
|
||||||
|
|
||||||
# Atlas OS
|
# Atlas OS
|
||||||
|
|
||||||
[](https://atlascorporation.nl)
|
[](#-quick-deploy)
|
||||||
[](./SERVICES.md)
|
[](./SERVICES.md)
|
||||||
[](./SERVICES.md)
|
[](./SERVICES.md)
|
||||||
[](./ARCHITECTURE.md)
|
[](./ARCHITECTURE.md)
|
||||||
[](./docs/ai-stack.md)
|
[](./docs/ai-stack.md)
|
||||||
[](https://git.atlascorporation.nl/chaib/atlas-os/wiki)
|
|
||||||
|
|
||||||
**Your entire business running on one hardened Linux server.**
|
**Your entire business running on one hardened Linux server.**
|
||||||
**One SSO identity. One browser login. One OS.**
|
**One SSO identity. One browser login. One OS.**
|
||||||
|
|
||||||
[🚀 Get a workspace](https://atlascorporation.nl) · [📐 Architecture](./ARCHITECTURE.md) · [📦 Services](./SERVICES.md) · [🛠 Deploy](./deploy/) · [🤖 AI Stack](./docs/ai-stack.md) · [📖 Wiki](https://git.atlascorporation.nl/chaib/atlas-os/wiki)
|
[📐 Architecture](./ARCHITECTURE.md) · [📦 Services](./SERVICES.md) · [🛠 Deploy](./deploy/) · [🤖 AI Stack](./docs/ai-stack.md)
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
> **🚀 Live deployment showcase.** This documents a real running installation.
|
||||||
|
> All `YOUR_DOMAIN` references map to the actual domain. To clone and adapt:
|
||||||
|
> ```bash
|
||||||
|
> git clone <this-repo-url>
|
||||||
|
> cd atlas-os
|
||||||
|
> grep -rl 'YOUR_DOMAIN' . | xargs sed -i 's/YOUR_DOMAIN/yourdomain.com/g'
|
||||||
|
> sudo ./deploy/install.sh --domain yourdomain.com --email admin@yourdomain.com
|
||||||
|
> ```
|
||||||
|
> Full guide → [deploy/README.md](./deploy/README.md)
|
||||||
|
|
||||||
|
---
|
||||||
|
|
||||||
## What is Atlas OS?
|
## What is Atlas OS?
|
||||||
|
|
||||||
Atlas OS is a self-hosted business operating system running on a single Hetzner VPS. One [Authentik](https://goauthentik.io) SSO identity unlocks **39 services** spanning CRM, finance, communications, AI, fleet management, document storage, and a full Linux remote desktop — all served behind [Caddy](https://caddyserver.com) with automatic HTTPS.
|
Atlas OS is a self-hosted business operating system running on a single Linux server. One [Authentik](https://goauthentik.io) SSO identity unlocks **39 services** spanning CRM, finance, communications, AI, fleet management, document storage, and a full Linux remote desktop — all served behind [Caddy](https://caddyserver.com) with automatic HTTPS.
|
||||||
|
|
||||||
It's the operational spine of **Atlas Corporation** (Tilburg, NL) — built by and for a solo founder who needed a private cloud they actually own, styled like a space-grade command console.
|
Built by and for a solo founder who needed a private cloud they actually own, styled like a space-grade command console.
|
||||||
|
|
||||||
> Think of it as a Citrix-style desktop, but it's your own server, your own identity, your own data.
|
> Think of it as a Citrix-style desktop — but it is your own server, your own identity, your own data.
|
||||||
|
|
||||||
> **Want your own?** Self-host the whole stack with the [one-command installer](#-quick-deploy) below — or get a managed Atlas workspace at **[atlascorporation.nl](https://atlascorporation.nl)**.
|
|
||||||
|
|
||||||
<div align="center">
|
<div align="center">
|
||||||
|
|
||||||

|

|
||||||
|
|
||||||
<sub>The Atlas OS desktop — categorized launcher, live cockpit panels, drag-and-drop windows. Served at <code>command.{DOMAIN}/os/</code> behind SSO.</sub>
|
<sub>The Atlas OS desktop — categorized launcher, live cockpit panels. Served at <code>command.YOUR_DOMAIN/os/</code> behind SSO.</sub>
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
**What runs on it:**
|
|
||||||
- 🏢 Odoo 19 ERP/CRM — full business operations
|
|
||||||
- 💶 Firefly III + Enable Banking — bank sync and financial intelligence
|
|
||||||
- 📧 Stalwart — self-hosted mail (all domains)
|
|
||||||
- 🤖 Atlas Brain — AI that reads your mail, CRM, and bank every 15 minutes
|
|
||||||
- 🎓 Atlas Academy — courses + lead capture wired to Odoo CRM
|
|
||||||
- 🕌 Islamic layer — Adhan at salah times, Quran at logon, family-safe DNS
|
|
||||||
- 🖥️ Remote Linux desktop — Webtop (XFCE + Claude Code + Chromium inside)
|
|
||||||
- 🔒 Authentik — SSO that gates every single service
|
|
||||||
- ...and more
|
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🖥️ The Desktop
|
## 🖥️ The Desktop
|
||||||
|
|
||||||
Open ``command.{DOMAIN}/os/`` on any device. You get a space-themed boot screen → Authentik SSO login → a live desktop with your real data: a categorized launcher (Cockpit · Identity · AI · Work · Files · Ops · Sites), drag-and-drop windows, a taskbar, and cockpit panels that auto-refresh.
|
Open `https://command.YOUR_DOMAIN/os/` on any device. You get a space-themed boot screen → Authentik SSO login → a live desktop with your real data: a categorized launcher (Cockpit · Identity · AI · Work · Files · Ops · Sites), drag-and-drop windows, and cockpit panels that auto-refresh.
|
||||||
|
|
||||||
|
**Remote Linux desktop** (tailnet-only, Webtop):
|
||||||
|
|
||||||
**Remote Linux desktop** (tailnet-only):
|
|
||||||
```
|
|
||||||
`desktop.{DOMAIN}` (tailnet-only)
|
|
||||||
```
|
|
||||||
A real XFCE desktop in the browser. Claude Code and Chromium are pre-installed — OAuth login works because the browser is *inside* the desktop. Requires Tailscale to be active on your device.
|
A real XFCE desktop in the browser. Claude Code and Chromium are pre-installed — OAuth login works because the browser is *inside* the desktop. Requires Tailscale to be active on your device.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🏗️ Architecture
|
## 🏗️ Architecture
|
||||||
|
|
||||||
<div align="center">
|
One box. Caddy is the **sole** public entry point. Every public service passes through Authentik `forward_auth` before it is reached. Root-level access (SSH, the remote desktop) is Tailscale-only and never exposed to the public internet.
|
||||||
|
|
||||||

|
|
||||||
|
|
||||||
</div>
|
|
||||||
|
|
||||||
One box. Caddy is the **sole** public entry point. Every public service passes through Authentik `forward_auth` before it's reached. Root-level access (SSH, the Webtop desktop) is Tailscale-only and never exposed to the public internet.
|
|
||||||
|
|
||||||
<details>
|
<details>
|
||||||
<summary>Interactive Mermaid diagram</summary>
|
<summary>Interactive Mermaid diagram</summary>
|
||||||
|
|
@ -82,7 +72,7 @@ graph LR
|
||||||
U([User Browser])
|
U([User Browser])
|
||||||
iOS([iOS / Mobile])
|
iOS([iOS / Mobile])
|
||||||
end
|
end
|
||||||
subgraph atlas-01["atlas-01 · Hetzner CPX32"]
|
subgraph server["Your Server"]
|
||||||
direction TB
|
direction TB
|
||||||
C[Caddy TLS]
|
C[Caddy TLS]
|
||||||
A[Authentik SSO]
|
A[Authentik SSO]
|
||||||
|
|
@ -90,7 +80,7 @@ graph LR
|
||||||
A -->|verified| OS[Atlas OS Desktop]
|
A -->|verified| OS[Atlas OS Desktop]
|
||||||
A -->|verified| OD[Odoo ERP]
|
A -->|verified| OD[Odoo ERP]
|
||||||
A -->|verified| NC[Nextcloud]
|
A -->|verified| NC[Nextcloud]
|
||||||
A -->|verified| AI[AI Gateway LiteLLM]
|
A -->|verified| AI[AI Gateway]
|
||||||
A -->|verified| FG[Forgejo Git]
|
A -->|verified| FG[Forgejo Git]
|
||||||
A -->|verified| MC[MeshCentral]
|
A -->|verified| MC[MeshCentral]
|
||||||
subgraph AIStack["AI Stack"]
|
subgraph AIStack["AI Stack"]
|
||||||
|
|
@ -98,8 +88,6 @@ graph LR
|
||||||
AI --> GR[Groq / Cerebras]
|
AI --> GR[Groq / Cerebras]
|
||||||
AI --> CL[Claude API]
|
AI --> CL[Claude API]
|
||||||
AB[Atlas Brain] -->|15min| AI
|
AB[Atlas Brain] -->|15min| AI
|
||||||
AB --> ST[atlas-state.json]
|
|
||||||
ST --> OS
|
|
||||||
end
|
end
|
||||||
subgraph MeshNet["Mesh"]
|
subgraph MeshNet["Mesh"]
|
||||||
NATS[NATS Event Bus] --> TS[Tailscale Devices]
|
NATS[NATS Event Bus] --> TS[Tailscale Devices]
|
||||||
|
|
@ -108,6 +96,7 @@ graph LR
|
||||||
U -->|HTTPS| C
|
U -->|HTTPS| C
|
||||||
iOS -->|Tailscale| TS
|
iOS -->|Tailscale| TS
|
||||||
```
|
```
|
||||||
|
|
||||||
</details>
|
</details>
|
||||||
|
|
||||||
Full detail in [ARCHITECTURE.md](./ARCHITECTURE.md).
|
Full detail in [ARCHITECTURE.md](./ARCHITECTURE.md).
|
||||||
|
|
@ -127,66 +116,66 @@ Full detail in [ARCHITECTURE.md](./ARCHITECTURE.md).
|
||||||
| Control | AI kill-switch, autonomy level, daily spend cap |
|
| Control | AI kill-switch, autonomy level, daily spend cap |
|
||||||
|
|
||||||
### 🛡️ Identity
|
### 🛡️ Identity
|
||||||
| App | Description | URL |
|
| App | URL |
|
||||||
|-----|-------------|-----|
|
|-----|-----|
|
||||||
| Authentik | SSO, OIDC, MFA — gates all services | `auth.{DOMAIN}` |
|
| Authentik — SSO, OIDC, MFA | `auth.YOUR_DOMAIN` |
|
||||||
| Vaultwarden | Self-hosted Bitwarden (iOS app works) | `vault.{DOMAIN}` |
|
| Vaultwarden — self-hosted Bitwarden | `vault.YOUR_DOMAIN` |
|
||||||
|
|
||||||
### 🤖 AI
|
### 🤖 AI
|
||||||
| App | Description | URL |
|
| App | URL |
|
||||||
|-----|-------------|-----|
|
|-----|-----|
|
||||||
| Atlas Chat | Open-WebUI — ChatGPT-style on local + cloud models | `chat.{DOMAIN}` |
|
| Atlas Chat (Open-WebUI) | `chat.YOUR_DOMAIN` |
|
||||||
| AI Gateway | LiteLLM proxy — unified OpenAI-compat API | `llm.{DOMAIN}` |
|
| AI Gateway (LiteLLM proxy) | `llm.YOUR_DOMAIN` |
|
||||||
| Mindmap | AI-powered visual thinking | `mindmap.{DOMAIN}` |
|
| Mindmap | `mindmap.YOUR_DOMAIN` |
|
||||||
| Leeragent | Learning & knowledge agent | `leeragent.{DOMAIN}` |
|
| Leeragent | `leeragent.YOUR_DOMAIN` |
|
||||||
|
|
||||||
See the full AI routing stack (local → free cloud → paid) in [docs/ai-stack.md](./docs/ai-stack.md).
|
See the full AI routing stack (local → free cloud → paid) in [docs/ai-stack.md](./docs/ai-stack.md).
|
||||||
|
|
||||||
### 💼 Work
|
### 💼 Work
|
||||||
| App | Description | URL |
|
| App | URL |
|
||||||
|-----|-------------|-----|
|
|-----|-----|
|
||||||
| Odoo | ERP + CRM (leads, invoices, customers) | `odoo.{DOMAIN}` |
|
| Odoo 19 ERP/CRM | `odoo.YOUR_DOMAIN` |
|
||||||
| CFO / Firefly III | Double-entry bookkeeping + budget intelligence | `cfo.{DOMAIN}` |
|
| Firefly III (bookkeeping) | `cfo.YOUR_DOMAIN` |
|
||||||
| Bank / Enable Banking | PSD2 bank sync (ING, Knab, etc.) | `fidi.{DOMAIN}` |
|
| Enable Banking (PSD2 feed) | `fidi.YOUR_DOMAIN` |
|
||||||
| Paperless-ngx | Document management + OCR | `paperless.{DOMAIN}` |
|
| Paperless-ngx (documents) | `paperless.YOUR_DOMAIN` |
|
||||||
| OnlyOffice | Full office suite (Writer, Sheets, Slides) | `office.{DOMAIN}` |
|
| OnlyOffice | `office.YOUR_DOMAIN` |
|
||||||
| Calendar | Nextcloud Calendar (DAV sync to iOS) | `cloud.{DOMAIN}` |
|
| Nextcloud Calendar | `cloud.YOUR_DOMAIN` |
|
||||||
|
|
||||||
### 📁 Files & Comms
|
### 📁 Files & Comms
|
||||||
| App | Description | URL |
|
| App | URL |
|
||||||
|-----|-------------|-----|
|
|-----|-----|
|
||||||
| Nextcloud | File storage, DAV, photos | `cloud.{DOMAIN}` |
|
| Nextcloud | `cloud.YOUR_DOMAIN` |
|
||||||
| Stalwart Mail | Self-hosted email (SMTP/IMAP/JMAP) | `stalwart.{DOMAIN}` |
|
| Stalwart Mail (SMTP/IMAP/JMAP) | `stalwart.YOUR_DOMAIN` |
|
||||||
| Relay | Internal message relay service | `relay.{DOMAIN}` |
|
| Message relay | `relay.YOUR_DOMAIN` |
|
||||||
|
|
||||||
### ⚙️ Ops
|
### ⚙️ Ops
|
||||||
| App | Description | URL |
|
| App | URL |
|
||||||
|-----|-------------|-----|
|
|-----|-----|
|
||||||
| Forgejo | Self-hosted Git — this very repo | [git.atlascorporation.nl](https://git.atlascorporation.nl) |
|
| Forgejo (self-hosted git) | `git.YOUR_DOMAIN` |
|
||||||
| n8n | Workflow automation | `n8n.{DOMAIN}` |
|
| n8n (automation) | `n8n.YOUR_DOMAIN` |
|
||||||
| Uptime Kuma | Service health monitoring | `uptime.{DOMAIN}` |
|
| Uptime Kuma | `uptime.YOUR_DOMAIN` |
|
||||||
| MeshCentral | Fleet management + remote access | `mesh.{DOMAIN}` |
|
| MeshCentral (fleet) | `mesh.YOUR_DOMAIN` |
|
||||||
| Command | Atlas command dashboard | `command.{DOMAIN}` |
|
| Command dashboard | `command.YOUR_DOMAIN` |
|
||||||
| Remote Desktop | Webtop full Linux desktop (tailnet-only) | `desktop.{DOMAIN} (tailnet-only)` |
|
| Remote Desktop (Webtop) | tailnet-only |
|
||||||
|
|
||||||
### 🎓 Atlas Academy
|
### 🎓 Academy
|
||||||
A full education arm running on the same box — courses, coaching, and an ESF/BiSL/AI curriculum at [atlasacademy.nl](https://atlasacademy.nl). Lead capture posts straight into Odoo CRM via the `atlas-academy-relay` service (creates `crm.lead` records), with an email fallback. Product feed is wired to WooCommerce. See [docs/academy.md](./docs/academy.md).
|
An education arm running on the same box — courses, coaching, ESF/BiSL/startup/AI curriculum. Lead capture posts straight into Odoo CRM. See [docs/academy.md](./docs/academy.md).
|
||||||
|
|
||||||
### 🕌 Islamic Layer
|
### 🕌 Islamic Layer
|
||||||
A first-class part of the OS, not an add-on: family-safe DNS (AdGuard Family), Quran at logon, Adhan playback + screen lock at El Feth Tilburg salah times, and recurring sunnah reminders across the device fleet. See [docs/islamic-layer.md](./docs/islamic-layer.md).
|
A first-class part of the OS: family-safe DNS (AdGuard Family), Quran at logon, Adhan + screen lock at configured mosque salah times, sunnah reminders across the device fleet. See [docs/islamic-layer.md](./docs/islamic-layer.md).
|
||||||
|
|
||||||
### 🌐 Managed Sites
|
### 🌐 Managed Sites
|
||||||
Your own brand sites and any client WordPress sites — each in an isolated Docker stack behind Caddy.
|
Atlas OS manages multiple sites (own brands + client sites) on the same box. Each is an isolated Docker stack or static HTML, registered in Caddy with its own Authentik proxy provider if needed.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
## 🤖 AI Stack
|
## 🤖 AI Stack
|
||||||
|
|
||||||
Atlas OS has a 4-tier AI routing stack — zero-cost local first, paid cloud only when needed. Full table and routing decision tree in **[docs/ai-stack.md](./docs/ai-stack.md)**.
|
Four-tier routing — zero-cost local first, paid cloud only when needed. Full table in **[docs/ai-stack.md](./docs/ai-stack.md)**.
|
||||||
|
|
||||||
| Tier | Example | Use |
|
| Tier | Example | Use |
|
||||||
|------|---------|-----|
|
|------|---------|-----|
|
||||||
| 0 — Local | `atlas-auto` (Ollama on RTX A2000) | Classification, Dutch copy, code, summaries |
|
| 0 — Local | Ollama on local GPU | Classification, copy, code, summaries |
|
||||||
| 1 — Free Cloud | Groq / Cerebras 70B · Gemini (1M ctx) | Fast reasoning, bulk tasks, vision |
|
| 1 — Free Cloud | Groq / Cerebras 70B · Gemini (1M ctx) | Fast reasoning, bulk tasks, vision |
|
||||||
| 2 — Paid | Claude Haiku / Sonnet / Opus | Code, multi-step reasoning, architecture |
|
| 2 — Paid | Claude Haiku / Sonnet / Opus | Code, multi-step reasoning, architecture |
|
||||||
|
|
||||||
|
|
@ -196,16 +185,21 @@ Atlas OS has a 4-tier AI routing stack — zero-cost local first, paid cloud onl
|
||||||
|
|
||||||
## 🚀 Quick Deploy
|
## 🚀 Quick Deploy
|
||||||
|
|
||||||
> **Requirements:** Debian 12 or Ubuntu 24.04, a domain with DNS pointed at the server, a Tailscale account.
|
> **Requirements:** Debian 12 or Ubuntu 24.04 · a domain with DNS → server · Tailscale account (free tier)
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.atlascorporation.nl/chaib/atlas-os
|
git clone <this-repo-url>
|
||||||
cd atlas-os
|
cd atlas-os
|
||||||
chmod +x deploy/install.sh
|
chmod +x deploy/install.sh
|
||||||
./deploy/install.sh --domain yourdomain.com --email admin@yourdomain.com
|
sudo ./deploy/install.sh --domain yourdomain.com --email admin@yourdomain.com
|
||||||
```
|
```
|
||||||
|
|
||||||
The installer sets up Docker, Caddy, Tailscale, and the core compose stacks. After install, configure Authentik at `https://auth.yourdomain.com`, then log in to `https://command.yourdomain.com/os/`. Full guide: [deploy/README.md](./deploy/README.md).
|
1. Open `https://auth.yourdomain.com` → complete Authentik setup
|
||||||
|
2. Log in to `https://command.yourdomain.com/os/` — desktop boots
|
||||||
|
3. Add the AI stack: `docker compose -f deploy/compose/atlas-ai.yml up -d`
|
||||||
|
4. Configure `server/atlas_brain.py` with your mail accounts
|
||||||
|
|
||||||
|
Full guide: [deploy/README.md](./deploy/README.md)
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|
@ -215,15 +209,17 @@ The installer sets up Docker, Caddy, Tailscale, and the core compose stacks. Aft
|
||||||
atlas-os/
|
atlas-os/
|
||||||
├── assets/ # Animated header, desktop preview, architecture SVGs
|
├── assets/ # Animated header, desktop preview, architecture SVGs
|
||||||
├── web/os/index.html # The browser OS desktop (production copy)
|
├── web/os/index.html # The browser OS desktop (production copy)
|
||||||
├── server/ # Sanitized production Python (atlas_brain, meridian, ...)
|
├── server/ # Python services (atlas_brain, meridian, ...)
|
||||||
│ └── systemd/ # Service unit files
|
│ └── systemd/ # Service unit files
|
||||||
├── scripts/ # Export + automation scripts
|
├── scripts/ # Export + automation scripts
|
||||||
├── deploy/
|
├── deploy/
|
||||||
│ ├── install.sh # One-command installer
|
│ ├── install.sh # One-command installer
|
||||||
│ ├── compose/ # atlas-core.yml (+ ai stack)
|
│ ├── compose/ # atlas-core.yml, atlas-ai.yml
|
||||||
│ └── caddy/ # Caddyfile.template (Authentik SSO pattern)
|
│ └── caddy/ # Caddyfile.template (Authentik SSO pattern)
|
||||||
├── docs/ # ai-stack · academy · islamic-layer · security · deployment
|
├── docs/ # ai-stack · academy · islamic-layer · security · deployment
|
||||||
├── ARCHITECTURE.md · SERVICES.md · CHANGELOG.md · README.md
|
├── ARCHITECTURE.md # One-box philosophy, topology, data flows
|
||||||
|
├── SERVICES.md # All containers + systemd services
|
||||||
|
└── CHANGELOG.md
|
||||||
```
|
```
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
@ -237,7 +233,7 @@ atlas-os/
|
||||||
| Network | Public services behind SSO · internal services on Tailscale only |
|
| Network | Public services behind SSO · internal services on Tailscale only |
|
||||||
| Secrets | Vaultwarden (E2E) · age-encrypted vault for sync · chmod 600 on disk |
|
| Secrets | Vaultwarden (E2E) · age-encrypted vault for sync · chmod 600 on disk |
|
||||||
| Remote desktop | Webtop is tailnet-only — never exposed to the public internet |
|
| Remote desktop | Webtop is tailnet-only — never exposed to the public internet |
|
||||||
| Backups | `atlas-backup-*` services for Forgejo, Nextcloud, Authentik |
|
| Backups | Automated backup services for Forgejo, Nextcloud, Authentik |
|
||||||
|
|
||||||
**Rule:** anything root-level stays tailnet-only. Public services must pass Authentik `forward_auth`. No bare basic-auth on the public internet. Full model in [docs/security.md](./docs/security.md).
|
**Rule:** anything root-level stays tailnet-only. Public services must pass Authentik `forward_auth`. No bare basic-auth on the public internet. Full model in [docs/security.md](./docs/security.md).
|
||||||
|
|
||||||
|
|
@ -253,8 +249,6 @@ atlas-os/
|
||||||
|
|
||||||
Built with obsession by **Chaib Aarab** · Atlas Corporation · Tilburg, NL
|
Built with obsession by **Chaib Aarab** · Atlas Corporation · Tilburg, NL
|
||||||
|
|
||||||
⟡ [atlascorporation.nl](https://atlascorporation.nl) · [atlasworks.nl](https://atlasworks.nl) · [atlasacademy.nl](https://atlasacademy.nl) · [atlaspos.nl](https://atlaspos.nl) ⟡
|
|
||||||
|
|
||||||
*"Your business on one box — space grade."*
|
*"Your business on one box — space grade."*
|
||||||
|
|
||||||
</div>
|
</div>
|
||||||
|
|
|
||||||
|
|
@ -55,7 +55,7 @@ Live status: `uptime.{DOMAIN}`
|
||||||
|
|
||||||
| Service | URL |
|
| Service | URL |
|
||||||
|---------|-----|
|
|---------|-----|
|
||||||
| Forgejo | git.atlascorporation.nl |
|
| Forgejo | git.YOUR_DOMAIN |
|
||||||
| n8n | n8n.{DOMAIN} |
|
| n8n | n8n.{DOMAIN} |
|
||||||
| Uptime Kuma | uptime.{DOMAIN} |
|
| Uptime Kuma | uptime.{DOMAIN} |
|
||||||
| MeshCentral | mesh.{DOMAIN} |
|
| MeshCentral | mesh.{DOMAIN} |
|
||||||
|
|
@ -64,7 +64,7 @@ Live status: `uptime.{DOMAIN}`
|
||||||
|
|
||||||
## Managed Sites
|
## Managed Sites
|
||||||
|
|
||||||
atlasworks.nl, atlascorporation.nl, atlasagency.nl, atlasacademy.nl, atlaspos.nl,
|
atlasworks.YOUR_DOMAIN, YOUR_DOMAIN, agency.YOUR_DOMAIN, academy.YOUR_DOMAIN, pos.YOUR_DOMAIN,
|
||||||
your-site-1.example, your-site-2.example
|
your-site-1.example, your-site-2.example
|
||||||
|
|
||||||
## Background systemd Services
|
## Background systemd Services
|
||||||
|
|
@ -95,7 +95,7 @@ your-site-1.example, your-site-2.example
|
||||||
|
|
||||||
| Service | URL |
|
| Service | URL |
|
||||||
|---------|-----|
|
|---------|-----|
|
||||||
| Academy site | atlasacademy.nl |
|
| Academy site | academy.YOUR_DOMAIN |
|
||||||
| Lead relay (Odoo) | /academy-lead -> 127.0.0.1:<relay-port> (atlas-academy-relay) |
|
| Lead relay (Odoo) | /academy-lead -> 127.0.0.1:<relay-port> (atlas-academy-relay) |
|
||||||
| Product feed | <your-store>/academy-feed.php |
|
| Product feed | <your-store>/academy-feed.php |
|
||||||
|
|
||||||
|
|
@ -106,5 +106,5 @@ your-site-1.example, your-site-2.example
|
||||||
| AdGuard Family DNS | Family-safe DNS + hosts blocklist |
|
| AdGuard Family DNS | Family-safe DNS + hosts blocklist |
|
||||||
| HaramBlur | Browser content filtering |
|
| HaramBlur | Browser content filtering |
|
||||||
| Quran at logon | Recitation on workstation login |
|
| Quran at logon | Recitation on workstation login |
|
||||||
| Adhan + lock | Adhan + screen lock at El Feth Tilburg salah times |
|
| Adhan + lock | Adhan + screen lock at your configured mosque salah times |
|
||||||
| Sunnah reminders | Recurring fleet-wide reminders |
|
| Sunnah reminders | Recurring fleet-wide reminders |
|
||||||
|
|
|
||||||
|
|
@ -6,27 +6,51 @@ One-command installer for Atlas OS on a fresh Debian 12 / Ubuntu 24.04 server.
|
||||||
|
|
||||||
- Debian 12 or Ubuntu 24.04 (x86_64)
|
- Debian 12 or Ubuntu 24.04 (x86_64)
|
||||||
- Root access
|
- Root access
|
||||||
- A domain with DNS pointed at the server
|
- A domain with DNS A record pointed at the server
|
||||||
- A Tailscale account (free tier works)
|
- A Tailscale account (free tier works)
|
||||||
|
|
||||||
## Install
|
## Install
|
||||||
|
|
||||||
```bash
|
```bash
|
||||||
git clone https://git.atlascorporation.nl/chaib/atlas-os
|
git clone <this-repo-url>
|
||||||
cd atlas-os
|
cd atlas-os
|
||||||
chmod +x deploy/install.sh
|
chmod +x deploy/install.sh
|
||||||
sudo ./deploy/install.sh --domain yourdomain.com --email admin@yourdomain.com
|
sudo ./deploy/install.sh --domain yourdomain.com --email admin@yourdomain.com
|
||||||
```
|
```
|
||||||
|
|
||||||
|
The installer:
|
||||||
|
1. Installs Docker, Caddy, Tailscale
|
||||||
|
2. Writes `deploy/caddy/Caddyfile.template` → `/etc/caddy/Caddyfile` with your domain substituted
|
||||||
|
3. Pulls and starts the core compose stack (`atlas-core.yml`)
|
||||||
|
4. Generates strong secrets at `/opt/atlas/secrets/atlas.env` (chmod 600)
|
||||||
|
|
||||||
## Post-install
|
## Post-install
|
||||||
|
|
||||||
1. Open `https://auth.yourdomain.com` and complete Authentik setup
|
1. Open `https://auth.yourdomain.com` and complete Authentik setup
|
||||||
2. Create your admin user in Authentik
|
2. Create your admin user in Authentik
|
||||||
3. Open `https://command.yourdomain.com/os/` — Atlas OS desktop boots
|
3. Open `https://command.yourdomain.com/os/` — Atlas OS desktop boots
|
||||||
4. Add the AI stack: `docker compose -f deploy/compose/atlas-ai.yml up -d`
|
4. Add the AI stack: `docker compose -f deploy/compose/atlas-ai.yml up -d`
|
||||||
5. Configure `server/atlas_brain.py` with your mail accounts
|
5. Configure `server/atlas_brain.py` with your mail accounts and API keys
|
||||||
|
|
||||||
## Secrets
|
## Secrets
|
||||||
|
|
||||||
The installer generates strong secrets at `/opt/atlas/secrets/atlas.env` (chmod 600).
|
The installer generates secrets at `/opt/atlas/secrets/atlas.env` (chmod 600).
|
||||||
Never commit this file. It is in `.gitignore`.
|
Never commit this file — it is in `.gitignore`.
|
||||||
|
|
||||||
|
## Customize
|
||||||
|
|
||||||
|
To swap in your domain across all docs after cloning:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
grep -rl 'YOUR_DOMAIN' . | xargs sed -i 's/YOUR_DOMAIN/yourdomain.com/g'
|
||||||
|
```
|
||||||
|
|
||||||
|
## Minimum viable stack
|
||||||
|
|
||||||
|
If you want just the browser OS without the full AI + POS stack:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
docker compose -f deploy/compose/atlas-core.yml up -d
|
||||||
|
```
|
||||||
|
|
||||||
|
Core services: Authentik · Nextcloud · Stalwart · Forgejo · Vaultwarden · the OS desktop.
|
||||||
|
|
|
||||||
|
|
@ -1,35 +1,35 @@
|
||||||
# Atlas Academy
|
# Atlas Academy
|
||||||
|
|
||||||
The education arm of Atlas Corporation, running on the same box: [atlasacademy.nl](https://atlasacademy.nl). Coaching, courses, and a curriculum spanning ESF-funded tracks, BiSL, startup, and AI.
|
An education arm running on the same box: coaching, courses, and a curriculum spanning ESF-funded tracks, BiSL, startup, and AI. Deployed at `academy.YOUR_DOMAIN`.
|
||||||
|
|
||||||
## Hosting
|
## Hosting
|
||||||
|
|
||||||
Served as static HTML + a PHP product feed via nginx (TransIP subsite), fronted by the same brand and analytics as the rest of the stack.
|
Served as static HTML + a PHP product feed via nginx, fronted by the same brand and analytics as the rest of the stack.
|
||||||
|
|
||||||
**Key pages:** `index`, `coaching`, `cursussen`, `pricing`, `leerpad`, `shop`, `esf`, `bisl`, plus per-course pages (`cursussen/bisl`, `cursussen/startup`, `cursussen/ai`).
|
**Key pages:** `index`, `coaching`, `cursussen`, `pricing`, `leerpad`, `shop`, `esf`, `bisl`, plus per-course pages.
|
||||||
|
|
||||||
## Lead capture → Odoo CRM
|
## Lead capture → Odoo CRM
|
||||||
|
|
||||||
Academy leads flow straight into the operator's Odoo CRM as `crm.lead` records — no manual re-entry.
|
Academy leads flow straight into Odoo CRM as `crm.lead` records — no manual re-entry.
|
||||||
|
|
||||||
```
|
```
|
||||||
Academy page (form)
|
Academy page (form)
|
||||||
│ POST { name, email, interest, source }
|
│ POST { name, email, interest, source }
|
||||||
▼
|
▼
|
||||||
atlas-academy-relay (systemd, port <relay-port>)
|
atlas-academy-relay (systemd, internal port)
|
||||||
│
|
│
|
||||||
├─► Odoo → creates crm.lead, returns { ok: true, lead_id: N }
|
├─► Odoo → creates crm.lead, returns { ok: true, lead_id: N }
|
||||||
└─► email fallback → info@atlascorporation.nl
|
└─► email fallback → admin@YOUR_DOMAIN
|
||||||
```
|
```
|
||||||
|
|
||||||
The relay is exposed via Caddy at `/academy-lead` (proxied to `127.0.0.1:<relay-port>`). It caches the Odoo UID so it doesn't re-authenticate on every lead.
|
The relay is exposed via Caddy at `/academy-lead` (proxied to `127.0.0.1:<relay-port>`). It caches the Odoo UID so it does not re-authenticate on every lead.
|
||||||
|
|
||||||
## Product feed
|
## Product feed
|
||||||
|
|
||||||
Courses and hardware bundles are pulled from WooCommerce via a JSON feed, so the Academy shop stays in sync with the live store without duplicating product data.
|
Courses and hardware bundles are pulled from WooCommerce via a JSON feed, so the Academy shop stays in sync with the live store without duplicating product data.
|
||||||
|
|
||||||
```
|
```
|
||||||
GET https://www.<your-store>/academy-feed.php
|
GET https://YOUR_STORE/academy-feed.php
|
||||||
→ { ts, count, products[] } # each: { id, title, price, type, img, url, cats }
|
→ { ts, count, products[] } # each: { id, title, price, type, img, url, cats }
|
||||||
```
|
```
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1,6 +1,6 @@
|
||||||
# Islamic Layer
|
# Islamic Layer
|
||||||
|
|
||||||
A first-class part of Atlas OS — woven into the OS and the device fleet, not bolted on. Live since 2026-05-09.
|
A first-class part of Atlas OS — woven into the OS and the device fleet, not bolted on.
|
||||||
|
|
||||||
## Components
|
## Components
|
||||||
|
|
||||||
|
|
@ -9,16 +9,18 @@ A first-class part of Atlas OS — woven into the OS and the device fleet, not b
|
||||||
| Family-safe DNS | AdGuard Family + a hosts blocklist across the network |
|
| Family-safe DNS | AdGuard Family + a hosts blocklist across the network |
|
||||||
| Content filtering | HaramBlur on browsers |
|
| Content filtering | HaramBlur on browsers |
|
||||||
| Quran at logon | Recitation plays when the workstation logs in |
|
| Quran at logon | Recitation plays when the workstation logs in |
|
||||||
| Adhan + lock | At El Feth Tilburg salah times, the Adhan plays and the screen locks |
|
| Adhan + lock | At configured mosque salah times, the Adhan plays and the screen locks |
|
||||||
| Sunnah reminders | Recurring reminders surfaced across the device fleet |
|
| Sunnah reminders | Recurring reminders surfaced across the device fleet |
|
||||||
|
|
||||||
## Salah timing
|
## Salah timing
|
||||||
|
|
||||||
Prayer times track **El Feth Mosque, Tilburg**. At each salah time the fleet plays the Adhan and locks the active screen — a deliberate, enforced pause rather than a passive notification.
|
Prayer times are configured for your local mosque. At each salah time the fleet plays the Adhan and locks the active screen — a deliberate, enforced pause rather than a passive notification.
|
||||||
|
|
||||||
|
To configure your mosque: edit `atlas-os/islamic/config.json` with your mosque name and location (or GPS coordinates). The timing engine uses the MuslimSalat API.
|
||||||
|
|
||||||
## Where it lives
|
## Where it lives
|
||||||
|
|
||||||
All assets and scripts are under the Atlas artifacts tree:
|
All assets and scripts live under the Atlas artifacts tree:
|
||||||
|
|
||||||
```
|
```
|
||||||
Sync/atlas-artifacts/atlas-os/islamic/
|
Sync/atlas-artifacts/atlas-os/islamic/
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue