−25%

untuk Windows tahunan, hingga 31 Okt. Lihat paket

EQVPS
Mulai

Cara menyiapkan VPS Alpine Linux: apk, doas, OpenRC, dan firewall

Langkah pertama di VPS Alpine Linux 3.21 yang baru: perbarui lalu reboot, buat pengguna doas yang benar-benar bisa login, matikan login SSH untuk root dan dengan kata sandi, pasang ufw, nyalakan cron dan pembaruan harian. Termasuk port Docker yang tidak diblokir ufw.

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:

TugassystemdAlpine (OpenRC)
Menjalankan layanansystemctl start nginxrc-service nginx start
Jalan saat bootsystemctl enable nginxrc-update add nginx default
Statussystemctl status nginxrc-service nginx status
Apa yang berjalansystemctl list-unitsrc-status
Log sistemjournalctl/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.

FAQ

Kenapa Alpine jauh lebih kecil daripada Ubuntu atau Debian?

Alpine memakai musl alih-alih glibc, BusyBox untuk perintah dasar, dan OpenRC alih-alih systemd. Di server kami, Alpine 3.21 yang baru terpasang memakai 55 MB RAM dan 153 MB disk saat diam. Ubuntu 24.04 memakai 313 MB dan 2,7 GB.

Kenapa pengguna baru saya mendapat "account is locked" padahal kuncinya benar?

adduser -D membuat akun tanpa kata sandi, Alpine menandainya terkunci, lalu sshd menolak pengguna itu bahkan dengan kunci yang sah. Baris di log berbunyi "User deploy not allowed because account is locked". Beri pengguna kata sandi dengan passwd dan login dengan kunci akan berfungsi.

Kenapa tunnel SSH tidak jalan di Alpine?

File /etc/ssh/sshd_config bawaan Alpine berisi AllowTcpForwarding no, jadi penerusan ssh -L ditolak. Jika butuh tunnel, ubah nilainya menjadi yes di file itu lalu jalankan rc-service sshd restart.

Apakah program saya akan jalan di Alpine?

Semua yang berasal dari repositori Alpine akan jalan, begitu pula container Docker yang dibangun di atas image dasar apa pun. Program Linux siap pakai yang dibuat untuk glibc sering tidak mau mulai di musl. Cari versi untuk Alpine atau musl, atau jalankan program di Docker. Paket gcompat membantu untuk sebagian program glibc yang sederhana.

Paket mana yang cukup untuk Alpine?

Paket Nano 1 GB seharga $3 per bulan masih sangat lega: sistemnya sendiri hanya memakai sekitar 55 MB. Jika port 80 dan 443 harus terbuka ke internet, pilih Nano-IP seharga $8 per bulan yang punya IPv4 sendiri.

Komentar

Belum ada komentar. Jadilah yang pertama.

Tinggalkan komentar

Komentar dimoderasi sebelum muncul.