Lewati ke konten utama

Visual Composer Docker, Nginx & Linux Stack

Rancang arsitektur server produksi modular (Lego Builder): pilih Nginx/Cloudflare, Frontend, Backend, DB & Redis. Hasilkan topologi SVG, docker-compose.yml, dan UFW hardening otomatis.

Parameter Input

Coba Contoh:
165535

Hasil Perhitungan

Nama Proyek Stack
kampus-app
Domain Target Produksi
app.example.com
Jumlah Kontainer Aktif
7 Kontainer
Estimasi Penggunaan Memori RAM
1872 MB
Rekomendasi Spesifikasi VPS
4 vCPU / 4 GB RAM
Postur Keamanan & Isolasi
ZERO-TRUST TUNNEL (0 Port Web Terbuka di IP Publik + DB Terisolasi)
Ingin membandingkan 2 opsi desain (misal: RAIDZ1 vs RAIDZ2, atau Cat6 vs Cat5e)?
🐳Buka Studio Visual Lego Stack Composer Penuh
Susun kontainer secara visual dengan diagram topologi jaringan SVG interaktif dan unduh diagram arsitektur PNG HD.
Buka Studio Lego šŸš€
⚔ Standar Hardening & Operasional Produksi
Debian 12 / Ubuntu 24.04 LTS + Nftables + Systemd Timer
CIS Benchmark Level 1 • Non-Root SSH Key-Only + Fail2ban/CrowdSec

Uji aturan firewall dan skrip cron pada lingkungan staging terlebih dahulu, dan simpan backup konfigurasi di Git.

Tabel Arsitektur Layanan & Port Kontainer
Nama Layanan KontainerPeran LayananDocker Image BasePort Internal KontainerEksposur Port Publik WANEstimasi RAM
nginx-proxyEdge Reverse Proxy & SSL Terminationnginx:1.27-alpine80, 443127.0.0.1:8080 (Local/Tunnel)96 MB
cloudflaredZero-Trust Outbound Tunnel (Zero Open Inbound Port)cloudflare/cloudflared:latestOutbound QUIC/HTTP2TERTUTUP (0 Port Terbuka di IP Publik VPS)80 MB
frontendNext.js SSR Frontendnode:20-alpine3000/tcpInternal Only (stack-net)384 MB
backend-apiLaravel PHP 8.3 (Octane/FrankenPHP)dunglas/frankenphp:1-php8.3-alpine8000/tcpInternal Only (stack-net)512 MB
databasePostgreSQL 16 Relational DBpostgres:16-alpine5432/tcpTerisolasi penuh di db-net (Tanpa Port Publik)512 MB
redis-cacheRedis 7 In-Memory Cache & Session Storeredis:7.4-alpine6379/tcpTerisolasi penuh di db-net128 MB
uptime-kumaUptime Kuma Status & Health Monitorlouislam/uptime-kuma:13001/tcp127.0.0.1:3001 (Internal/Tunnel)160 MB
Ringkasan Daftar Kebutuhan Material (Siap Salin)
# =====================================================================
# Generated by InfraCalc Visual Stack Composer (https://infracalc.web.id)
# Project : kampus-app (app.example.com)
# Topology: BOTH_NGINX_AND_CF -> frontend + backend-api -> POSTGRES_16 + redis
# =====================================================================
name: kampus-app

services:
  nginx-proxy:
    image: nginx:1.27-alpine
    container_name: kampus-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: kampus-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: kampus-app-frontend
    restart: unless-stopped
    working_dir: /app
    environment:
      NODE_ENV: production
      NEXT_PUBLIC_API_URL: https://app.example.com/api
    expose:
      - "3000"
    networks:
      - edge-net

  backend-api:
    image: dunglas/frankenphp:1-php8.3-alpine
    container_name: kampus-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: kampus-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: kampus-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: kampus-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:
Konfigurasi Nginx Reverse Proxy (nginx.conf)
# =====================================================================
# Nginx Reverse Proxy Configuration — Generated via https://infracalc.web.id
# Domain: app.example.com
# =====================================================================
upstream frontend_upstream {
    server frontend:3000;
    keepalive 32;
}

upstream backend_upstream {
    server backend-api:8000;
    keepalive 32;
}

server {
    listen 80;
    server_name app.example.com;

    # Security Headers
    add_header X-Frame-Options "SAMEORIGIN" always;
    add_header X-Content-Type-Options "nosniff" always;
    add_header Referrer-Policy "strict-origin-when-cross-origin" always;
    client_max_body_size 25M;

    # Backend API Route (/api/* -> backend-api:8000)
    location /api/ {
        proxy_pass http://backend_upstream;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
    }

    # Root Route (-> frontend:3000)
    location / {
        proxy_pass http://frontend_upstream;
        proxy_http_version 1.1;
        proxy_set_header Upgrade $http_upgrade;
        proxy_set_header Connection "upgrade";
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
}
Linux Script
#!/usr/bin/env bash
# =====================================================================
# Ubuntu/Debian VPS & Docker Firewall Hardening Script
# Generated via https://infracalc.web.id
# =====================================================================
set -euo pipefail

echo "[1/4] Configuring UFW Default Policies..."
sudo ufw default deny incoming
sudo ufw default allow outgoing

echo "[2/4] Allowing SSH Port (22/tcp)..."
sudo ufw allow 22/tcp comment 'SSH Management'
echo "[3/4] Zero-Trust Cloudflare Tunnel Active: Blocking public HTTP/HTTPS direct ports..."
# No inbound 80/443 needed on public VPS IP when using cloudflared!

echo "[4/4] Enabling UFW & Verifying Database Isolation (db-net internal: true)..."
sudo ufw --force enable
sudo ufw status verbose
Template Variabel Lingkungan (.env.example)
# .env.example — Copy to .env before running 'docker compose up -d'
DB_NAME=kampus_app_db
DB_USER=kampus_app_user
DB_PASSWORD=ChangeMe_StrongPassword_2026!
DB_ROOT_PASSWORD=ChangeMe_RootSecret_2026!
REDIS_PASSWORD=ChangeMe_RedisSecret_2026!
CLOUDFLARE_TUNNEL_TOKEN=eyJhIjoi...paste_your_tunnel_token_here
Bagikan ke WhatsApp

Cara Menggunakan Alat Ini

  1. Tentukan identitas proyek, domain produksi, serta port SSH kustom yang digunakan pada VPS Linux Anda.
  2. Pilih komponen arsitektur pada 4 lapisan: Edge Ingress, Frontend UI, Backend API, serta Database dan Add-ons (Redis / Uptime Kuma).
  3. Periksa diagram topologi jaringan visual SVG, lalu salin atau unduh berkas docker-compose.yml, nginx.conf, dan setup-firewall.sh untuk dieksekusi di server.

Contoh Perhitungan Nyata: Siakad Kampus (Full-Stack Next.js + Laravel + Postgres + Redis)

Contoh arsitektur: Proyek 'siakad-kampus' dengan domain 'siakad.univ.ac.id' menggunakan Hybrid Nginx + Cloudflare Tunnel, Next.js SSR (:3000), Laravel Octane (:8000), PostgreSQL 16 (:5432), Redis 7 (:6379), dan Uptime Kuma (:3001) mengaktifkan 7 kontainer dengan estimasi RAM 2.1 GB pada VPS 4 GB / 2 vCPU.

Input Contoh
Nama Proyek (Slug)
Siakad Kampus
Domain Produksi
siakad.univ.ac.id
Lapisan Edge & Ingress Proxy
Hybrid Nginx + Cloudflare Tunnel (Double Protection)
Lapisan Frontend UI / Web App
Next.js SSR Frontend (Node 20, Port 3000)
Lapisan Backend API Engine
Laravel PHP 8.3 Octane / FrankenPHP (Port 8000)
Lapisan Basis Data (Terisolasi)
PostgreSQL 16 Relational DB (Port 5432 Internal)
Aktifkan Redis 7.4 In-Memory Cache (:6379)
Ya / Aktif
Aktifkan Uptime Kuma Health Monitoring (:3001)
Ya / Aktif
Port SSH VPS untuk Firewall UFW
2.222
Output Terhitung
Nama Proyek Stack
siakad-kampus
Domain Target Produksi
siakad.univ.ac.id
Jumlah Kontainer Aktif
7 Kontainer
Estimasi Penggunaan Memori RAM
1872 MB
Rekomendasi Spesifikasi VPS
4 vCPU / 4 GB RAM
Postur Keamanan & Isolasi
ZERO-TRUST TUNNEL (0 Port Web Terbuka di IP Publik + DB Terisolasi)
Ringkasan Daftar Kebutuhan Material (Siap Salin)
# ===================================================================== # Generated by InfraCalc Visual Stack Composer (https://infracalc.web.id) # Project : siakad-kampus (siakad.univ.ac.id) # Topology: BOTH_NGINX_AND_CF -> frontend + backend-api -> POSTGRES_16 + redis # ===================================================================== name: siakad-kampus services: nginx-proxy: image: nginx:1.27-alpine container_name: siakad-kampus-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-kampus-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-kampus-frontend restart: unless-stopped working_dir: /app environment: NODE_ENV: production NEXT_PUBLIC_API_URL: https://siakad.univ.ac.id/api expose: - "3000" networks: - edge-net backend-api: image: dunglas/frankenphp:1-php8.3-alpine container_name: siakad-kampus-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-kampus-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-kampus-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-kampus-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:
Konfigurasi Nginx Reverse Proxy (nginx.conf)
# ===================================================================== # Nginx Reverse Proxy Configuration — Generated via https://infracalc.web.id # Domain: siakad.univ.ac.id # ===================================================================== upstream frontend_upstream { server frontend:3000; keepalive 32; } upstream backend_upstream { server backend-api:8000; keepalive 32; } server { listen 80; server_name siakad.univ.ac.id; # Security Headers add_header X-Frame-Options "SAMEORIGIN" always; add_header X-Content-Type-Options "nosniff" always; add_header Referrer-Policy "strict-origin-when-cross-origin" always; client_max_body_size 25M; # Backend API Route (/api/* -> backend-api:8000) location /api/ { proxy_pass http://backend_upstream; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; } # Root Route (-> frontend:3000) location / { proxy_pass http://frontend_upstream; proxy_http_version 1.1; proxy_set_header Upgrade $http_upgrade; proxy_set_header Connection "upgrade"; proxy_set_header Host $host; proxy_set_header X-Real-IP $remote_addr; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; } }
Linux Script
#!/usr/bin/env bash # ===================================================================== # Ubuntu/Debian VPS & Docker Firewall Hardening Script # Generated via https://infracalc.web.id # ===================================================================== set -euo pipefail echo "[1/4] Configuring UFW Default Policies..." sudo ufw default deny incoming sudo ufw default allow outgoing echo "[2/4] Allowing SSH Port (2222/tcp)..." sudo ufw allow 2222/tcp comment 'SSH Management' echo "[3/4] Zero-Trust Cloudflare Tunnel Active: Blocking public HTTP/HTTPS direct ports..." # No inbound 80/443 needed on public VPS IP when using cloudflared! echo "[4/4] Enabling UFW & Verifying Database Isolation (db-net internal: true)..." sudo ufw --force enable sudo ufw status verbose
Template Variabel Lingkungan (.env.example)
# .env.example — Copy to .env before running 'docker compose up -d' DB_NAME=siakad_kampus_db DB_USER=siakad_kampus_user DB_PASSWORD=ChangeMe_StrongPassword_2026! DB_ROOT_PASSWORD=ChangeMe_RootSecret_2026! REDIS_PASSWORD=ChangeMe_RedisSecret_2026! CLOUDFLARE_TUNNEL_TOKEN=eyJhIjoi...paste_your_tunnel_token_here
Tabel Arsitektur Layanan & Port Kontainer
Nama Layanan KontainerPeran LayananDocker Image BasePort Internal KontainerEksposur Port Publik WANEstimasi RAM
nginx-proxyEdge Reverse Proxy & SSL Terminationnginx:1.27-alpine80, 443127.0.0.1:8080 (Local/Tunnel)96 MB
cloudflaredZero-Trust Outbound Tunnel (Zero Open Inbound Port)cloudflare/cloudflared:latestOutbound QUIC/HTTP2TERTUTUP (0 Port Terbuka di IP Publik VPS)80 MB
frontendNext.js SSR Frontendnode:20-alpine3000/tcpInternal Only (stack-net)384 MB
backend-apiLaravel PHP 8.3 (Octane/FrankenPHP)dunglas/frankenphp:1-php8.3-alpine8000/tcpInternal Only (stack-net)512 MB
databasePostgreSQL 16 Relational DBpostgres:16-alpine5432/tcpTerisolasi penuh di db-net (Tanpa Port Publik)512 MB
redis-cacheRedis 7 In-Memory Cache & Session Storeredis:7.4-alpine6379/tcpTerisolasi penuh di db-net128 MB
uptime-kumaUptime Kuma Status & Health Monitorlouislam/uptime-kuma:13001/tcp127.0.0.1:3001 (Internal/Tunnel)160 MB

Konsep Dasar & Catatan Teknis

Penyusunan arsitektur server produksi berbasis kontainer Docker dan reverse proxy Nginx sering kali menjadi tantangan utama bagi teknisi DevOps, pengembang web full-stack, serta mahasiswa ilmu komputer. Kesalahan konfigurasi yang sering terjadi meliputi pembukaan port database langsung ke antarmuka WAN publik, ketiadaan isolasi jaringan bridge internal antar kontainer, serta skema alokasi memori RAM yang tidak realistis sehingga memicu pemutusan proses oleh Linux OOM (Out Of Memory) Killer saat beban trafik melonjak. InfraStack Visual Composer hadir sebagai simulator dan generator arsitektur kontainer visual interaktif. Dengan pendekatan modular layaknya menyusun balok lego, pengguna dapat menentukan lapisan Edge Ingress (Nginx Reverse Proxy dengan terminasi SSL, Cloudflare Zero-Trust Outbound Tunnel, atau konfigurasi hybrid berkinerja tinggi), lapisan Frontend Web UI (Next.js SSR, React/Vue static SPA, atau arsitektur murni API), lapisan Backend Engine (Node.js/NestJS, Laravel Octane dengan FrankenPHP, Go Fiber/Gin yang super cepat, maupun Python FastAPI), serta lapisan Basis Data (PostgreSQL 16, MySQL 8.4 LTS, atau MariaDB 11.4) yang dipadukan dengan Redis 7 cache dan Uptime Kuma monitoring. Salah satu prinsip rekayasa sistem yang paling krusial adalah penerapan Dual Docker Bridge Networks. Layanan database dan redis cache diisolasi secara ketat di dalam jaringan `db-net` dengan atribut `internal: true`, sehingga kontainer tersebut tidak memiliki gateway internet keluar dan tidak mempublikasikan port apa pun ke IP publik VPS host. Sementara itu, lalu lintas klien eksternal hanya dapat memasuki lapisan `edge-net` melalui reverse proxy atau zero-trust tunnel terenkripsi. Seluruh berkas konfigurasi `docker-compose.yml`, `nginx.conf`, script hardening firewall Linux UFW, dan template variabel lingkungan `.env.example` digenerasikan secara otomatis, terintegrasi, dan siap dideploy langsung ke server Ubuntu/Debian.

Cara Perhitungan (Rumus & Langkah)

Pertanyaan yang Sering Diajukan (FAQ)

Mengapa database (PostgreSQL/MySQL) wajib menggunakan network internal tanpa port binding ke host?

Mempublikasikan port 5432 atau 3306 ke host (misal '5432:5432') membuka celah serangan brute-force dan eksploitasi zero-day dari internet publik. Dengan network internal (internal: true), database hanya dapat diakses oleh kontainer backend di dalam VPS yang sama.

Apa keuntungan arsitektur Hybrid Nginx + Cloudflare Zero-Trust Tunnel?

Cloudflare Tunnel menyembunyikan alamat IP publik VPS secara sempurna (0 port inbound terbuka di firewall), sementara Nginx internal tetap mengelola load balancing, kompresi gzip/brotli, dan perutean path mikroservis (/api/*) secara lokal.

Berapa kapasitas RAM VPS minimum yang disarankan untuk menjalankan stack Docker komplit ini?

Untuk stack standar (Nginx + Frontend Next.js + Backend API + Database + Redis), disarankan VPS dengan minimal 2 GB hingga 4 GB RAM serta 2 GB Linux Swap untuk mencegah OOM Killer saat lonjakan trafik.

šŸ”¬ Metodologi Ilmiah & Verifikasi Standar

Analisis Sensitivitas Rekayasa, Kurva Karakteristik & Sitasi Teknis

āœ“ Konstanta Terkalibrasi ISO/IEC/IEEE/TIA

1. Matriks Analisis Sensitivitas & Rentang Toleransi 3-Kondisi (Matriks Toleransi 3 Titik Desain)

Evaluasi perbandingan antara batas teoretis laboratorium (0% rugi-rugi), titik operasional nominal saat ini, dan batas konservatif lapangan (termasuk derating suhu konduktor, penuaan komponen, serta margin keamanan ±15%).

Parameter Terukur Kondisi Ideal Teoretis Titik Kerja Operasional (Nominal) Batas Konservatif (Worst-Case ±15%) Kaidah Koreksi Rekayasa
Jumlah Kontainer Aktif 6,3 7 8,05 Safety Margin Kapasitas (+15% Overhead)
Estimasi Penggunaan Memori RAM 1.685 MB 1.872 MB 2.153 MB Safety Margin Kapasitas (+15% Overhead)

2. Kurva Karakteristik Rekayasa, Fungsi & Titik Operasi (xā‚€, yā‚€)

KURVA RESPON MATEMATIS: JUMLAH KONTAINER AKTIF TERHADAP SSH CUSTOM PORT Ambang Batas Konservatif (+15% Safety Margin) 8,8 13,2 17,6 22 26,4 30,8 35,2 (xā‚€=22, yā‚€=7) Variabel Independen (x): Ssh Custom Port

3. Konstanta Fisika & Klausul Standar Normatif

R_loop(Cat6, 20°C) = 14 Ω/100m ANSI/TIA-568.2-D & IEEE 802.3bt

Resistansi Loop DC Konduktor Tembaga Murni Cat6 (23 AWG)

Clause 6.4.1 / Table 145-1 — Nilai nominal tipikal 23 AWG tembaga murni pada 20°C adalah 14.0 Ī©/100m (batas plafon standar TIA adalah 18.8 Ī©/100m).

α_opt(1490nm) = 0.25 dB/km ITU-T Rec. G.652.D & G.984.2

Koefisien Atenuasi Serat Optik Single-Mode pada 1490 nm

Table 1 / Class B+ & C+ Optical Path — Atenuasi tipikal serat G.652.D pada panjang gelombang downstream 1490 nm adalah 0.22–0.25 dB/km (upstream 1310 nm: 0.35 dB/km).

α_Cu(20°C) = 0.00393 °C⁻¹ IEC 60028

Koefisien Suhu Resistansi Tembaga Murni

International Annealed Copper Standard — Digunakan pada koreksi suhu: R(T) = R_20 Ɨ [1 + 0.00393 Ɨ (T - 20)].

4. Kutipan Referensi Teknis & Akademik Independen (IEEE / APA 7th / BibTeX / LaTeX)

Gunakan format sitasi standar di bawah ini untuk melampirkan metodologi perhitungan ke dalam dokumen spesifikasi teknis, laporan audit, karya ilmiah, atau jurnal rekayasa.

Format IEEE & APA 7th Edition

[IEEE] InfraCalc Engineering Team, "Visual Composer Docker, Nginx & Linux Stack — Instrumen Komputasi & Verifikasi Standar Teknis," InfraCalc Technical Suite, 2026. [Online]. Tersedia: https://infracalc.web.id/id/tools/docker-nginx-stack-composer. [Diakses: 2026-11-08].

[APA 7th] InfraCalc Engineering Team. (2026). Visual Composer Docker, Nginx & Linux Stack (Rilis Produksi 2026-11-08) [Perangkat lunak komputasi teknik]. InfraCalc. https://infracalc.web.id/id/tools/docker-nginx-stack-composer

BibTeX & LaTeX Derivation Snippet
@software{infracalc_docker_nginx_stack_composer_2026,
  author = {{InfraCalc Engineering Team}},
  title = {{Visual Composer Docker, Nginx & Linux Stack --- InfraCalc Engineering Suite}},
  year = {2026},
  publisher = {InfraCalc.web.id},
  url = {https://infracalc.web.id/id/tools/docker-nginx-stack-composer},
  urldate = {2026-11-08}
}

% LaTeX Engineering Derivation — Generated via https://infracalc.web.id/id/tools/docker-nginx-stack-composer
\begin{equation}
  \text{Model: } Total Alokasi RAM (MB) = Σ(RAM Ingress + RAM Frontend + RAM Backend + RAM Database + RAM Addons)
\end{equation}
% Parameter Input Terukur: projectName = kampus-app, \; domainName = app.example.com, \; edgeIngress = BOTH_NGINX_AND_CF, \; frontendStack = NEXTJS_NODE
% Hasil Evaluasi Numerik : stackName = \mathbf{kampus-app}, \; targetDomain = \mathbf{app.example.com}, \; totalContainersCount = \mathbf{7}