commit f7ca90571c57dbf0e88adae7588cd38670f49b91 Author: Kantin Petit Date: Sat Aug 8 17:00:41 2026 +0200 chore: init pogoo-atlas deploy repo (site + api + db, isolated) diff --git a/.env.example b/.env.example new file mode 100644 index 0000000..1f3d473 --- /dev/null +++ b/.env.example @@ -0,0 +1,2 @@ +# In Portainer, set DB_PASSWORD as a stack environment variable (do NOT commit .env). +DB_PASSWORD=change-me-strong diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..e2d7a31 --- /dev/null +++ b/.gitattributes @@ -0,0 +1,3 @@ +* text=auto eol=lf +*.png binary +*.ico binary diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..4c49bd7 --- /dev/null +++ b/.gitignore @@ -0,0 +1 @@ +.env diff --git a/README.md b/README.md new file mode 100644 index 0000000..5ba17b8 --- /dev/null +++ b/README.md @@ -0,0 +1,26 @@ +# pogoo-atlas — repo `git.pogoo.app/kpetit/pogoo-atlas` + +Self-contained deploy repo for **atlas.pogoo.app** (Pogoo · Atlas). Fully isolated: own frontend + API + Postgres. Portainer-git friendly. + +``` +pogoo-atlas/ +├── docker-compose.yml # web (./site) + api + db, all isolated +└── site/ # index.html, Dockerfile, nginx.conf, favicons (stone-blue accent) +``` + +## Deploy (Portainer-git, auto) +1. Push to Forgejo: `git.pogoo.app/kpetit/pogoo-atlas`. +2. Portainer → Stacks → Add → **Git repository** + - URL: `https://git.pogoo.app/kpetit/pogoo-atlas.git` + - Compose path: `docker-compose.yml` + - Env var: `DB_PASSWORD` (set in the stack, not committed) + - **Automatic updates + webhook: ON** +3. Forgejo repo → Settings → Webhooks → paste the Portainer webhook URL. + +## Prereqs +- Edge stack up, `edge` network exists. +- DNS: `atlas.pogoo.app` → server IP. + +## Notes +- `api` is a `traefik/whoami` placeholder — swap for the real Atlas backend. +- `db` (Postgres) stays on the private `atlas_net`, never on `edge`. Its data is this product's own. diff --git a/docker-compose.yml b/docker-compose.yml new file mode 100644 index 0000000..60cd0b1 --- /dev/null +++ b/docker-compose.yml @@ -0,0 +1,63 @@ +# atlas.pogoo.app — full product stack, self-contained repo for Portainer-git auto-deploy. +# Fully ISOLATED: own frontend + own API + own DB. Nothing shared with other products. +name: pogoo-atlas + +services: + web: + build: + context: ./site + image: pogoo/atlas-web:latest + restart: unless-stopped + networks: [edge] + labels: + - "traefik.enable=true" + - "traefik.http.routers.atlas.rule=Host(`atlas.pogoo.app`)" + - "traefik.http.routers.atlas.entrypoints=websecure" + - "traefik.http.routers.atlas.tls.certresolver=le" + - "traefik.http.routers.atlas.middlewares=security-headers@file" + - "traefik.http.services.atlas.loadbalancer.server.port=80" + + api: + # Placeholder — swap traefik/whoami for the real Atlas backend image. + image: traefik/whoami:latest + restart: unless-stopped + environment: + - DATABASE_URL=postgres://atlas:${DB_PASSWORD}@db:5432/atlas + networks: [edge, atlas_net] + depends_on: + db: + condition: service_healthy + labels: + - "traefik.enable=true" + - "traefik.http.routers.atlas-api.rule=Host(`atlas.pogoo.app`) && PathPrefix(`/api`)" + - "traefik.http.routers.atlas-api.entrypoints=websecure" + - "traefik.http.routers.atlas-api.tls.certresolver=le" + - "traefik.http.routers.atlas-api.priority=100" + - "traefik.http.routers.atlas-api.middlewares=atlas-strip@docker,ratelimit-std@file" + - "traefik.http.middlewares.atlas-strip.stripprefix.prefixes=/api" + - "traefik.http.services.atlas-api.loadbalancer.server.port=80" + + db: + image: postgres:16-alpine + restart: unless-stopped + environment: + - POSTGRES_USER=atlas + - POSTGRES_PASSWORD=${DB_PASSWORD} + - POSTGRES_DB=atlas + volumes: + - atlas_pgdata:/var/lib/postgresql/data + networks: [atlas_net] # private — never on edge + healthcheck: + test: ["CMD-SHELL", "pg_isready -U atlas"] + interval: 10s + timeout: 5s + retries: 5 + +networks: + edge: + external: true + atlas_net: + driver: bridge + +volumes: + atlas_pgdata: diff --git a/site/Dockerfile b/site/Dockerfile new file mode 100644 index 0000000..b1f0076 --- /dev/null +++ b/site/Dockerfile @@ -0,0 +1,5 @@ +# Immutable static image for atlas.pogoo.app (product frontend). +FROM nginx:1.27-alpine +COPY nginx.conf /etc/nginx/conf.d/default.conf +COPY . /usr/share/nginx/html +HEALTHCHECK --interval=30s --timeout=3s CMD wget -qO- http://localhost/ >/dev/null || exit 1 diff --git a/site/apple-touch-icon.png b/site/apple-touch-icon.png new file mode 100644 index 0000000..3bfb8c2 Binary files /dev/null and b/site/apple-touch-icon.png differ diff --git a/site/favicon-32.png b/site/favicon-32.png new file mode 100644 index 0000000..8134092 Binary files /dev/null and b/site/favicon-32.png differ diff --git a/site/favicon.ico b/site/favicon.ico new file mode 100644 index 0000000..fc773f8 Binary files /dev/null and b/site/favicon.ico differ diff --git a/site/index.html b/site/index.html new file mode 100644 index 0000000..59c1da7 --- /dev/null +++ b/site/index.html @@ -0,0 +1,135 @@ + + + + + +Atlas — Know where everything is · by Pogoo + + + + + + + + + + + +
+
Pogoo · Atlas
+

Know where everything is.

+

Atlas draws a living map of your infrastructure and services — every node, its state, its owner — so nothing hides.

+ + +
+
atlas.pogoo.app/map
+
+ +
+

Production · 12 nodes

+
+
api-gateway
healthy · 24ms
+
auth
healthy · 11ms
+
workers
degraded · 210ms
+
postgres
healthy · 3ms
+
cache
healthy · 1ms
+
mailer
down · 0
+
cdn
healthy · 8ms
+
search
healthy · 30ms
+
+
+
+
+
+ +
+
What Atlas does
+

A map you can trust at a glance.

+
+
Auto-discovery

Point Atlas at your cloud and repos. It finds services and draws the graph — no manual diagrams.

+
Live state

Health, latency and ownership on every node. Green, amber, red — the way you already think.

+
Who owns what

Every service has a name attached. No more "whose is this?" at 3am.

+
Time travel

Scrub the timeline to see how the map looked before an incident.

+
+
+ +
+
+ +

Atlas is part of Pogoo — a house of good tools. Same spine, same craft, its own colour. See the whole house →

+
+
+ + + + + + diff --git a/site/nginx.conf b/site/nginx.conf new file mode 100644 index 0000000..2034a45 --- /dev/null +++ b/site/nginx.conf @@ -0,0 +1,11 @@ +server { + listen 80; + server_name _; + root /usr/share/nginx/html; + index index.html; + location ~* \.(?:png|ico|svg|woff2?|css|js)$ { + expires 30d; + add_header Cache-Control "public, immutable"; + } + location / { try_files $uri $uri/ /index.html; } +}