−25%

Windows-ის წლიურ გადახდაზე, 31 ოქტომბრამდე. ტარიფებზე

EQVPS
დაწყება

როგორ მოვამზადოთ Alpine Linux VPS: apk, doas, OpenRC და ფაერვოლი

პირველი ნაბიჯები ახალ Alpine Linux 3.21 VPS-ზე: განახლება და გადატვირთვა, doas-ის მომხმარებელი, რომელსაც მართლა შეუძლია შესვლა, root-ისა და პაროლით SSH შესვლის გათიშვა, ufw, cron და ყოველდღიური განახლებები. დამატებით Docker-ის პორტი, რომელსაც ufw არ ბლოკავს.

Alpine Linux ჩვენს შეთავაზებაში ყველაზე პატარა იმიჯია. ჩვენს სერვერებზე ახალი Alpine 3.21 უმოქმედობისას 55 MB RAM-სა და 153 MB დისკს იკავებდა, Ubuntu 24.04 კი 313 MB-სა და 2,7 GB-ს. ამის საფასური ნაცნობ ინსტრუმენტებზე უარის თქმაა. Alpine იყენებს apk-ს apt-ის ნაცვლად, doas-ს sudo-ს ნაცვლად, OpenRC-ს systemd-ის ნაცვლად და musl-ს glibc-ის ნაცვლად.

ქვემოთ მოცემული ნაბიჯები იგივე პირველი ათი წუთია, რაც Debian-ზე ან Ubuntu-ზე, ოღონდ Alpine-ზე გადატანილი. გამოქვეყნებამდე ყველა ბრძანება ჩვენს Alpine 3.21 იმიჯზე გავუშვით და ორმა მათგანმა პირველად შეგვაცდინა. შედით root-ად პანელში მოცემული პაროლით.

1. განაახლეთ და ერთხელ გადატვირთეთ

apk update && apk upgrade
uname -r
ls /lib/modules

სერვერმა ხელმისაწვდომი განახლებები პირველივე ჩატვირთვისას დააყენა, ამიტომ apk upgrade-ს ჩვეულებრივ ცოტა საქმე რჩება. ამის ნაცვლად ბოლო ორ სტრიქონს შეხედეთ. თუ იმ პირველმა განახლებამ ახალი ბირთვი მოიტანა, გაშვებულ ბირთვს (uname -r) აღარ აქვს მოდულები დისკზე. ყველაფერი, რაც მოდულს ტვირთავს, გადატვირთვამდე შეცდომას მისცემს. ჩვენს სატესტო სერვერზე ფაერვოლის დაყენებამ დაწერა ERROR: Couldn't determine iptables version. თუ ორი ვერსია განსხვავდება, ახლავე გადატვირთეთ:

reboot

ჩვენი სატესტო სერვერი ერთ წუთზე ნაკლებში დაბრუნდა.

2. შექმენით მომხმარებელი, რომელსაც შესვლა შეუძლია

adduser -D deploy
passwd deploy
adduser deploy wheel

passwd არ გამოტოვოთ. adduser -D ანგარიშს პაროლის გარეშე ქმნის, Alpine მას დაბლოკილად ნიშნავს და sshd დაბლოკილ ანგარიშს სწორი გასაღებითაც კი არ უშვებს. ჩვენს ტესტში ერთადერთი მინიშნება იყო ეს სტრიქონი /var/log/messages-ში:

User deploy not allowed because account is locked

პაროლი მოგვიანებითაც დაგჭირდებათ: სწორედ მას მოითხოვს doas.

თუ სერვერის შეკვეთისას SSH გასაღები დაამატეთ, ის root-ის authorized_keys-შია. დააკოპირეთ ახალ მომხმარებელთან:

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

გასაღები ჯერ არ გაქვთ? შექმენით კომპიუტერზე და ჩასვით საჯარო ნაწილი /home/deploy/.ssh/authorized_keys-ში.

3. დაე, doas-მა პაროლი მოითხოვოს

Alpine sudo-ს ნაცვლად doas-ს იყენებს და ჩვენი იმიჯი ამას უკვე უშვებს wheel ჯგუფისთვის. წესი /etc/doas.d/wheel.conf-ში არის permit nopass :wheel, ანუ wheel-ის ნებისმიერი წევრი root ხდება ისე, რომ არაფერს კრეფს. აიძულეთ პაროლი მოითხოვოს და შემდეგ რამდენიმე წუთით დაიმახსოვროს:

echo 'permit persist :wheel' > /etc/doas.d/wheel.conf

ამიერიდან doas apk add nano ისე მუშაობს, როგორც sudo apt install nano Ubuntu-ზე.

4. SSH: მხოლოდ გასაღებები, root-ის გარეშე

sshd კითხულობს /etc/ssh/sshd_config.d/-ის ფაილებს სახელების მიხედვით და თითოეული პარამეტრისთვის პირველ ნაპოვნ მნიშვნელობას იტოვებს. ჩვენს იმიჯში პირველი ფაილი 00-eqvps.conf-ია, რომელიც root-ითა და პაროლით შესვლას უშვებს, რომ პირველ დღეს შეძლოთ შესვლა. შეცვალეთ მისი შიგთავსი:

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) '

მესამე სტრიქონს Alpine-ზე მნიშვნელობა აქვს. იმიჯი OpenSSH-ის PAM-იან ვერსიას იყენებს და მხოლოდ პირველი ორი სტრიქონით ჩვენი სატესტო სერვერი კვლავ სთავაზობდა keyboard-interactive შესვლას. სამივესთან ერთად გასაღების გარეშე შესვლის მცდელობა იღებს:

Permission denied (publickey).

root-ის სესია ღია დატოვეთ. მეორე ტერმინალში შეამოწმეთ, რომ ssh deploy@YOUR.SERVER.IP მუშაობს (NAT ტარიფზე დაამატეთ -p და პირადი პორტი პანელიდან) და რომ doas id პაროლს იღებს.

5. ფაერვოლი: ufw

ufw არის community რეპოზიტორიაში, რომელიც ჩვენს იმიჯში უკვე ჩართულია:

apk add ufw
ufw limit 22/tcp
ufw --force enable
rc-update add ufw default
ufw status

limit SSH-ს უშვებს, მაგრამ ანელებს ყველას, ვინც ზედიზედ ბევრ კავშირს ხსნის. rc-update აქ მნიშვნელოვანია, რადგან OpenRC გადატვირთვის შემდეგ ფაერვოლს არ გაუშვებს, თუ runlevel-ში არ დაამატებთ. გადატვირთვის შემდეგ ჩვენი სერვერი Status: active-ით დაბრუნდა. NAT ტარიფზე SSH 22-ე პორტზე დატოვეთ: თქვენი პირადი გარე პორტი სერვერის შიგნით 22-ზეა გადამისამართებული. საკუთარი IPv4-ის მქონე ტარიფზე ვებ-პორტები საჭიროებისამებრ გახსენით (ufw allow 80/tcp, ufw allow 443/tcp). დანარჩენი ufw-ის სახელმძღვანელოშია.

6. ჩართეთ cron და ყოველდღიური განახლებები

ახალ Alpine სერვერზე cron საერთოდ არ მუშაობს. ჩართეთ:

rc-update add crond default
rc-service crond start

Alpine-ში root-ის crontab უკვე უშვებს ყველაფერს /etc/periodic/daily-დან 02:00 საათზე. ჩადეთ იქ განახლების სკრიპტი:

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

ბოლო ბრძანება აჩვენებს სკრიპტებს, რომლებსაც cron გაუშვებს, და თქვენი სიაში უნდა იყოს. ასე 3.21-ის შესწორებებს იღებთ. Alpine-ის შემდეგ გამოშვებაზე გადასვლა ცალკე, ხელით გასაკეთებელი ნაბიჯია. ბირთვის განახლებებს კვლავ გადატვირთვა სჭირდება: დროდადრო გაიმეორეთ პირველი ნაბიჯის შემოწმება uname -r / ls /lib/modules.

7. OpenRC ერთ ცხრილში

თუ systemd იცით, აი თითქმის ყველაფერი, რაც იცვლება:

ამოცანაsystemdAlpine (OpenRC)
სერვისის გაშვებაsystemctl start nginxrc-service nginx start
ჩატვირთვისას გაშვებაsystemctl enable nginxrc-update add nginx default
სტატუსიsystemctl status nginxrc-service nginx status
რა მუშაობსsystemctl list-unitsrc-status
სისტემის ჟურნალიjournalctl/var/log/messages

8. Docker და პორტი, რომელსაც ufw არ ბლოკავს

Alpine Docker-ისთვის კარგი ჰოსტია, რადგან თავად სისტემა თითქმის ხელს არ უშლის:

apk add docker docker-cli-compose
rc-update add docker default
rc-service docker start
docker run --rm hello-world

ჩვენს სერვერზე ამას ჩამოტვირთვასთან ერთად 12 წამი დასჭირდა. Docker-ის დემონის მუშაობისას დაკავებული მეხსიერება 57 MB-დან 124 MB-მდე გაიზარდა.

ხაფანგი, რომელიც მხოლოდ Alpine-ს არ ეხება: Docker ფაერვოლის საკუთარ წესებს წერს. როცა ufw მხოლოდ SSH-ს უშვებდა, nginx გავუშვით -p 8080:80-ით და სერვერის გარედან 8080 პორტზე მივწვდით. ufw-მ არ დაბლოკა. თუ კონტეინერი მხოლოდ იმავე სერვერზე არსებული reverse proxy-ით უნდა იყოს ხელმისაწვდომი, გამოაქვეყნეთ localhost-ზე:

docker run -d -p 127.0.0.1:8080:80 nginx:alpine

რომელი ტარიფი

Alpine თითქმის მთელ RAM-ს თქვენს პროგრამებს უტოვებს. Nano ტარიფი (2 vCPU, 1 GB, 15 GB, $3/თვე) საკმარისია პატარა სერვისისთვის ან რამდენიმე კონტეინერისთვის. ეს NAT ტარიფია, ამიტომ SSH პირადი პორტით შემოდის. თუ 80 და 443 პორტები ინტერნეტისთვის ღია უნდა იყოს, Nano-IP-ს საკუთარი IPv4 აქვს $8/თვე. უფრო მძიმე Docker სტეკებისთვის Micro 2 GB-ს გაძლევთ $5/თვე.

Alpine 3.21 არის Alpine VPS-ის გვერდზე და ხელმისაწვდომია ყველა Linux ტარიფზე VPS განყოფილებაში. გადახდა ხდება USDT-ით, USDC-ით ან ETH-ით Base, Ethereum ან Polygon ქსელებში, დოკუმენტისა და ბარათის გარეშე.

ხდკ

რატომ არის Alpine ბევრად პატარა, ვიდრე Ubuntu ან Debian?

ის glibc-ის ნაცვლად musl-ს იყენებს, ძირითადი ბრძანებებისთვის BusyBox-ს და systemd-ის ნაცვლად OpenRC-ს. ჩვენს სერვერებზე ახალი Alpine 3.21 უმოქმედობისას 55 MB RAM-სა და 153 MB დისკს იკავებდა. Ubuntu 24.04 იკავებდა 313 MB-სა და 2,7 GB-ს.

რატომ იღებს ახალი მომხმარებელი „account is locked“-ს, თუმცა გასაღები სწორია?

adduser -D ანგარიშს პაროლის გარეშე ქმნის, Alpine მას დაბლოკილად ნიშნავს და sshd ასეთ მომხმარებელს სწორი გასაღებითაც უარს ეუბნება. ჟურნალში ჩანს სტრიქონი „User deploy not allowed because account is locked“. მიეცით მომხმარებელს პაროლი passwd ბრძანებით და გასაღებით შესვლა იმუშავებს.

რატომ არ მუშაობს SSH გვირაბი Alpine-ზე?

Alpine-ის ნაგულისხმევ /etc/ssh/sshd_config-ში წერია AllowTcpForwarding no, ამიტომ ssh -L გადამისამართებები უარყოფილია. თუ გვირაბები გჭირდებათ, ამ ფაილში მნიშვნელობა yes-ით შეცვალეთ და გაუშვით rc-service sshd restart.

იმუშავებს ჩემი პროგრამა Alpine-ზე?

Alpine-ის რეპოზიტორიებიდან ყველაფერი იმუშავებს, ისევე როგორც Docker-ის კონტეინერები ნებისმიერ საბაზო იმიჯზე. glibc-ისთვის აწყობილი მზა Linux პროგრამები musl-ზე ხშირად არ ეშვება. მოძებნეთ Alpine-ის ან musl-ის ვერსია ან გაუშვით პროგრამა Docker-ში. gcompat პაკეტი ზოგიერთ მარტივ glibc პროგრამას ეხმარება.

რომელი ტარიფი ეყოფა Alpine-ს?

Nano ტარიფი 1 GB-ით თვეში $3-ად საკმარისზე მეტია: თავად სისტემა დაახლოებით 55 MB-ს იყენებს. თუ 80 და 443 პორტები ინტერნეტისთვის ღია უნდა იყოს, აიღეთ Nano-IP თვეში $8-ად, საკუთარი IPv4-ით.

კომენტარები

ჯერ არ არის კომენტარები. იყავით პირველი.

დატოვეთ კომენტარი

კომენტარები მოდერირდება გამოჩენამდე.