Alpine Linux är den minsta avbilden vi erbjuder. På våra servrar använde en ny Alpine 3.21 i vila 55 MB RAM och 153 MB disk, mot 313 MB och 2,7 GB för Ubuntu 24.04. Priset är att du ger upp de vanliga verktygen. Alpine använder apk i stället för apt, doas i stället för sudo, OpenRC i stället för systemd och musl i stället för glibc.
Stegen nedan är samma första tio minuter som på Debian eller Ubuntu, översatta till Alpine. Vi körde varje kommando på vår Alpine 3.21-avbild före publicering, och två av dem lurade oss första gången. Logga in som root med lösenordet från din kontrollpanel.
1. Uppdatera och starta om en gång
apk update && apk upgrade
uname -r
ls /lib/modules
Servern installerade redan tillgängliga uppdateringar vid första start, så apk upgrade har oftast lite kvar att göra. Titta i stället på de två sista raderna. Om den första uppdateringen gav en ny kärna, har den körande kärnan (uname -r) inte längre sina moduler på disk. Allt som laddar en modul misslyckas då tills du startar om. På vår testserver skrev installationen av brandväggen ut ERROR: Couldn't determine iptables version. Om versionerna skiljer sig åt, starta om nu:
reboot
Vår testserver var tillbaka på under en minut.
2. Skapa en användare som kan logga in
adduser -D deploy
passwd deploy
adduser deploy wheel
Hoppa inte över passwd. adduser -D skapar kontot utan lösenord, Alpine markerar det som låst och sshd nekar ett låst konto även med rätt nyckel. I vårt test var den enda ledtråden den här raden i /var/log/messages:
User deploy not allowed because account is locked
Lösenordet behövs även senare: det är vad doas frågar efter.
Om du lade till en SSH-nyckel när du beställde servern ligger den i roots authorized_keys. Kopiera den till den nya användaren:
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
Ingen nyckel än? Skapa en på din dator och klistra in den publika delen i /home/deploy/.ssh/authorized_keys.
3. Låt doas fråga efter lösenord
Alpine använder doas i stället för sudo, och vår avbild tillåter redan gruppen wheel. Regeln i /etc/doas.d/wheel.conf är permit nopass :wheel, så varje medlem i wheel blir root utan att skriva något. Låt den fråga efter lösenordet och sedan komma ihåg det i några minuter:
echo 'permit persist :wheel' > /etc/doas.d/wheel.conf
Från och med nu fungerar doas apk add nano som sudo apt install nano på Ubuntu.
4. SSH: bara nycklar, ingen root
sshd läser filerna i /etc/ssh/sshd_config.d/ i namnordning och behåller det första värdet den hittar för varje inställning. På vår avbild är den första filen 00-eqvps.conf, som tillåter root och lösenord så att du kommer in första dagen. Ersätt innehållet:
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) '
Den tredje raden spelar roll på Alpine. Avbilden kör PAM-versionen av OpenSSH, och med bara de två första raderna erbjöd vår testserver fortfarande keyboard-interactive-inloggning. Med alla tre får ett inloggningsförsök utan nyckel:
Permission denied (publickey).
Håll root-sessionen öppen. Kontrollera i en andra terminal att ssh deploy@YOUR.SERVER.IP fungerar (på en NAT-plan lägger du till -p och den personliga porten från kontrollpanelen) och att doas id godtar lösenordet.
5. Brandvägg: ufw
ufw finns i community-förrådet, som är aktiverat på vår avbild:
apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status
limit släpper igenom SSH men bromsar den som öppnar många anslutningar i rad. rc-update är viktigt här, eftersom OpenRC inte startar brandväggen efter en omstart om du inte lägger till den i runleveln. Efter en omstart kom vår server tillbaka med Status: active. På en NAT-plan låter du SSH ligga kvar på port 22: din personliga externa port vidarebefordras till 22 inne i servern. På en plan med egen IPv4 öppnar du webbportar när du behöver dem (ufw allow 80/tcp, ufw allow 443/tcp). ufw-guiden tar upp resten.
6. Slå på cron och dagliga uppdateringar
En ny Alpine-server kör inte cron alls. Slå på det:
rc-update add crond default
rc-service crond start
Roots crontab i Alpine kör redan allt i /etc/periodic/daily klockan 02:00. Lägg ett uppdateringsskript där:
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
Det sista kommandot listar skripten som cron kommer att köra, och ditt bör finnas med. Så får du rättningarna för 3.21. Att gå över till nästa Alpine-version är ett separat, manuellt steg. Kärnuppdateringar kräver fortfarande omstart: upprepa kontrollen uname -r / ls /lib/modules från steg 1 då och då.
7. OpenRC i en tabell
Om du kan systemd är det här det mesta som ändras:
| Uppgift | systemd | Alpine (OpenRC) |
|---|---|---|
| Starta en tjänst | systemctl start nginx | rc-service nginx start |
| Starta vid uppstart | systemctl enable nginx | rc-update add nginx default |
| Status | systemctl status nginx | rc-service nginx status |
| Vad som körs | systemctl list-units | rc-status |
| Systemlogg | journalctl | /var/log/messages |
8. Docker, och porten som ufw inte stoppar
Alpine är en bra Docker-värd eftersom systemet självt knappt är i vägen:
apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world
På vår server tog det 12 sekunder inklusive nedladdning. Med Docker-demonen igång gick använt minne från 57 MB till 124 MB.
En fälla som inte är specifik för Alpine: Docker skriver egna brandväggsregler. Med ufw som bara tillät SSH startade vi nginx med -p 8080:80 och nådde den utifrån servern på port 8080. ufw stoppade det inte. Ska en container bara nås via en omvänd proxy på samma server, publicera den på localhost:
docker run -d -p 127.0.0.1:8080:80 nginx:alpine
Vilken plan
Alpine lämnar nästan allt RAM åt din egen programvara. Planen Nano (2 vCPU, 1 GB, 15 GB, $3/mån) räcker för en liten tjänst eller några containrar. Det är en NAT-plan, så SSH kommer in via en personlig port. Behöver du portarna 80 och 443 öppna mot internet har Nano-IP egen IPv4 för $8/mån. För tyngre Docker-stackar ger Micro dig 2 GB för $5/mån.
Alpine 3.21 finns på Alpine VPS-sidan och på alla Linux-planer under VPS. Betalning sker i USDT, USDC eller ETH på Base, Ethereum eller Polygon, utan ID eller kort.
Kommentarer
Inga kommentarer än. Bli först.