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.
Instalasi Proxmox: Proxmox VE diinstal ke dalam Virtual Machine (VM) baru di VMware/VirtualBox.
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 di10.0.2.xdari server DHCP VMware/VirtualBox).
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).
| Hostname | Peran | IP Statis | Gateway | DNS |
dns-server | DNS (Bind9) | 10.0.2.30 | 10.0.2.1 | 8.8.8.8 |
web-server | Web/App (Flask) | 10.0.2.35 | 10.0.2.1 | 10.0.2.30 |
db-server | Database (MariaDB) | 10.0.2.40 | 10.0.2.1 | 10.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)
Instalasi:
apt update && apt install mariadb-serverPengamanan: Skrip
mysql_secure_installationdijalankan untuk mengatur passwordrootdatabase dan mengamankan instalasi.Konfigurasi Jaringan: File
/etc/mysql/mariadb.conf.d/50-server.cnfdiedit untuk mengubahbind-addressdari127.0.0.1menjadi IP server database (10.0.2.40), sehingga mengizinkan koneksi dari jaringan.Restart Layanan:
systemctl restart mariadbPembuatan Database & User: User khusus (
proyek_user) dibuat dan hanya diizinkan terhubung dari IPweb-server(10.0.2.35) untuk keamanan.SQLCREATE 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;Pembuatan Tabel: Tabel
usersdanpostsdibuat di dalamproyek_db.
2. CT dns-server (Konfigurasi DNS)
Instalasi:
apt update && apt install bind9Konfigurasi Zona: File
/etc/bind/named.conf.localdiedit untuk mendaftarkan domain lokal baruproyek.local.Ini, TOMLzone "proyek.local" { type master; file "/etc/bind/db.proyek.local"; };Konfigurasi File Zona (Record): File baru
/etc/bind/db.proyek.localdibuat 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)Restart Layanan:
systemctl restart bind9
3. CT web-server (Konfigurasi Aplikasi Web)
Instalasi: Paket yang diperlukan untuk aplikasi web diinstal.
Bashapt update apt install -y nginx python3-flask python3-pymysql gunicorn apt install -y python3-flask-login python3-flask-bcryptAplikasi Flask:
File aplikasi (
app.py) dibuat di/opt/proyek-flask/. File ini berisi semua logika Flask, rute (routes), koneksi ke databasedb-server(menggunakanPyMySQL), dan sistem otentikasi (menggunakanFlask-LogindanFlask-Bcrypt).Direktori
templates/dibuat (/opt/proyek-flask/templates/) untuk menyimpan semua file HTML (sepertilayout.html,index.html,login.html, dll.).
Konfigurasi Gunicorn (Layanan): Sebuah service
systemddibuat agar Gunicorn (penerjemah Python) berjalan otomatis.File
nano /etc/systemd/system/flask-app.servicedibuat:
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.targetLayanan diaktifkan:
systemctl daemon-reload && systemctl enable --now flask-app
Konfigurasi Nginx (Reverse Proxy): Nginx dikonfigurasi sebagai reverse proxy untuk meneruskan permintaan dari port 80 ke Gunicorn (port 5000).
File
/etc/nginx/sites-available/defaultdiedit:
Nginxlocation / { 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:
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):
80Guest IP (CT Web):
10.0.2.35Guest Port (Nginx):
80
Edit File
hosts(Laptop Axioo): Filehostsdi laptop diedit (C:\Windows\System32\drivers\etc\hosts) untuk "memaksa" domainproyek.localagar 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.
terimakasih tutornya, sangat bermanfaat bagi saya yg masih pemula
BalasHapussama sama anonim
HapusJadi harus pake NAT yaa
BalasHapus🥰🥰🥰
Hapusiyaa kalo pake bridge adapter dia beda jalan di awal saja
Hapus