VPS (Virtual Private Server) adalah mesin virtual yang berjalan di farm server milik penyedia cloud: kita menyewa potongan vCPU, RAM, dan disk per jam, lalu mengelolanya persis seperti server lokal yang kita rawat sepanjang Course ini. Keterampilan command line, SSH, dan administrasi paket tidak berubah sedikit pun — yang berubah hanya tempat mesin itu hidup dan siapa yang mengurusi hardware-nya. Chapter pembuka section ini memandu alur dari nol: memilih image dan ukuran instance, akses pertama lewat SSH, sampai checklist hardening hari pertama. Karena container latihan ini tidak terhubung ke penyedia cloud mana pun, kita praktikkan bagian yang bisa dijalankan lokal: skrip laporan checklist first-day yang bekerja di atas berkas status.
VPS: Server Fisik yang Disajikan sebagai Mesin Virtual #
Penyedia cloud menjalankan ribuan server fisik yang dipenuhi hypervisor — perangkat lunak yang membelah satu mesin menjadi banyak mesin virtual, konsep yang sudah kita bedah di Chapter Virtualization Concepts . Satu mesin virtual itulah yang kita sewa; para penyedia memberinya nama dagang berbeda — instance di AWS, Droplet di DigitalOcean — tetapi isinya sama: kernel Linux, filesystem, dan akses root yang sepenuhnya kita kendalikan. Perawatan hardware, listrik, dan jaringan menjadi urusan penyedia.
Dua konsekuensi model sewa ini perlu dipegang sejak awal. Server baru siap dalam hitungan menit dan ukurannya bisa dinaikkan saat trafik tumbuh; sebaliknya, mesin virtual berbagi CPU dan disk dengan penyewa lain di host yang sama, dan tagihan terus berjalan selama mesin menyala — termasuk saat menganggur.
Alur Membuat Instance Pertama #
Alur pembuatan instance hampir seragam antar penyedia; hanya istilahnya yang berbeda. Urutannya sebagai berikut:
- Pilih penyedia dan region — region adalah lokasi fisik datacenter; pilih yang terdekat dengan pengguna agar latensi rendah.
- Pilih image — sistem operasi yang dicetak ke disk saat instance dibuat. Debian stable atau Ubuntu LTS adalah pilihan aman karena berumur panjang dan dukungannya luas.
- Pilih ukuran (size) — kombinasi vCPU, RAM, dan disk; lihat tabel keputusan di bawah.
- Unggah SSH key saat pembuatan — penyedia menyuntikkan kunci publik ke user default sehingga kita bisa login tanpa password.
- Catat IP publik — alamat ini menjadi pintu masuk satu-satunya ke server baru.
Untuk langkah ketiga, patokan kasarnya begini — selalu ukur ulang dengan data nyata begitu aplikasi berjalan:
| Kebutuhan | vCPU / RAM | Disk | Cocok untuk |
|---|---|---|---|
| Web statis, blog pribadi | 1 / 1 GB | 25 GB | trafik kecil, satu situs |
| Aplikasi web + database kecil | 2 / 4 GB | 80 GB | aplikasi produksi ringan |
| Build server, CI/CD | 4 / 8 GB | 160 GB | kompilasi dan test otomatis |
| Database produksi | 4 / 16 GB | volume terpisah | beban I/O tinggi, ukur dulu |
Akses Pertama via SSH #
Instance yang baru dibuat langsung bisa dihubungi dari laptop dengan perintah yang sama seperti Chapter Remote Shell
. Nama user default berbeda-beda tergantung image: ubuntu untuk Ubuntu, root atau debian untuk Debian di banyak penyedia. Berikut contoh tampilan login pertama ke server dengan IP dokumentasi 203.0.113.10:
$ ssh [email protected]
The authenticity of host '203.0.113.10' can't be established.
ED25519 key fingerprint is SHA256:ContohSidikJariKunciServer.
Are you sure you want to continue connecting (yes/no/[fingerprint])? yes
root@web-jakarta:~#
Pertanyaan fingerprint itu hanya muncul sekali: SSH mencatat sidik jari kunci host, lalu memperingatkan kita bila sidik jarinya berubah — pertanda server diganti atau ada penyusup di tengah jalan. Setelah prompt root@web-jakarta muncul, kita resmi duduk di kursi admin server produksi.
Checklist First-Day dan Laporannya #
Empat pekerjaan pertama di server baru sama di mana pun mesin itu berjalan: pasang update keamanan, buat user admin, aktifkan firewall, dan kunci SSH — masing-masing sudah dibedah di Updating dan Upgrading System , UFW dan Firewalld , dan SSH Hardening . Di server sungguhan, rangkaiannya kira-kira begini:
apt update && apt full-upgrade -y
adduser budi && usermod -aG sudo budi
ufw allow 22/tcp && ufw enablePerintah di atas butuh root sungguhan sehingga tidak bisa dijalankan di container latihan. Yang bisa kita latihan adalah pola pemeriksaannya: skrip laporan yang membaca status terkini dari berkas snapshot dan mencetak OK atau PERIKSA per item. Di server produksi berkas snapshot ditulis oleh perintah aslinya; di sini isinya kita bekukan:
for berkas in status-paket.txt status-user.txt status-firewall.txt status-sshd.txt; do
echo "== $berkas"
cat "$berkas"
doneOutput yang Dihasilkan:
== status-paket.txt
3
== status-user.txt
budi
== status-firewall.txt
inactive
== status-sshd.txt
PasswordAuthentication noBundle chapter ini membawa skrip cek-firstday.sh yang membaca keempat berkas di atas dan merangkumnya menjadi satu laporan:
bash cek-firstday.shOutput yang Dihasilkan:
== Checklist First-Day ==
paket : OK (3 menunggu update, batas 5)
user : OK (budi sudah dibuat)
firewall: PERIKSA (ufw belum aktif)
sshd : OK (password login dimatikan)Mari kita bedah bagian demi bagian dari skripnya:
BATAS_PAKET=5: ambang kebijakan dideklarasikan di puncak skrip — satu-satunya tempat yang perlu disesuaikan bila tim menetapkan toleransi berbeda.- Empat variabel
$(cat status-*.txt): tiap berkas snapshot dibaca ke variabel sebelum dibandingkan, sehingga logikaiftinggal membandingkan teks dan angka. - Empat blok
if: tiap pemeriksaan membandingkan isi snapshot dengan kondisi yang diharapkan — jumlah paket di bawah ambang, user admin bernamabudi,ufwberstatusactive, dan sshd mematikan login password. printf 'paket : ...': format rata kiri menjaga kolom laporan tetap lurus ketika kataPERIKSAyang lebih panjang muncul.
Satu baris PERIKSA pada firewall justru bagian penting latihan ini: laporan ditulis untuk menemukan pekerjaan yang tersisa, bukan memuji yang sudah selesai. Skrip selalu berakhir sukses karena isinya informasi, bukan alarm — pola yang sama dengan laporan perawatan di Chapter Server Maintenance
.
Biaya, Volume, dan Snapshot #
Dua model tagihan mendominasi. On-demand menagih per detik atau per jam tanpa komitmen — cocok untuk server eksperimen yang bisa dihapus kapan saja. Reserved (bayar di muka untuk 1–3 tahun) memberi diskon besar dan layak untuk server produksi yang pasti hidup terus; kalau ragu, mulai dari on-demand lalu konversi begitu beban stabil.
Dua fitur storage melengkapi siklus hidup instance. Block volume adalah disk tambahan yang bisa dilepas dari satu instance dan dipasang ke instance lain di region yang sama — memudahkan upgrade ukuran server tanpa memindahkan data, seperti partisi data LVM di Chapter LVM . Snapshot membekukan isi disk pada satu titik waktu dan bisa direstorasi menjadi instance baru; buat sebelum perubahan besar, tetapi snapshot tetap bukan pengganti strategi backup berlapis di Chapter Backup Strategies .
Checklist first-day di atas hanya butuh lima menit untuk satu server. Namun bila sepuluh server lahir setiap minggu — atau satu server harus bisa diciptakan ulang identik besok — lima menit per mesin menjadi beban dan sumber kelalaian. Chapter berikutnya, cloud-init , memindahkan seluruh checklist itu ke dalam proses boot pertama instance sehingga server lahir dalam keadaan siap pakai.
Referensi lanjut: dokumentasi Ubuntu Server untuk praktik menjalankan Ubuntu di server, serta Debian Administrator’s Handbook untuk sudut pandang operasional Debian.
Berkas Sumber
Berkas pendukung halaman ini dapat diunduh dan dijalankan langsung sesuai penjelasan di atas.
cek-firstday.sh
Unduh berkas#!/usr/bin/env bash
# cek-firstday.sh — laporan checklist hardening hari pertama VPS.
# Membaca berkas snapshot di direktori kerja; selalu berakhir sukses.
BATAS_PAKET=5
paket=$(cat status-paket.txt)
user_admin=$(cat status-user.txt)
firewall=$(cat status-firewall.txt)
sshd=$(cat status-sshd.txt)
echo "== Checklist First-Day =="
if [ "$paket" -le "$BATAS_PAKET" ]; then
printf 'paket : OK (%s menunggu update, batas %s)\n' "$paket" "$BATAS_PAKET"
else
printf 'paket : PERIKSA (%s menunggu update, batas %s)\n' "$paket" "$BATAS_PAKET"
fi
if [ "$user_admin" = "budi" ]; then
echo "user : OK (budi sudah dibuat)"
else
echo "user : PERIKSA (user admin belum dibuat)"
fi
if [ "$firewall" = "active" ]; then
echo "firewall: OK (ufw aktif)"
else
echo "firewall: PERIKSA (ufw belum aktif)"
fi
if [ "$sshd" = "PasswordAuthentication no" ]; then
echo "sshd : OK (password login dimatikan)"
else
echo "sshd : PERIKSA (password login masih terbuka)"
fi