Skip to main content
INFRASTACK COMPOSER STUDIOSKKNI J.611000.013.01 • LPIC-1/2PRODUCTION HARDENED

Docker, Nginx & Linux Stack Visual Composer

Visual composer for production-grade Linux, Nginx, and Docker server stacks aligned with SKKNI and LPIC standards. Assemble ingress, frontend, backend API, private database, and cache in modular blocks with live SVG topology and deployment scripts.

Active Containers7 Containers
Estimated Stack RAM~1872 MB (1.83 GB)
Recommended VPS Spec4 vCPU / 4 GB RAM
Network Security PostureZERO-TRUST TUNNEL (0 Open Public Web Ports + Isolated DB)
💡

What Is Stack Composer For? (Pick Your Scenario)

When you finish coding an app on your laptop and want to deploy it to a Linux VPS, you need Docker, Nginx SSL Reverse Proxy, an Isolated Database, and a Firewall. Pick your stack below to instantly get a High-Res Architecture Diagram, Monthly Cloud VPS Cost Comparison, and a 1-Command Auto-Deploy Script!

🌊

Traffic Flow Simulation (1 ➔ 2 ➔ 3 ➔ 4)

TLS Encrypted Flow
1. Browser Pengunjung🌐

Accesses https://app.kampus.ac.id over public internet via HTTPS (Port 443).

2. Gerbang Keamanan (Edge)🛡️

Edge ingress terminates TLS certificates and applies rate limiting.

3. Mesin Aplikasi⚡

Routes frontend UI requests to NEXTJS_NODE and API endpoints to LARAVEL_OCTANE.

4. Brankas Data Privat🗄️

POSTGRES_16 persists records within isolated private bridge network without WAN exposure.

🚀

1-Click Production Architecture Templates (Popular Presets)

Click to load complete tested stack
Architecture Workflow (5 Modular Steps):5 Active Component Modules

⚙️STEP 1 • PROJECT IDENTITY & DOMAIN

● Active

Specify the project slug and production domain FQDN used for Let's Encrypt SSL and Nginx server_name.

🛡️STEP 2 • LAYER 1 — EDGE INGRESS & TLS

Pilih mekanisme gerbang trafik masuk dari internet publik ke host server Anda.

💻STEP 3 • LAYER 2 — WEB FRONTEND UI

Pilih kerangka antarmuka pengguna klien (SSR atau Static SPA).

⚡STEP 4 • LAYER 3 — BACKEND API SERVICE

Pilih runtime server logika bisnis backend aplikasi.

🗄️STEP 5 • LAYER 4 — DATABASE & CACHE TIER

Database diisolasi 100% di jaringan internal Docker tanpa port publik ke internet.

📊

LIVE VPS RESOURCE & CAPACITY METER

● VPS Spec: 4 vCPU / 4 GB RAM
Estimated Stack RAM Allocation:1.83 GB / 4.0 GB RAM (46% Safe Load)
Estimated Daily Traffic:Estimated ~101,250 – 243,000 Requests/Day (Estimate)
Port Exposure Summary:Port Publik: 80/443 • Port DB: Terisolasi 100%
💰

Monthly Cloud VPS Cost Comparison (USD & IDR)

📅 Last updated: November 2026 • Prices are market estimates (excl. tax)Spec Target: 4 vCPU / 4 GB RAM

Estimated monthly server cost to run the siakad-app architecture stably 24/7 based on recommended 4 vCPU / 4 GB RAM:

VPS ProviderPlan TypeEstimasi USDEstimasi IDRRegion & Strengths
🇩🇪 Hetzner CloudCX32 / CPX31~$5.50 - $10.50 / bln~Rp 88.000 - Rp 168.000 / blnBest value per RAM, EU & US Datacenters
🌐 UpCloud / DigitalOcean / VultrStandard 4GB / 8GB~$12.00 - $24.00 / bln~Rp 192.000 - Rp 384.000 / blnSingapore/Jakarta DC, ultra-low latency (<15ms)
🇮🇩 VPS Cloud Lokal IndonesiaIIX / OpenIXP / IDC~$6.00 - $14.00 / bln~Rp 95.000 - Rp 225.000 / blnUnmetered local IIX peering, QRIS/local payment

LIVE DOCKER CONTAINER NETWORK & ISOLATION TOPOLOGY

Bridge: siakad-app-net
ZONE 1: WAN INGRESS & TLS TERMINATION (Public Entrypoint)🛡️ Hybrid Nginx + CFapp.kampus.ac.id📈 Uptime Kuma Monitorstatus.app.kampus.ac.idZONE 2: APPLICATION BRIDGE NETWORK (web-net & api-net)▲ frontend (Next.js Node 20)Container: siakad-app-frontendInternal Port: 3000 • RAM ~200MB⚙️ backend-api (LARAVEL_OCTANE)Container: siakad-app-backend-apiAPI Port: 8000 • Internal OnlyZONE 3: PRIVATE STORAGE & PERSISTENCE TIER (db-net • internal: true)🗄️ database (POSTGRES_16)Volume: siakad-app-db-dataPort: 5432 (Zero Public Access)Encrypted Credentials via .env⚡ redis (Redis 7.4 In-Memory)Volume: siakad-app-redis-dataPort: 6379 (Isolated to api-net)Fast Session & Cache Store
# =====================================================================
# Generated by KalkuNet Visual Stack Composer (https://kalkunet.com)
# Project : siakad-app (app.kampus.ac.id)
# Topology: BOTH_NGINX_AND_CF -> frontend + backend-api -> POSTGRES_16 + redis
# =====================================================================
name: siakad-app

services:
  nginx-proxy:
    image: nginx:1.27-alpine
    container_name: siakad-app-nginx
    restart: unless-stopped
    ports:
      - "127.0.0.1:8080:80"
    volumes:
      - ./nginx/nginx.conf:/etc/nginx/conf.d/default.conf:ro
      - ./certbot/conf:/etc/letsencrypt:ro
    depends_on:
      - frontend
      - backend-api
    networks:
      - edge-net

  cloudflared:
    image: cloudflare/cloudflared:latest
    container_name: siakad-app-tunnel
    restart: unless-stopped
    command: tunnel --no-autoupdate run
    environment:
      TUNNEL_TOKEN: ${CLOUDFLARE_TUNNEL_TOKEN}
    networks:
      - edge-net

  frontend:
    image: node:20-alpine
    container_name: siakad-app-frontend
    restart: unless-stopped
    working_dir: /app
    environment:
      NODE_ENV: production
      NEXT_PUBLIC_API_URL: https://app.kampus.ac.id/api
    expose:
      - "3000"
    networks:
      - edge-net

  backend-api:
    image: dunglas/frankenphp:1-php8.3-alpine
    container_name: siakad-app-backend
    restart: unless-stopped
    working_dir: /app
    command: php artisan octane:frankenphp --host=0.0.0.0 --port=8000
    environment:
      APP_ENV: production
      PORT: 8000
      DB_HOST: database
      DB_PORT: 5432
      DB_NAME: ${DB_NAME:-app_db}
      DB_USER: ${DB_USER:-app_user}
      DB_PASSWORD: ${DB_PASSWORD}
      REDIS_URL: redis://redis-cache:6379
    expose:
      - "8000"
    depends_on:
      database:
        condition: service_healthy
    networks:
      - edge-net
      - db-net

  database:
    image: postgres:16-alpine
    container_name: siakad-app-db
    restart: unless-stopped
    environment:
      POSTGRES_DB: ${DB_NAME:-app_db}
      POSTGRES_USER: ${DB_USER:-app_user}
      POSTGRES_PASSWORD: ${DB_PASSWORD}
    volumes:
      - db-data:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U ${DB_USER:-app_user} -d ${DB_NAME:-app_db}"]
      interval: 10s
      timeout: 5s
      retries: 5
    networks:
      - db-net

  redis-cache:
    image: redis:7.4-alpine
    container_name: siakad-app-redis
    restart: unless-stopped
    command: redis-server --save 60 1 --loglevel warning --requirepass ${REDIS_PASSWORD}
    volumes:
      - redis-data:/data
    networks:
      - db-net

  uptime-kuma:
    image: louislam/uptime-kuma:1
    container_name: siakad-app-monitoring
    restart: unless-stopped
    ports:
      - "127.0.0.1:3001:3001"
    volumes:
      - kuma-data:/app/data
    networks:
      - edge-net

networks:
  edge-net:
    driver: bridge
  db-net:
    driver: bridge
    internal: true

volumes:
  db-data:
  redis-data:
  kuma-data: