Selama ini kita memakai Linux di depan layar: membuka terminal, mengetik perintah, dan melihat hasilnya seketika. Begitu Linux pindah ke ruang server — mesin di rak tanpa monitor dan keyboard — cara kerja kita berubah total: tidak ada layar untuk dilihat, semua pengelolaan dilakukan dari jauh lewat jaringan. Kabar baiknya, seluruh keterampilan command line yang sudah kita kumpulkan tetap berlaku penuh; yang perlu ditambah hanyalah memahami cara sebuah program melayani permintaan, di pintu mana program itu mendengarkan, dan bagaimana sistem menjaganya tetap hidup. Chapter ini meletakkan fondasi tersebut sebelum kita memasang layanan sesungguhnya pada chapter-chapter berikutnya.
Server Adalah Program, Bukan Mesin #
Kata “server” dalam percakapan sehari-hari menunjuk ke mesin fisik, tetapi arti teknisnya lebih sederhana: server adalah program yang berjalan terus-menerus dan menunggu permintaan (request) dari program lain. Program penunggu semacam ini disebut daemon — sshd melayani login jarak jauh, nginx melayani halaman web, mysqld melayani query database. Satu mesin bisa menjalankan puluhan daemon sekaligus; yang membedakan satu daemon dengan daemon lain hanyalah jenis permintaan yang dilayani dan pintu yang dijaga. Mesin yang disebut “server” hanyalah komputer yang mayoritas waktunya sibuk menjalankan daemon-daemon tersebut.
Server Linux hampir selalu dipasang tanpa desktop environment — konfigurasi yang disebut headless. Alasannya praktis: GNOME atau KDE memakan ratusan megabyte RAM dan siklus CPU yang di server lebih berharga dipakai untuk layanan. Konsekuensinya, seluruh pengelolaan berlangsung lewat terminal: kita duduk di laptop, menyambung lewat ssh — protokol yang sudah kita pakai tuntas di Chapter ssh dan scp
— dan mendapat shell seolah-olah duduk langsung di depan mesin server itu. Ketika sesuatu perlu diperiksa, alat yang sama seperti di laptop pun berlaku: ps untuk proses, ss untuk socket, journalctl untuk log.
Port: Nomor Pintu di Satu Alamat #
Sebuah daemon yang menunggu permintaan harus menempati kombinasi alamat IP dan port. Analoginya: alamat IP adalah alamat gedung, sedangkan port adalah nomor pintu di gedung itu — ada 65.535 pintu, dan setiap daemon menduduki satu pintu (atau beberapa). Port 1–1023 disebut well-known port dan sudah menjadi kesepakatan lintas sistem operasi, sehingga klien tahu harus mengetuk ke mana. Registry kesepakatan ini bahkan tersimpan sebagai berkas teks di setiap instalasi Linux, dan kita bisa membacanya langsung:
awk '$2=="22/tcp"||$2=="80/tcp"||$2=="443/tcp"||$2=="3306/tcp"||$2=="5432/tcp" {print $1, $2}' /etc/servicesOutput yang Dihasilkan:
ssh 22/tcp
http 80/tcp
https 443/tcp
mysql 3306/tcp
postgresql 5432/tcpPerintah awk di atas membaca berkas /etc/services baris demi baris, mencocokkan kolom kedua (nama protokol dan /tcp), lalu mencetak nama layanan beserta portnya. Lima pintu inilah yang paling sering kita jumpai sepanjang section ini:
| Port | Layanan | Dipakai oleh |
|---|---|---|
| 22 | ssh | sshd — login jarak jauh |
| 80 | http | web server tanpa TLS |
| 443 | https | web server dengan TLS |
| 3306 | mysql | MySQL / MariaDB |
| 5432 | postgresql | PostgreSQL |
Perlu dicatat bahwa sisi klien juga memakai port — tetapi nomornya dipilih acak oleh kernel dari rentang ephemeral port, sehingga satu klien bisa membuka banyak koneksi ke port server yang sama.
Alamat Binding: Mendengarkan di Mana #
Selain memilih port, daemon juga memilih alamat yang didengarkan — dan pilihan ini menentukan siapa yang bisa menyambung. Dua nilai yang paling sering muncul di konfigurasi adalah 127.0.0.1 (loopback: hanya mesin sendiri) dan 0.0.0.0 (semua interface: siapa pun di jaringan). Perbedaannya nyata dalam urusan keamanan:
| Binding | Dapat dijangkau dari | Pemakaian yang tepat |
|---|---|---|
127.0.0.1 | proses di mesin yang sama saja | service internal (database untuk satu aplikasi) |
0.0.0.0 | semua interface, termasuk jaringan luar | service yang memang diniatkan publik |
Kita buktikan sendiri dengan dua server HTTP kecil — satu diikat ke 127.0.0.1, satu lagi ke 0.0.0.0 — lalu memeriksa kolom alamat lokal pada ss:
python3 -m http.server 8765 --bind 127.0.0.1 >/dev/null 2>&1 &
lokal=$!
python3 -m http.server 8766 --bind 0.0.0.0 >/dev/null 2>&1 &
semua=$!
for i in 1 2 3 4 5; do ss -tln | grep -q 8766 && break; sleep 0.2; done
ss -tln | awk '$4 ~ /:(8765|8766)$/ {print $1, $4}'
kill "$lokal" "$semua"Output yang Dihasilkan:
LISTEN 127.0.0.1:8765
LISTEN 0.0.0.0:8766Mari kita bedah baris demi baris:
- Baris 1–2 (
python3 -m http.server 8765 --bind 127.0.0.1 &): server HTTP pertama dijalankan di background, diikat hanya ke loopback pada port 8765; PID-nya disimpan ke variabellokalagar bisa dimatikan lagi. - Baris 3–4 (
--bind 0.0.0.0): server kedua pada port 8766 diikat ke semua interface, dengan PID disimpan kesemua. - Baris 5 (
for i in ... grep -q 8766 ...): menunggu hingga server kedua benar-benar mendengarkan — server mini butuh sekejap untuk siap, dan menghapus jeda ini membuatssbisa berjalan terlalu dini. - Baris 6 (
ss -tln | awk ...):ss -tlnmenampilkan socket TCP yang mendengarkan;awkmenyaring dua port kita lalu mencetak kolom state dan alamat lokalnya saja agar rapi. - Baris 7 (
kill ...): menghentikan kedua server — satu perintah, dua PID.
Perbedaan kedua baris hasil ada di alamat lokal: 127.0.0.1:8765 hanya bisa disapa oleh proses di mesin yang sama, sedangkan 0.0.0.0:8766 juga menerima sapaan dari kartu jaringan mana pun. Pola pemeriksaan ss -tln ini adalah cara tercepat menjawab pertanyaan klasik “service ini jalan tidak, dan terbuka untuk siapa?”.
Service: Daemon yang Dikelola systemd #
Daemon tidak dibiarkan hidup sendirian. Init system modern, systemd, menjadikan setiap daemon sebuah unit berjenis .service yang bisa dinyalakan, dimatikan, dan dipantau dengan systemctl. Dua subperintah paling penting: enable membuat daemon ikut menyala saat boot (dibuat symlink ke target boot), sedangkan start menyalakannya saat itu juga — biasanya digabung systemctl enable --now nama. Berikut contoh tampilan status ssh.service di Debian:
● ssh.service - OpenBSD Secure Shell server
Loaded: loaded (/usr/lib/systemd/system/ssh.service; enabled; preset: enabled)
Active: active (running) since Fri 2026-01-16 08:12:31 WIB; 3 days ago
Main PID: 612 (sshd)
Tasks: 1 (limit: 4382)
Memory: 2.5M
CGroup: /system.slice/ssh.service
└─612 sshd: /usr/sbin/sshd -D [listener] 0 of 10-100 startupsBaris Active: active (running) menegaskan daemon hidup, Main PID menunjuk proses sshd di baliknya, dan enabled pada baris Loaded berarti daemon akan ikut menyala saat boot. Daftar lengkap subperintah systemctl — status, start, stop, restart, reload, disable, hingga mask — sudah kita bedah di Chapter systemctl
.
Log: Jejak Kerja Daemon #
Daemon bekerja tanpa layar, jadi satu-satunya tempatnya “berbicara” adalah log. Di Debian, pesan sistem terkumpul di /var/log/syslog, percobaan login di /var/log/auth.log, dan daemon yang dikelola systemd juga menyimpan jurnalnya sendiri yang bisa dibaca dengan journalctl -u nama-service. Ketika sebuah service menolak menyala atau berperilaku aneh, dua tempat itulah kunjungan pertama sebelum bertanya di mana-mana — cara membaca dan memutar log sudah kita latih di Chapter Logs dan Log Rotation
.
Fondasi ini cukup untuk mulai memasang layanan sungguhan. Daemon pertama yang hampir selalu dipasang admin di server baru adalah sshd — pintu masuk tempat semua pekerjaan jarak jauh berlangsung. Kita pasang dan konfigurasikan di Chapter SSH Server
.
Referensi lanjut: halaman manual services(5)
untuk format berkas /etc/services.