Panduan ini menjelaskan cara membangun web server rumahan menggunakan PC bekas, Proxmox VE sebagai platform virtualisasi, CasaOS sebagai sistem operasi container, dan Cloudflare Tunnel untuk akses publik tanpa mengekspos IP.
- Arsitektur Sistem
- Prasyarat
- Bagian 1 — Install Proxmox VE
- Bagian 2 — Setup LXC Container dan CasaOS
- Bagian 3 — Cloudflare Tunnel
- Bagian 4 — Nginx Proxy Manager
- Bagian 5 — Nginx Web Server dan Deploy Website
- Bagian 6 — SSL dan HTTPS
- Referensi Port
- Troubleshooting
Internet
|
| (HTTPS)
v
Cloudflare CDN + Tunnel
|
| (HTTP via Tunnel — IP tidak terekspos)
v
Proxmox VE (PC Bekas)
|
v
LXC Container
├── CasaOS / Docker
├── Cloudflared (Tunnel Client)
├── Nginx Proxy Manager (:8080 / :81)
└── Nginx Web Server (:8081)
├── /var/www/domain/ → domain.com
└── /var/www/subdomain/ → sub.domain.com
Sebelum memulai, pastikan hal-hal berikut telah tersedia:
- Flash drive minimal 8 GB untuk instalasi Proxmox
- Kabel LAN untuk koneksi server yang stabil
- PC atau laptop terpisah untuk mengakses dashboard melalui browser
- Domain aktif yang dikelola di Cloudflare
- Akun Cloudflare (gratis) — daftar di sini
- Software Rufus (Windows) atau Balena Etcher untuk membuat flash drive bootable
- Software FileZilla untuk mengunggah file melalui SFTP
Kunjungi proxmox.com/downloads dan unduh Proxmox VE ISO Installer versi terbaru.
- Buka Rufus dan pilih flash drive yang akan digunakan
- Pilih file ISO Proxmox yang telah diunduh
- Klik Start dan tunggu proses selesai
- Colokkan flash drive ke server dan nyalakan
- Masuk ke BIOS (tekan F2, F12, atau Del), atur urutan boot agar USB menjadi prioritas pertama
- Pilih Install Proxmox VE (Graphical)
- Ikuti wizard instalasi:
- Target disk: pilih HDD atau SSD server
- Country: Indonesia | Timezone: Asia/Jakarta
- Password root: buat kata sandi yang kuat dan simpan dengan baik
- IP Address: tetapkan IP statis, contoh
192.168.1.100
- Klik Install dan tunggu proses selesai
- Cabut flash drive, server akan restart secara otomatis
Buka browser di perangkat lain dan akses:
https://[IP-SERVER]:8006
Username : root
Password : (kata sandi yang dibuat saat instalasi)
Realm : Linux PAM standard authentication
Browser akan menampilkan peringatan sertifikat. Klik Advanced lalu Proceed untuk melanjutkan. Ini normal karena Proxmox menggunakan self-signed certificate.
Buka Shell di Proxmox (klik nama node, lalu Shell) dan jalankan perintah berikut:
# Perbarui daftar template yang tersedia
pveam update
# Periksa versi Debian yang tersedia
pveam available --section system | grep debian
# Unduh template (sesuaikan nama dengan hasil perintah di atas)
pveam download local debian-12-standard_12.12-1_amd64.tar.zstpct create 100 local:vztmpl/debian-12-standard_12.12-1_amd64.tar.zst \
--hostname namaserver \
--cores 2 \
--memory 2048 \
--swap 512 \
--rootfs local-lvm:500 \
--net0 name=eth0,bridge=vmbr0,ip=dhcp \
--ostype debian \
--unprivileged 0 \
--features nesting=1,keyctl=1 \
--password \
--start 1Masukkan kata sandi root container saat diminta.
Keterangan parameter penting:
| Parameter | Keterangan |
|---|---|
--unprivileged 0 |
Wajib agar Docker dapat berjalan di dalam LXC |
--features nesting=1 |
Mengizinkan Docker berjalan di dalam container |
--features keyctl=1 |
Dibutuhkan oleh beberapa operasi Docker |
# Masuk ke container dari Proxmox Shell
pct enter 100
# Perbarui sistem
apt update && apt upgrade -y
# Instal curl
apt install -y curl
# Instal CasaOS
curl -fsSL https://get.casaos.io | bashTunggu hingga proses instalasi selesai. Instalasi berhasil apabila muncul pesan berikut:
CasaOS vX.X.X is running at:
http://[IP-CONTAINER]
Periksa IP container terlebih dahulu:
ip a | grep inetKemudian buka browser dan akses http://[IP-CONTAINER]. Buat akun administrator pada saat pertama kali membuka CasaOS.
Cloudflare Tunnel memungkinkan server lokal diakses dari internet tanpa perlu membuka port di router dan tanpa mengekspos IP publik.
- Buka App Store di CasaOS
- Cari
cloudflare - Instal Cloudflared dengan developer Developer (bukan versi dari BigBearCasaOS)
- Login ke dash.cloudflare.com
- Pilih domain yang akan digunakan
- Klik Zero Trust di sidebar kiri
- Buka Networks → Tunnels
- Klik + Create a tunnel
- Pilih Cloudflared, beri nama tunnel, lalu klik Save tunnel
- Pilih Docker pada halaman konfigurasi
- Salin token yang panjang (bagian setelah
--token)
- Buka aplikasi Cloudflared di CasaOS
- Tempelkan token pada field Enter Tunnel Connector Token
- Klik Run atau Start
- Kembali ke Cloudflare Dashboard → Tunnels — status harus menunjukkan HEALTHY
- Klik tunnel yang telah dibuat
- Buka tab Published application routes
- Klik + Add a published application route
- Isi form:
- Subdomain: kosongkan
- Domain: domain yang digunakan
- Path: kosongkan
- Type: HTTP
- URL:
[IP-CONTAINER]:8080
- Simpan — Cloudflare akan membuat DNS record secara otomatis
- Buka App Store di CasaOS
- Cari Nginx Proxy Manager
- Pada dialog konfigurasi, ubah Host port 80 menjadi 8080 karena port 80 telah digunakan oleh CasaOS
- Klik Install
Konfigurasi port yang digunakan:
| Host Port | Container Port | Fungsi |
|---|---|---|
| 8080 | 80 | Traffic web |
| 443 | 443 | HTTPS |
| 81 | 81 | Admin panel |
URL : http://[IP-CONTAINER]:81
Email : admin@example.com
Password : changeme
Segera ubah email dan kata sandi setelah login pertama.
- Klik Hosts → Proxy Hosts
- Klik Add Proxy Host
- Isi form:
- Domain Names: domain yang digunakan (tekan Enter setelah mengetik)
- Scheme: http
- Forward Hostname/IP: IP container
- Forward Port: 8081
- Centang Block Common Exploits
- Klik Save
Buka console container di Proxmox dan jalankan:
# Instal Nginx
apt install -y nginx
# Ubah port Nginx ke 8081 karena port 80 digunakan oleh Docker
sed -i 's/listen 80 default_server/listen 8081 default_server/' /etc/nginx/sites-available/default
sed -i 's/listen \[::\]:80 default_server/listen [::]:8081 default_server/' /etc/nginx/sites-available/default
# Terapkan perubahan
systemctl restart nginx
# Verifikasi
curl localhost:8081# Buat folder website
mkdir -p /var/www/namadomain
chown -R www-data:www-data /var/www/namadomain
chmod -R 755 /var/www/namadomain
# Buat file konfigurasi Nginx
nano /etc/nginx/sites-available/namadomainIsi file konfigurasi:
server {
listen 8081;
server_name namadomain.com;
root /var/www/namadomain;
index index.html index.htm;
location / {
try_files $uri $uri/ =404;
}
}# Aktifkan konfigurasi
ln -s /etc/nginx/sites-available/namadomain /etc/nginx/sites-enabled/
# Uji konfigurasi dan terapkan
nginx -t && systemctl reload nginxAktifkan SSH di container:
apt install -y openssh-server
sed -i 's/#PermitRootLogin prohibit-password/PermitRootLogin yes/' /etc/ssh/sshd_config
systemctl restart sshSambungkan FileZilla dengan konfigurasi berikut:
| Field | Nilai |
|---|---|
| Host | sftp://[IP-CONTAINER] |
| Username | root |
| Password | kata sandi container |
| Port | 22 |
Setelah terhubung, navigasikan ke /var/www/namadomain/ di panel kanan, lalu seret dan lepas file website dari panel kiri.
Untuk setiap subdomain atau proyek baru:
# 1. Buat folder dan konfigurasi Nginx
mkdir -p /var/www/subdomain
chown -R www-data:www-data /var/www/subdomain
nano /etc/nginx/sites-available/subdomain
# Isi konfigurasi seperti pada langkah 5.2
ln -s /etc/nginx/sites-available/subdomain /etc/nginx/sites-enabled/
nginx -t && systemctl reload nginxKemudian:
- Tambahkan CNAME record di Cloudflare DNS: Name subdomain, Target domain utama
- Tambahkan Proxy Host baru di NPM:
subdomain.domain.com→ port 8081 - Unggah file ke
/var/www/subdomain/melalui FileZilla
Langkah ini wajib dilakukan sebelum mengaktifkan SSL di NPM untuk mencegah redirect loop.
- Buka Cloudflare → pilih domain → SSL/TLS
- Klik Configure
- Ubah encryption mode menjadi Full
| Mode | Keterangan | Status |
|---|---|---|
| Flexible | Menyebabkan redirect loop dengan NPM | Tidak digunakan |
| Full | Sesuai untuk konfigurasi ini | Gunakan ini |
| Full Strict | Membutuhkan sertifikat valid di server origin | Tidak digunakan |
- Di NPM, klik ikon titik tiga di samping domain → Edit
- Buka tab SSL
- Pilih Request a new SSL Certificate pada dropdown
- Masukkan alamat email yang valid
- Centang I Agree to the Let's Encrypt Terms of Service
- Klik Save dan tunggu 10–30 detik
Sertifikat dari Let's Encrypt bersifat gratis dan berlaku 90 hari. NPM akan memperbarui sertifikat secara otomatis sebelum kedaluwarsa.
| Layanan | URL / Port | Keterangan |
|---|---|---|
| Proxmox Dashboard | https://[IP-SERVER]:8006 |
Panel administrasi virtualisasi |
| CasaOS Dashboard | http://[IP-CONTAINER] |
Antarmuka home server |
| NPM Admin Panel | http://[IP-CONTAINER]:81 |
Nginx Proxy Manager |
| Traffic via NPM | http://[IP-CONTAINER]:8080 |
Port yang dituju tunnel |
| Nginx Web Server | http://[IP-CONTAINER]:8081 |
Web server langsung |
| SFTP | sftp://[IP-CONTAINER]:22 |
Pengunggahan file |
| Masalah | Solusi |
|---|---|
| Error 400 saat unduh template | Jalankan pveam available | grep debian untuk memastikan nama file yang tepat |
| Website tidak dapat diakses dari internet | Periksa status tunnel di Cloudflare (harus HEALTHY) dan pastikan route sudah ditambahkan |
| CSS atau JS tidak terbaca (404) | Buka DevTools (F12) → tab Network, periksa path yang gagal dan sesuaikan struktur folder |
| ERR_TOO_MANY_REDIRECTS | Ubah mode SSL Cloudflare menjadi Full, nonaktifkan Force SSL di NPM |
| Authentication failed di FileZilla | Aktifkan root login SSH: sed -i 's/#PermitRootLogin.*/PermitRootLogin yes/' /etc/ssh/sshd_config && systemctl restart ssh |
| Port 80 konflik saat instalasi NPM | Ubah Host port dari 80 menjadi 8080 pada konfigurasi container NPM |
| Tunnel HEALTHY namun website menampilkan 502 | Periksa status Nginx dengan systemctl status nginx dan verifikasi konfigurasi Proxy Host di NPM |