CODEKOP DEV LAB
ThinkCentre → Proxmox VE → Ubuntu Server → codekopdev.my.id → SSH aman tanpa port forwarding
|
Perangkat |
Lenovo ThinkCentre, Intel Core i5 Gen 7 T, 4 core, RAM 16 GB |
|---|---|
|
Host |
Proxmox VE |
|
Guest |
Ubuntu Server LTS |
|
Domain |
codekopdev.my.id |
|
Metode akses |
Cloudflare Tunnel; web ke port 80 dan SSH ke port 22 |
Disusun untuk Fauzan Falah oleh ChatGPT Dokumentasi Pribadi • Agustus 2026
π§ Ringkasan Alur
- Membuat flashdisk bootable Proxmox dari Linux Mint.
- Memasang Proxmox VE pada ThinkCentre.
- Mengakses panel Proxmox dan mengunggah ISO Ubuntu.
- Membuat serta memasang Ubuntu Server sebagai virtual machine.
- Menyiapkan Nginx, OpenSSH, dan cloudflared pada Ubuntu.
- Menghubungkan domain codekopdev.my.id ke Cloudflare.
- Membuat Cloudflare Tunnel untuk website.
- Membuat hostname ssh.codekopdev.my.id untuk SSH.
- Memasang cloudflared pada laptop Linux Mint dan melakukan SSH.
ssh ssh.codekopdev.my.id. Port 22 tidak dibuka di router dan alamat IP rumah tidak dipublikasikan.πΊοΈ Topologi
πΎ 1. Membuat USB Bootable Proxmox di Linux Mint
Unduh ISO Proxmox VE dari situs resmi Proxmox. Colok flashdisk minimal 8 GB. Semua data pada flashdisk akan terhapus.
1.1 Identifikasi disk
lsblk
Contoh pada perangkat ini:
sda 7.3G removable ← flashdisk
nvme0n1 476.9G internal ← SSD laptop Linux Mint
/dev/sda, bukan partisinya /dev/sda1 dan bukan SSD laptop /dev/nvme0n1.1.2 Tulis ISO ke flashdisk
sudo umount /dev/sda1
ls ~/Downloads | grep -i proxmox
sudo dd if=~/Downloads/proxmox-ve_NAMA-VERSI.iso of=/dev/sda bs=4M status=progress conv=fsync
sync
sudo eject /dev/sda
Tidak perlu memformat atau mereset flashdisk terlebih dahulu. dd menimpa tabel partisi dan seluruh isi flashdisk.
π₯οΈ 2. Instal Proxmox VE pada ThinkCentre
- Colok flashdisk Proxmox ke ThinkCentre.
- Nyalakan perangkat dan tekan F12 berulang untuk membuka Boot Menu.
- Pilih USB dalam mode UEFI.
- Pilih Install Proxmox VE (Graphical).
- Pilih SSD internal sebagai target. Seluruh isi SSD target akan terhapus.
- Atur negara Indonesia, zona waktu Asia/Jakarta, dan keyboard U.S. English.
- Buat password root dan isi alamat email.
- Atur jaringan menggunakan kabel LAN.
2.1 Contoh jaringan
Hostname : pve.home.local
IP/CIDR : 192.168.1.19/24
Gateway : 192.168.1.1
DNS Server : 192.168.1.1
2.2 Akses panel Proxmox
https://192.168.1.19:8006
Peringatan sertifikat lokal pada browser normal. Pilih Advanced/Proceed, kemudian login:
User : root
Realm : Linux PAM standard authentication
Pass : password instalasi
π 3. Upload ISO Ubuntu dan Buat VM
3.1 Upload ISO
Unduh Ubuntu Server LTS amd64 di laptop, lalu di Proxmox buka:
pve → local (pve) → ISO Images → Upload
ISO disimpan di local (pve). Disk VM umumnya dibuat di local-lvm.
3.2 Buat virtual machine
Klik Create VM dan gunakan konfigurasi awal berikut:
|
Bagian |
Nilai |
Catatan |
|---|---|---|
|
General |
Name: ubuntu-server |
Start at boot dicentang; Add to HA tidak dicentang |
|
OS |
Ubuntu Server ISO |
Guest OS Linux |
|
System |
VirtIO SCSI single |
QEMU Guest Agent dicentang |
|
Disk |
40 GB, SCSI, local-lvm |
Discard dan SSD emulation boleh dicentang |
|
CPU |
1 socket, 2 cores, type host |
Sisakan resource untuk host |
|
Memory |
4096 MB |
Ballooning boleh aktif; minimum 2048 MB |
|
Network |
Bridge vmbr0, model VirtIO |
VM mendapat jaringan LAN |
|
HA: Add to HA hanya berguna pada cluster beberapa node. Untuk satu ThinkCentre, biarkan tidak dicentang. |
||
π§ 4. Instal Ubuntu Server pada VM
- Pilih VM ubuntu-server, klik Start, lalu buka Console.
- Pilih Try or Install Ubuntu Server.
- Gunakan DHCP terlebih dahulu agar instalasi mudah.
- Proxy dikosongkan; mirror dibiarkan default.
- Pilih Use an entire disk. Ini hanya disk virtual VM, bukan SSD Proxmox.
- Buat nama server, username, dan password.
- Centang Install OpenSSH server.
- Selesaikan instalasi dan pilih Reboot Now.
4.1 Contoh profil Ubuntu
Your name : Fauzan
Server name : ubuntu-server
Username : fauzan
Password : gunakan password kuat
Jika installer meminta melepas media instalasi, buka VM → Hardware → CD/DVD Drive → Edit → Do not use any media, lalu reboot.
4.2 Perbarui sistem dan QEMU Agent
sudo apt update
sudo apt upgrade -y
sudo apt install qemu-guest-agent -y
sudo systemctl enable --now qemu-guest-agent
sudo reboot
4.3 Cari IP Ubuntu
hostname -I
ip addr
Contoh IP VM: 192.168.1.20. Tes SSH lokal dari laptop:
ssh [email protected]
π 5. Siapkan Web Server dan SSH di Ubuntu
5.1 Nginx
sudo apt update
sudo apt install nginx -y
sudo systemctl enable --now nginx
curl -I http://localhost
Hasil yang diharapkan mencakup HTTP/1.1 200 OK.
5.2 OpenSSH Server
sudo apt install openssh-server -y
sudo systemctl enable --now ssh
sudo systemctl status ssh
ss -lntp | grep ':22'
βοΈ 6. Hubungkan Domain ke Cloudflare
- Tambahkan codekopdev.my.id ke Cloudflare dan pilih paket Free.
- Salin dua nameserver yang diberikan Cloudflare.
- Di registrar domain, buka menu Nameservers dan ganti nameserver lama dengan dua nameserver Cloudflare.
- Jangan membuat record NS biasa di DNS Management registrar.
- Tunggu status zone menjadi Active.
6.1 Verifikasi nameserver
dig NS codekopdev.my.id +short
Contoh hasil:
camilo.ns.cloudflare.com.
heidi.ns.cloudflare.com.
π 7. Buat Cloudflare Tunnel pada Ubuntu
Di Cloudflare Zero Trust buka Networking/Networks → Tunnels → Create tunnel. Pilih Cloudflared dan beri nama ubuntu-codekopdev.
Cloudflare akan menampilkan perintah instalasi khusus beserta token. Jalankan perintah tersebut langsung di Ubuntu VM. Bentuk akhirnya biasanya:
sudo cloudflared service install TOKEN_RAHASIA_DARI_DASHBOARD
Rahasia: Jangan bagikan token tunnel. Jika token sempat tersebar, rotasi token dari dashboard Cloudflare.
7.1 Cek service tunnel
sudo systemctl status cloudflared
sudo journalctl -u cloudflared -n 100 --no-pager
Status di Ubuntu harus active (running) dan pada dashboard tunnel harus Healthy/Connected.
π 8. Publikasikan Website pada Domain Utama
Di tunnel ubuntu-codekopdev, buka Routes → Add route → Published application.
Hostname/Domain : codekopdev.my.id
Path : *
Service Type : HTTP
Service URL : localhost:80
Cloudflare membuat DNS route Tunnel secara otomatis. Record akhir harus Proxied.
codekopdev.my.id
→ Tunnel ubuntu-codekopdev
→ Proxied
8.1 Tes website
curl -I http://localhost
curl -Iv https://codekopdev.my.id
Jika Universal SSL masih Pending Validation, biarkan konfigurasi DNS/tunnel stabil dan tunggu penerbitan sertifikat. Mode SSL/TLS dapat diatur ke Full. Nginx lokal tetap menggunakan http://localhost:80.
π 9. Buat Route SSH pada Cloudflare Tunnel
Gunakan hostname terpisah karena domain utama sudah dipakai untuk website.
Di tunnel, pilih tab Published application routes → Add route:
Subdomain/Hostname : ssh.codekopdev.my.id
Service Type : SSH
Service URL : localhost:22
Jika cloudflared berada pada mesin berbeda dari server SSH, gunakan IP internal, misalnya 192.168.1.20:22.
π‘οΈ 10. Lindungi SSH dengan Cloudflare Access
Sangat disarankan membuat aplikasi Access agar hostname SSH hanya dapat dipakai akun yang diizinkan.
- Buka Zero Trust → Access → Applications.
- Pilih Add an application → Self-hosted.
- Masukkan hostname ssh.codekopdev.my.id.
- Buat policy Allow untuk alamat email pribadi.
- Pilih metode login, misalnya One-time PIN atau identity provider yang tersedia.
Dengan Access, Cloudflare meminta autentikasi sebelum menghubungkan client ke SSH.
π» 11. Pasang cloudflared pada Laptop Linux Mint / Ubuntu / WSL
Bagian ini dikerjakan di laptop Linux Mint / Ubuntu / WSL laptop pribadi, bukan di Proxmox dan bukan di Ubuntu VM.
sudo mkdir -p --mode=0755 /usr/share/keyrings
curl -fsSL https://pkg.cloudflare.com/cloudflare-main.gpg \
| sudo tee /usr/share/keyrings/cloudflare-main.gpg >/dev/null
echo "deb [signed-by=/usr/share/keyrings/cloudflare-main.gpg] https://pkg.cloudflare.com/cloudflared any main" \
| sudo tee /etc/apt/sources.list.d/cloudflared.list
sudo apt update
sudo apt install cloudflared -y
which cloudflared
cloudflared --version
Hasil which cloudflared biasanya /usr/bin/cloudflared.
βοΈ 12. Konfigurasi SSH pada Laptop
mkdir -p ~/.ssh
nano ~/.ssh/config
Isi file:
Host ssh.codekopdev.my.id
HostName ssh.codekopdev.my.id
User fauzan
ProxyCommand /usr/bin/cloudflared access ssh --hostname %h
Simpan lalu atur permission:
chmod 700 ~/.ssh
chmod 600 ~/.ssh/config
12.1 Koneksi
ssh ssh.codekopdev.my.id
Browser dapat terbuka untuk login Cloudflare Access. Setelah autentikasi berhasil, terminal SSH tersambung ke Ubuntu.
Tanpa file config, perintah satu kali:
ssh -o ProxyCommand="/usr/bin/cloudflared access ssh --hostname %h" \
[email protected]
π 13. Gunakan SSH Key
Di laptop Linux Mint:
ssh-keygen -t ed25519 -C "fauzan@codekop"
ssh-copy-id [email protected]
Karena ssh-copy-id paling mudah dilakukan lewat IP lokal, jalankan saat laptop berada pada jaringan yang sama. Setelah key terpasang, koneksi domain juga memakai key tersebut:
ssh ssh.codekopdev.my.id
13.1 Opsional: nonaktifkan password SSH
sudo nano /etc/ssh/sshd_config.d/99-codekop-security.conf
Isi setelah key benar-benar teruji:
PermitRootLogin no
PasswordAuthentication no
PubkeyAuthentication yes
sudo sshd -t
sudo systemctl restart ssh
π§° 14. Troubleshooting Cepat
|
Gejala |
Penyebab umum |
Pemeriksaan |
|---|---|---|
|
502 Bad Gateway |
Nginx/service origin mati atau port salah |
curl -I http://localhost; systemctl status nginx |
|
Error 1033 |
cloudflared tidak terhubung |
systemctl status cloudflared; journalctl -u cloudflared |
|
ERR_SSL_VERSION_OR_CIPHER_MISMATCH |
Edge certificate Cloudflare belum Active |
SSL/TLS → Edge Certificates; tunggu DCV/issuance |
|
SSH Connection closed |
Route SSH salah atau sshd tidak aktif |
ss -lntp | grep :22; Published route SSH localhost:22 |
|
cloudflared: command not found |
Client belum dipasang pada laptop |
sudo apt install cloudflared; which cloudflared |
|
Browser login tidak muncul |
Access app/policy belum dibuat atau ProxyCommand salah |
Periksa Access Applications dan ~/.ssh/config |
|
Permission denied |
Username/key/password salah |
ssh -vvv ssh.codekopdev.my.id |
14.1 Perintah diagnosis lengkap
# Ubuntu VM
hostname -I
systemctl status nginx ssh cloudflared
ss -lntp | grep -E ':22|:80'
curl -I http://localhost
journalctl -u cloudflared -n 100 --no-pager
# Laptop Linux Mint
dig NS codekopdev.my.id +short
dig ssh.codekopdev.my.id
cloudflared --version
ssh -vvv ssh.codekopdev.my.id
β 15. Rekomendasi Operasional
- Buat backup VM Proxmox secara berkala sebelum memasang panel hosting atau melakukan upgrade besar.
- Jangan memasang aaPanel di host Proxmox; pasang hanya di dalam Ubuntu VM bila memang diperlukan.
- Untuk VM Ubuntu awal, 2 core, RAM 4 GB, dan disk 40–60 GB cukup untuk web ringan.
- Gunakan Start at boot agar VM menyala otomatis setelah listrik/host restart.
- Gunakan UPS atau minimal surge protector untuk ThinkCentre dan router.
- Simpan recovery code Cloudflare, password root Proxmox, dan SSH key di tempat aman.
π Referensi Resmi
- Proxmox VE Administration Guide — pve.proxmox.com/pve-docs/pve-admin-guide.pdf
- Ubuntu Server: Basic installation — ubuntu.com/server/docs/tutorial/basic-installation/
- Ubuntu Server: OpenSSH server — ubuntu.com/server/docs/how-to/security/openssh-server/
- Cloudflare Tunnel setup — developers.cloudflare.com/tunnel/setup/
- Cloudflare Published applications — developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/routing-to-tunnel/
- Cloudflare SSH with client-side cloudflared — developers.cloudflare.com/cloudflare-one/networks/connectors/cloudflare-tunnel/use-cases/ssh/ssh-cloudflared-authentication/