Pengaturan awal server Ubuntu: 9 langkah untuk memulai di server Ubuntu yang baru dipasang
Saat mendapat server baru, Anda menjalankan pengaturan awal server Ubuntu sekali sebelum memasang layanan apa pun. Di server Ubuntu 24.04 yang dibuat di DigitalOcean, kami terhubung sebagai root lalu mengatur secara berurutan mulai dari pembaruan paket, pengguna sudo, login dengan kunci, firewall, zona waktu, pembaruan keamanan otomatis, hingga swap, dan memastikan pengaturan tetap ada setelah reboot.
Kotak hasil di bawah adalah keluaran dari menjalankan perintah dengan urutan ini. IP server 203.0.113.10 adalah nilai contoh, dan pengguna biasa yang baru dibuat diberi nama deploy.
1️⃣ Pembaruan paket Ubuntu
Server yang baru dibuat pun sudah punya pembaruan yang menunggu dipasang. Setelah mengunduh daftar paket yang baru, periksa dulu apa yang akan berubah sebelum benar-benar memasang sesuatu.
🔲 apt-get update
export DEBIAN_FRONTEND=noninteractivePerintah apt-get di bawah dijalankan setelah nilai ini diatur lebih dulu. Dengan nilai ini, tidak muncul jendela yang menanyakan pengaturan selama pemasangan paket dan jawaban bawaan langsung diterapkan.
apt-get updateHit:1 http://mirrors.digitalocean.com/ubuntu noble InRelease
Hit:2 http://mirrors.digitalocean.com/ubuntu noble-updates InRelease
Hit:3 http://mirrors.digitalocean.com/ubuntu noble-backports InRelease
Hit:4 https://repos-droplet.digitalocean.com/apt/droplet-agent main InRelease
Hit:5 http://security.ubuntu.com/ubuntu noble-security InRelease
Reading package lists...🔲 apt-get -s upgrade
apt-get -s upgradeCalculating upgrade...
The following upgrades have been deferred due to phasing:
libsqlite3-0
The following packages will be upgraded:
apt apt-transport-https apt-utils bind9-dnsutils bind9-host bind9-libs
cloud-init distro-info-data gir1.2-glib-2.0 git git-man libapt-pkg6.0t64
libbrotli1 libglib2.0-0t64 libglib2.0-bin libglib2.0-data liblzma5
libmspack0t64 libpcre2-8-0 python3-jwt python3-twisted tmux
ubuntu-pro-client ubuntu-pro-client-l10n xz-utils zlib1g
26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.Opsi -s adalah simulasi yang hanya menghitung hasilnya tanpa memasang apa pun. Di server ini ada 26 paket yang akan ditingkatkan, dan libsqlite3-0 tidak ikut dalam peningkatan kali ini karena [deferred due to phasing]. Jumlah paket berbeda di setiap server tergantung waktu server dibuat dan image yang dipakai.
🔲 apt-get -y upgrade
apt-get -y upgrade26 upgraded, 0 newly installed, 0 to remove and 1 not upgraded.
Need to get 15.4 MB of archives.
After this operation, 398 kB of additional disk space will be used.Setelah pemasangan selesai, daftar layanan yang dijalankan ulang muncul berikutnya.
Running kernel seems to be up-to-date.
Restarting services...
/etc/needrestart/restart.d/systemd-manager
systemctl restart cron.service fwupd.service multipathd.service packagekit.service polkit.service ssh.service systemd-journald.service systemd-networkd.service systemd-resolved.service systemd-timesyncd.service systemd-udevd.service udisks2.service
Service restarts being deferred:
systemctl restart ModemManager.service
/etc/needrestart/restart.d/dbus.service
systemctl restart systemd-logind.service
systemctl restart unattended-upgrades.serviceSaat pembaruan yang memerlukan reboot terpasang, file /var/run/reboot-required akan dibuat. Kali ini muncul [Running kernel seems to be up-to-date.] dan file itu tidak dibuat, jadi kami lanjut ke langkah berikutnya tanpa reboot.
2️⃣ Menambah pengguna Ubuntu dan hak sudo
Pekerjaan sehari-hari dilakukan dengan pengguna biasa, dan hanya perintah administrasi yang dijalankan dengan sudo. sudo menaikkan hak akses dengan kata sandi Anda sendiri, bukan kata sandi root, sehingga tercatat siapa yang menjalankan perintah apa.
🔲 adduser deploy
adduser deployinfo: Adding user `deploy' ...
info: Selecting UID/GID from range 1000 to 59999 ...
info: Adding new group `deploy' (1000) ...
info: Adding new user `deploy' (1000) with group `deploy (1000)' ...
info: Creating home directory `/home/deploy' ...
info: Copying files from `/etc/skel' ...
New password:
Retype new password:
passwd: password updated successfully
Changing the user information for deploy
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []:
Work Phone []:
Home Phone []:
Other []:
Is the information correct? [Y/n] Y
info: Adding new user `deploy' to supplemental / extra groups `users' ...
info: Adding user `deploy' to group `users' ...adduser adalah pembungkus useradd; alat ini membuat folder home dan grup, lalu menanyakan kata sandi dan informasi pengguna secara berurutan. Kata sandi tidak tampil di layar saat diketik, dan informasi seperti nama dan nomor telepon bisa dikosongkan dengan Enter.
🔲 usermod -aG sudo deploy
usermod -aG sudo deploygroups deploydeploy : deploy sudo users🔲 su
Pengguna di grup sudo dapat menjalankan perintah administrasi dengan sudo. Beralihlah ke akun deploy dengan su dan periksa hak aksesnya.
su - deployTo run a command as administrator (user "root"), use "sudo <command>".
See "man sudo_root" for details.whoamideploysudo whoami[sudo] password for deploy:
rootexitDengan sudo, kata sandi deploy akan ditanyakan, dan jika benar, perintah dijalankan dengan hak akses root.
3️⃣ Mendaftarkan kunci SSH untuk pengguna baru
Pada awalnya kunci SSH hanya terdaftar untuk root, jadi login dengan kunci belum bisa untuk deploy. Salin authorized_keys milik root ke folder home deploy.
🔲 install -o deploy -g deploy
install -d -m 700 -o deploy -g deploy /home/deploy/.sshinstall -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keysls -la /home/deploy/.sshtotal 12
drwx------ 2 deploy deploy 4096 Nov 5 11:48 .
drwxr-x--- 3 deploy deploy 4096 Nov 5 11:48 ..
-rw------- 1 deploy deploy 100 Nov 5 11:48 authorized_keysinstall membuat folder, menyalin file, dan mengatur pemilik serta izin sekaligus. sshd memeriksa izin dan pemilik file pengguna sebelum menerima login (StrictModes), jadi atur folder .ssh ke 700 dan authorized_keys ke 600.
🔲 ssh deploy@203.0.113.10
Jangan tutup jendela root yang sedang terbuka; periksa dulu di jendela terminal baru apakah Anda bisa terhubung sebagai deploy.
ssh deploy@203.0.113.10whoamideploy4️⃣ Memblokir login root SSH
Di Ubuntu 24.04, baris Include di bagian atas sshd_config memuat file di folder /etc/ssh/sshd_config.d/ lebih dulu, dan untuk pengaturan yang sama berlaku nilai yang dibaca pertama. Karena itu, sebelum mengubah pengaturan, periksa dulu nilai yang berlaku sekarang dan file tempat nilai itu berada.
/etc/ssh└─ sshd_config di bagian atas: Include /etc/ssh/sshd_config.d/*.conf ├─ ① sshd_config.d/50-cloud-init.conf PasswordAuthentication no ├─ ② sshd_config.d/60-cloudimg-settings.conf PasswordAuthentication no └─ ③ sshd_config baris 42 PermitRootLogin yes → no
🔲 sshd -T
sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) 'permitrootlogin yes
passwordauthentication nosudo grep -rn 'PasswordAuthentication' /etc/ssh/sshd_config.d//etc/ssh/sshd_config.d/60-cloudimg-settings.conf:1:PasswordAuthentication no
/etc/ssh/sshd_config.d/50-cloud-init.conf:1:PasswordAuthentication noLogin dengan kata sandi sudah dimatikan di dua file dalam sshd_config.d, jadi yang perlu diubah hanya satu baris login root di file utama.
🔲 sed -i PermitRootLogin
sudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config42:PermitRootLogin yessudo sed -i 's/^PermitRootLogin yes/PermitRootLogin no/' /etc/ssh/sshd_configsudo grep -n '^PermitRootLogin' /etc/ssh/sshd_config42:PermitRootLogin no🔲 systemctl reload ssh
sudo sshd -tsudo systemctl reload sshsudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) 'permitrootlogin no
passwordauthentication nosshd -t memeriksa sintaks pengaturan, dan jika tidak ada yang tampil berarti tidak ada kesalahan. Setelah memuat ulang, pastikan di jendela baru bahwa akses deploy masih berjalan, lalu coba terhubung sebagai root dan lihat bahwa aksesnya ditolak.
ssh root@203.0.113.10root@203.0.113.10: Permission denied (publickey).Meskipun kuncinya benar, Anda tidak bisa masuk sebagai root; pekerjaan administrasi dilakukan dengan terhubung sebagai deploy dan memakai sudo.
5️⃣ Firewall Ubuntu ufw
ufw adalah alat firewall bawaan Ubuntu, tetapi pada awalnya dalam keadaan mati. Begitu diaktifkan, semua koneksi yang tidak diizinkan akan diblokir, jadi tambahkan dulu aturan yang mengizinkan SSH lalu aktifkan paling akhir.
sudo ufw status verboseStatus: inactive🔲 ufw allow OpenSSH
sudo ufw app listAvailable applications:
OpenSSHsudo ufw allow OpenSSHRules updated
Rules updated (v6)sudo ufw allow 80/tcpRules updated
Rules updated (v6)sudo ufw allow 443/tcpRules updated
Rules updated (v6)sudo ufw show addedAdded user rules (see 'ufw status' for running firewall):
ufw allow OpenSSH
ufw allow 80/tcp
ufw allow 443/tcpOpenSSH adalah profil yang membuka port 22, sedangkan 80 dan 443 adalah port yang dipakai web server. Aturan ditambahkan untuk IPv4 dan IPv6 sekaligus.
🔲 ufw enable
sudo ufw enableCommand may disrupt existing ssh connections. Proceed with operation (y|n)? y
Firewall is active and enabled on system startupsudo ufw status verboseStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6) Koneksi masuk diblokir secara bawaan, hanya tiga port yang diizinkan yang terbuka, dan firewall juga aktif saat booting. Setelah diaktifkan, terhubung lagi sebagai deploy di jendela baru dan periksa nomor aturannya.
sudo ufw status numberedStatus: active
To Action From
-- ------ ----
[ 1] OpenSSH ALLOW IN Anywhere
[ 2] 80/tcp ALLOW IN Anywhere
[ 3] 443/tcp ALLOW IN Anywhere
[ 4] OpenSSH (v6) ALLOW IN Anywhere (v6)
[ 5] 80/tcp (v6) ALLOW IN Anywhere (v6)
[ 6] 443/tcp (v6) ALLOW IN Anywhere (v6) 6️⃣ Pengaturan zona waktu Ubuntu
Zona waktu awalnya adalah Etc/UTC. Untuk menyesuaikan waktu log dan tugas terjadwal dengan wilayah server, server yang dibuat di wilayah Singapura ini diatur ke Asia/Singapore.
timedatectl Local time: Thu 2026-11-05 12:00:31 UTC
Universal time: Thu 2026-11-05 12:00:31 UTC
RTC time: Thu 2026-11-05 12:00:31
Time zone: Etc/UTC (UTC, +0000)
System clock synchronized: yes
NTP service: active
RTC in local TZ: no🔲 timedatectl list-timezones
timedatectl list-timezones | grep SingaporeAsia/Singapore🔲 timedatectl set-timezone
sudo timedatectl set-timezone Asia/Singaporetimedatectl Local time: Thu 2026-11-05 20:00:32 +08
Universal time: Thu 2026-11-05 12:00:32 UTC
RTC time: Thu 2026-11-05 12:00:32
Time zone: Asia/Singapore (+08, +0800)
System clock synchronized: yes
NTP service: active
RTC in local TZ: noYang berubah hanya baris Local time dan Time zone; sinkronisasi jam (NTP) dan waktu UTC tetap sama.
7️⃣ unattended upgrades: pembaruan keamanan otomatis
Ubuntu memasang pembaruan keamanan secara otomatis dengan paket unattended-upgrades, dan paket ini sudah terpasang dan aktif sejak awal. Karena itu, pada langkah ini Anda memeriksa apakah paket ini aktif dan apa yang dipasangnya secara otomatis.
🔲 dpkg-query -W
dpkg-query -W unattended-upgradesunattended-upgrades 2.9.1+nmu4ubuntu1systemctl is-enabled unattended-upgrades apt-daily.timer apt-daily-upgrade.timerenabled
enabled
enabled🔲 cat 20auto-upgrades
cat /etc/apt/apt.conf.d/20auto-upgradesAPT::Periodic::Update-Package-Lists "1";
APT::Periodic::Unattended-Upgrade "1";Angka 1 pada kedua nilai berarti sekali sehari, dan jika diubah menjadi 0, pembaruan otomatis akan mati. Apa yang dipasang ditentukan oleh file 50unattended-upgrades.
grep -vE '^[[:space:]]*(//|$)' /etc/apt/apt.conf.d/50unattended-upgradesUnattended-Upgrade::Allowed-Origins {
"${distro_id}:${distro_codename}";
"${distro_id}:${distro_codename}-security";
"${distro_id}ESMApps:${distro_codename}-apps-security";
"${distro_id}ESM:${distro_codename}-infra-security";
};
Unattended-Upgrade::Package-Blacklist {
};
Unattended-Upgrade::DevRelease "auto";Di antara sumber yang diizinkan ada -security tetapi tidak ada -updates, jadi pembaruan biasa tidak dipasang otomatis dan hanya pembaruan keamanan yang dipasang. Untuk menerima pembaruan biasa secara otomatis juga, hapus tanda komentar pada baris -updates di file ini.
🔲 unattended-upgrade
sudo unattended-upgrade --dry-run --debugStarting unattended upgrades script
Allowed origins are: o=Ubuntu,a=noble, o=Ubuntu,a=noble-security, o=UbuntuESMApps,a=noble-apps-security, o=UbuntuESM,a=noble-infra-securityIni dua baris terakhir dari eksekusi yang sama.
No packages found that can be upgraded unattended and no pending auto-removals
The list of kept packages can't be calculated in dry-run mode.--dry-run hanya menghitung apa yang akan dilakukan pembaruan otomatis tanpa memasang apa pun. Karena pembaruan paket sudah dilakukan, hasilnya menunjukkan tidak ada paket yang perlu dipasang otomatis. Catatan eksekusi sebenarnya tersimpan di folder /var/log/unattended-upgrades/.
sudo ls -l /var/log/unattended-upgrades/total 32
-rw-r--r-- 1 root root 0 Nov 5 20:00 unattended-upgrades-dpkg.log
-rw-r--r-- 1 root root 0 Nov 5 17:34 unattended-upgrades-shutdown.log
-rw-r--r-- 1 root root 29093 Nov 5 20:04 unattended-upgrades.log8️⃣ Pengaturan memori swap Ubuntu
Server ini memiliki memori 1GB dan pada awalnya tidak punya swap. Sebelum memasang aplikasi, buat file swap 2GB dan daftarkan ke /etc/fstab agar tetap aktif setelah reboot.
free -h total used free shared buff/cache available
Mem: 961Mi 328Mi 161Mi 4.0Mi 631Mi 633Mi
Swap: 0B 0B 0Bdf -h /Filesystem Size Used Avail Use% Mounted on
/dev/vda1 24G 2.0G 22G 9% /🔲 fallocate -l 2G /swapfile
sudo fallocate -l 2G /swapfilesudo chmod 600 /swapfilels -lh /swapfile-rw------- 1 root root 2.0G Nov 5 20:04 /swapfile🔲 mkswap /swapfile
sudo mkswap /swapfileSetting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=0b43ccd8-5b4a-4048-9b84-eee12667b387🔲 swapon /swapfile
sudo swapon /swapfileswapon --showNAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2free -h total used free shared buff/cache available
Mem: 961Mi 328Mi 160Mi 4.0Mi 632Mi 632Mi
Swap: 2.0Gi 0B 2.0Gi🔲 tee -a /etc/fstab
swapon hanya mengaktifkannya untuk saat ini; agar tetap aktif setelah reboot, tambahkan satu baris ke fstab.
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab/swapfile none swap sw 0 09️⃣ Pemeriksaan pengaturan awal server Ubuntu
Setelah Anda memastikan pengaturan tetap ada setelah reboot, pengaturan awal Ubuntu selesai.
🔲 systemctl reboot
sudo systemctl reboot🔲 uptime -p
Setelah reboot, terhubung lagi sebagai deploy.
uptime -pup 2 minutesswapon --showNAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2sudo sshd -T | grep -E '^(permitrootlogin|passwordauthentication) 'permitrootlogin no
passwordauthentication nosudo ufw status verboseStatus: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22/tcp (OpenSSH) ALLOW IN Anywhere
80/tcp ALLOW IN Anywhere
443/tcp ALLOW IN Anywhere
22/tcp (OpenSSH (v6)) ALLOW IN Anywhere (v6)
80/tcp (v6) ALLOW IN Anywhere (v6)
443/tcp (v6) ALLOW IN Anywhere (v6) timedatectl | head -n 4 Local time: Thu 2026-11-05 20:06:35 +08
Universal time: Thu 2026-11-05 12:06:35 UTC
RTC time: Thu 2026-11-05 12:06:35
Time zone: Asia/Singapore (+08, +0800)systemctl is-active unattended-upgrades ssh.socketactive
activeSwap, pengaturan SSH, firewall, zona waktu, dan pembaruan otomatis semuanya sama seperti sebelum reboot. Berikutnya, aplikasi Node.js dipasang di server ini dengan PM2 dan Nginx.
🔢 FAQ & Konten yang Direkomendasikan
Pengaturan SSH
Pengaturan SSH - fungsi dan pengaturan file /etc/ssh/sshd_config
Membahas opsi di sshd_config yang sering diubah selain PermitRootLogin, beserta artinya.
Swap
Pengaturan memori swap (Swap Memory): 2 cara, partisi & file
Membahas cara membuat swap di partisi, bukan file swap, serta perintah swapon dan mkswap.
Paket
[Ubuntu] Perintah apt | Cara pakai dan perbedaan perintah apt-get
Membahas perbedaan apt dan apt-get, serta perintah untuk memasang dan menghapus paket.
ℹ️ Pemberitahuan Afiliasi
Konten di situs ini berisi tautan afiliasi. Jika pengunjung membeli produk atau layanan melalui tautan tersebut, situs ini menerima komisi dari penjual. Harga yang dibayar pembeli(turun saat ada diskon promo ↓), tidak naik karena hal ini. Harga, diskon, dan informasi stok yang ditampilkan berlaku pada saat penulisan dan bisa berbeda dengan kondisi sebenarnya, jadi pastikan kembali di situs penjual sebelum membeli. Pemilihan dan penilaian produk dibuat berdasarkan standar kami sendiri, dan ada tidaknya komisi tidak memengaruhi urutan maupun isi penilaian.