Write-Up Proxmox Setup

📖 Write-Up: Instalasi dan Konfigurasi Infrastruktur 3-Tier di Proxmox VE

A. Persiapan Lingkungan Host (Proxmox)

Infrastruktur ini dibangun menggunakan Nested Virtualization, di mana Proxmox VE diinstal sebagai Guest (Tamu) di dalam software virtualisasi (seperti VMware/VirtualBox) yang berjalan di laptop fisik.

  1. Instalasi Proxmox: Proxmox VE diinstal ke dalam Virtual Machine (VM) baru di VMware/VirtualBox.

  2. Konfigurasi Jaringan (NAT):

    • Pengaturan jaringan VM Proxmox diatur ke mode NAT.

    • Mode NAT menciptakan jaringan internal virtual (10.0.2.x) yang terisolasi dari jaringan fisik laptop (Hotspot HP).

    • VM Proxmox (Host) mendapatkan IP 10.0.2.15 (atau IP lain di 10.0.2.x dari server DHCP VMware/VirtualBox).

  3. Upload Template CT: Template CT Debian 12 Standard diunduh secara manual dan di-upload ke Proxmox (ke local (pve) -> CT Templates) untuk digunakan sebagai sistem operasi dasar bagi semua container.

B. Pembuatan Infrastruktur Container (CT)

Tiga container (CT) dibuat menggunakan template Debian 12 dengan konfigurasi IP statis untuk membentuk arsitektur 3-lapis (3-Tier).

HostnamePeranIP StatisGatewayDNS
dns-serverDNS (Bind9)10.0.2.3010.0.2.18.8.8.8
web-serverWeb/App (Flask)10.0.2.3510.0.2.110.0.2.30
db-serverDatabase (MariaDB)10.0.2.4010.0.2.110.0.2.30

Catatan: Gateway NAT (10.0.2.1 atau 10.0.2.2) adalah alamat default yang disediakan oleh VMware/VirtualBox.


C. Konfigurasi per Container (CT)

Setiap container dikonfigurasi untuk peran spesifiknya.

1. CT db-server (Konfigurasi Database)

  1. Instalasi: apt update && apt install mariadb-server

  2. Pengamanan: Skrip mysql_secure_installation dijalankan untuk mengatur password root database dan mengamankan instalasi.

  3. Konfigurasi Jaringan: File /etc/mysql/mariadb.conf.d/50-server.cnf diedit untuk mengubah bind-address dari 127.0.0.1 menjadi IP server database (10.0.2.40), sehingga mengizinkan koneksi dari jaringan.

  4. Restart Layanan: systemctl restart mariadb

  5. Pembuatan Database & User: User khusus (proyek_user) dibuat dan hanya diizinkan terhubung dari IP web-server (10.0.2.35) untuk keamanan.

    SQL
    CREATE DATABASE proyek_db;
    CREATE USER 'proyek_user'@'10.0.2.35' IDENTIFIED BY 'PasswordKuatAnda123!';
    GRANT ALL PRIVILEGES ON proyek_db.* TO 'proyek_user'@'10.0.2.35';
    FLUSH PRIVILEGES;
    
  6. Pembuatan Tabel: Tabel users dan posts dibuat di dalam proyek_db.

2. CT dns-server (Konfigurasi DNS)

  1. Instalasi: apt update && apt install bind9

  2. Konfigurasi Zona: File /etc/bind/named.conf.local diedit untuk mendaftarkan domain lokal baru proyek.local.

    Ini, TOML
    zone "proyek.local" {
        type master;
        file "/etc/bind/db.proyek.local";
    };
    
  3. Konfigurasi File Zona (Record): File baru /etc/bind/db.proyek.local dibuat untuk memetakan nama domain ke alamat IP.

    Ini, TOML
    $TTL    604800
    @       IN      SOA     proyek.local. root.proyek.local. ( ... )
    ;
    @       IN      NS      dns.proyek.local.
    
    ; Pemetaan Alamat IP
    @       IN      A       10.0.2.35   ; (proyek.local -> web-server)
    dns     IN      A       10.0.2.30   ; (dns.proyek.local -> dns-server)
    web     IN      A       10.0.2.35   ; (web.proyek.local -> web-server)
    db      IN      A       10.0.2.40   ; (db.proyek.local -> db-server)
    
  4. Restart Layanan: systemctl restart bind9

3. CT web-server (Konfigurasi Aplikasi Web)

  1. Instalasi: Paket yang diperlukan untuk aplikasi web diinstal.

    Bash
    apt update
    apt install -y nginx python3-flask python3-pymysql gunicorn
    apt install -y python3-flask-login python3-flask-bcrypt
    
  2. Aplikasi Flask:

    • File aplikasi (app.py) dibuat di /opt/proyek-flask/. File ini berisi semua logika Flask, rute (routes), koneksi ke database db-server (menggunakan PyMySQL), dan sistem otentikasi (menggunakan Flask-Login dan Flask-Bcrypt).

    • Direktori templates/ dibuat (/opt/proyek-flask/templates/) untuk menyimpan semua file HTML (seperti layout.html, index.html, login.html, dll.).

  3. Konfigurasi Gunicorn (Layanan): Sebuah service systemd dibuat agar Gunicorn (penerjemah Python) berjalan otomatis.

    • File nano /etc/systemd/system/flask-app.service dibuat:

    Ini, TOML
    [Unit]
    Description=Gunicorn instance to serve proyek-flask
    After=network.target
    
    [Service]
    User=root
    WorkingDirectory=/opt/proyek-flask
    ExecStart=/usr/bin/gunicorn --workers 3 --bind 127.0.0.1:5000 app:app
    
    [Install]
    WantedBy=multi-user.target
    
    • Layanan diaktifkan: systemctl daemon-reload && systemctl enable --now flask-app

  4. Konfigurasi Nginx (Reverse Proxy): Nginx dikonfigurasi sebagai reverse proxy untuk meneruskan permintaan dari port 80 ke Gunicorn (port 5000).

    • File /etc/nginx/sites-available/default diedit:

    Nginx
    location / {
        proxy_pass http://127.0.0.1:5000;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
    }
    
    • Layanan di-restart: systemctl restart nginx


D. Konfigurasi Klien (Jalan Pintas NAT)

Karena semua server berada di jaringan NAT (10.0.2.x) yang tidak bisa diakses langsung dari laptop, dua "trik" digunakan:

  1. Port Forwarding (VMware/VirtualBox): Sebuah aturan "terowongan" dibuat di pengaturan VM Proxmox (mode NAT) untuk meneruskan permintaan HTTP dari laptop ke web-server.

    • Host Port (Laptop): 80

    • Guest IP (CT Web): 10.0.2.35

    • Guest Port (Nginx): 80

  2. Edit File hosts (Laptop Axioo): File hosts di laptop diedit (C:\Windows\System32\drivers\etc\hosts) untuk "memaksa" domain proyek.local agar menunjuk ke laptop itu sendiri (127.0.0.1), yang kemudian akan ditangkap oleh port forwarding.

    127.0.0.1       proyek.local
    

Dengan konfigurasi ini, mengetik http://proyek.local di browser laptop berhasil memuat aplikasi Flask yang berjalan di dalam container di Proxmox.

Komentar

  1. terimakasih tutornya, sangat bermanfaat bagi saya yg masih pemula

    BalasHapus
  2. Balasan
    1. iyaa kalo pake bridge adapter dia beda jalan di awal saja

      Hapus

Posting Komentar

Postingan populer dari blog ini

Apa itu SIEM?

python