Alpine Linux adalah image terkecil yang kami tawarkan. Di server kami, Alpine 3.21 yang baru terpasang memakai 55 MB RAM dan 153 MB disk saat diam, dibanding 313 MB dan 2,7 GB untuk Ubuntu 24.04. Gantinya, Anda melepas alat-alat yang biasa dipakai. Alpine memakai apk alih-alih apt, doas alih-alih sudo, OpenRC alih-alih systemd, dan musl alih-alih glibc.
Langkah di bawah adalah sepuluh menit pertama yang sama seperti di Debian atau Ubuntu, diterjemahkan ke Alpine. Kami menjalankan setiap perintah di image Alpine 3.21 kami sebelum menerbitkan, dan dua di antaranya membuat kami tersandung pada percobaan pertama. Login sebagai root dengan kata sandi dari dasbor Anda.
1. Perbarui, lalu reboot sekali
apk update && apk upgrade
uname -r
ls /lib/modules
Server Anda sudah memasang pembaruan yang tersedia saat boot pertama, jadi apk upgrade biasanya tidak banyak lagi kerjanya. Perhatikan dua baris terakhir. Jika pembaruan pertama itu membawa kernel baru, kernel yang sedang berjalan (uname -r) tidak lagi punya modulnya di disk. Semua yang memuat modul akan gagal sampai Anda reboot. Di server uji kami, pemasangan firewall menampilkan ERROR: Couldn't determine iptables version. Jika kedua versi berbeda, reboot sekarang:
reboot
Server uji kami kembali dalam waktu kurang dari satu menit.
2. Buat pengguna yang bisa login
adduser -D deploy
passwd deploy
adduser deploy wheel
Jangan lewatkan passwd. adduser -D membuat akun tanpa kata sandi, Alpine menandainya terkunci, dan sshd menolak akun terkunci bahkan dengan kunci yang benar. Dalam uji kami, satu-satunya petunjuk adalah baris ini di /var/log/messages:
User deploy not allowed because account is locked
Kata sandi juga penting nanti: itulah yang akan diminta doas.
Jika Anda menambahkan kunci SSH saat memesan server, kunci itu ada di authorized_keys milik root. Salin ke pengguna baru:
install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
install -m 600 -o deploy -g deploy /root/.ssh/authorized_keys /home/deploy/.ssh/authorized_keys
Belum punya kunci? Buat satu di komputer Anda lalu tempel bagian publiknya ke /home/deploy/.ssh/authorized_keys.
3. Buat doas meminta kata sandi
Alpine memakai doas alih-alih sudo, dan image kami sudah mengizinkannya untuk grup wheel. Aturan di /etc/doas.d/wheel.conf adalah permit nopass :wheel, artinya setiap anggota wheel menjadi root tanpa mengetik apa pun. Buat agar ia meminta kata sandi lalu mengingatnya selama beberapa menit:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
Mulai sekarang doas apk add nano bekerja seperti sudo apt install nano di Ubuntu.
4. SSH: hanya kunci, tanpa root
sshd membaca file di /etc/ssh/sshd_config.d/ sesuai urutan nama dan memakai nilai pertama yang ditemukannya untuk setiap pengaturan. Di image kami, file pertama adalah 00-eqvps.conf, yang mengizinkan root dan kata sandi agar Anda bisa masuk di hari pertama. Ganti isinya:
cat > /etc/ssh/sshd_config.d/00-eqvps.conf <<'EOF'
PermitRootLogin no
PasswordAuthentication no
KbdInteractiveAuthentication no
EOF
sshd -t && rc-service sshd restart
sshd -T | grep -E '^(permitrootlogin|passwordauthentication|kbdinteractiveauthentication) '
Baris ketiga penting di Alpine. Image ini memakai versi OpenSSH dengan PAM, dan dengan dua baris pertama saja server uji kami masih menawarkan login keyboard-interactive. Dengan ketiganya, upaya login tanpa kunci mendapat:
Permission denied (publickey).
Biarkan sesi root tetap terbuka. Di terminal kedua, pastikan ssh deploy@YOUR.SERVER.IP berhasil (di paket NAT, tambahkan -p dan port pribadi dari dasbor) dan doas id menerima kata sandi.
5. Firewall: ufw
ufw ada di repositori community, yang sudah aktif di image kami:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit mengizinkan SSH tetapi memperlambat siapa pun yang membuka banyak koneksi berturut-turut. rc-update penting di sini, karena OpenRC tidak menjalankan firewall setelah reboot kecuali Anda menambahkannya ke runlevel. Setelah reboot, server kami kembali dengan Status: active. Di paket NAT, biarkan SSH di port 22: port eksternal pribadi Anda diteruskan ke port 22 di dalam server. Di paket dengan IPv4 sendiri, buka port web saat diperlukan (ufw allow 80/tcp, ufw allow 443/tcp). Sisanya ada di panduan ufw.
6. Nyalakan cron dan pembaruan harian
Server Alpine yang baru sama sekali tidak menjalankan cron. Nyalakan:
rc-update add crond default
rc-service crond start
crontab root di Alpine sudah menjalankan semua yang ada di /etc/periodic/daily pukul 02:00. Taruh skrip pembaruan di sana:
cat > /etc/periodic/daily/apk-upgrade <<'EOF'
#!/bin/sh
apk upgrade --update-cache --no-progress >> /var/log/apk-auto.log 2>&1
EOF
chmod +x /etc/periodic/daily/apk-upgrade
run-parts --test /etc/periodic/daily
Perintah terakhir menampilkan skrip yang akan dijalankan cron, dan skrip Anda harus ada di daftar. Dengan begitu Anda mendapat perbaikan untuk 3.21. Pindah ke rilis Alpine berikutnya adalah langkah terpisah yang dilakukan manual. Pembaruan kernel tetap perlu reboot: sesekali ulangi pemeriksaan uname -r / ls /lib/modules dari langkah 1.
7. OpenRC dalam satu tabel
Jika Anda paham systemd, inilah sebagian besar yang berubah:
| Tugas | systemd | Alpine (OpenRC) |
|---|---|---|
| Menjalankan layanan | systemctl start nginx | rc-service nginx start |
| Jalan saat boot | systemctl enable nginx | rc-update add nginx default |
| Status | systemctl status nginx | rc-service nginx status |
| Apa yang berjalan | systemctl list-units | rc-status |
| Log sistem | journalctl | /var/log/messages |
8. Docker, dan port yang tidak diblokir ufw
Alpine adalah host Docker yang baik karena sistemnya sendiri hampir tidak menghalangi:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
Di server kami ini memakan waktu 12 detik termasuk unduhan. Dengan daemon Docker berjalan, memori yang terpakai naik dari 57 MB ke 124 MB.
Satu jebakan yang tidak hanya ada di Alpine: Docker menulis aturan firewall-nya sendiri. Saat ufw hanya mengizinkan SSH, kami menjalankan nginx dengan -p 8080:80 dan bisa mengaksesnya dari luar server di port 8080. ufw tidak memblokirnya. Jika sebuah container hanya boleh dijangkau lewat reverse proxy di server yang sama, terbitkan di localhost:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
Paket mana
Alpine menyisakan hampir seluruh RAM untuk perangkat lunak Anda sendiri. Paket Nano (2 vCPU, 1 GB, 15 GB, $3/bulan) cukup untuk layanan kecil atau beberapa container. Ini paket NAT, jadi SSH masuk lewat port pribadi. Jika port 80 dan 443 harus terbuka ke internet, Nano-IP punya IPv4 sendiri seharga $8/bulan. Untuk tumpukan Docker yang lebih berat, Micro memberi 2 GB seharga $5/bulan.
Alpine 3.21 ada di halaman Alpine VPS dan tersedia di semua paket Linux di VPS. Pembayaran dengan USDT, USDC, atau ETH di jaringan Base, Ethereum, atau Polygon, tanpa identitas atau kartu.
Komentar
Belum ada komentar. Jadilah yang pertama.