−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 میں apt کی جگہ apk، sudo کی جگہ doas، systemd کی جگہ OpenRC اور glibc کی جگہ musl ہے۔

نیچے کے قدم وہی پہلے دس منٹ ہیں جو 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 ویسے ہی کام کرتا ہے جیسے Ubuntu پر sudo apt install nano۔

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 کمیونٹی ریپوزٹری میں ہے، جو ہمارے امیج میں فعال ہے:

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

limit SSH کو آنے دیتا ہے مگر جو لگاتار بہت سے کنکشن کھولے اسے سست کر دیتا ہے۔ یہاں rc-update ضروری ہے، کیونکہ جب تک آپ فائر وال کو runlevel میں شامل نہ کریں، OpenRC ری اسٹارٹ کے بعد اسے نہیں چلاتا۔ ری اسٹارٹ کے بعد ہمارا سرور 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 کے اگلے ریلیز پر جانا الگ، دستی قدم ہے۔ کرنل اپ ڈیٹس کو اب بھی ری اسٹارٹ چاہیے: قدم 1 والی 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 میں $8 ماہانہ پر اپنا IPv4 ہے۔ بھاری Docker اسٹیکس کے لیے Micro $5 ماہانہ میں 2 GB دیتا ہے۔

Alpine 3.21 Alpine VPS صفحے پر ہے اور VPS کے ہر Linux پلان پر دستیاب ہے۔ ادائیگی Base، Ethereum یا Polygon نیٹ ورکس پر USDT، USDC یا ETH میں ہوتی ہے، بغیر شناختی دستاویز اور کارڈ کے۔

عمومی سوالات

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 سے یوزر کا پاس ورڈ رکھیں تو کلید والا لاگ اِن چلنے لگتا ہے۔

Alpine پر SSH ٹنل کیوں کام نہیں کرتی؟

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 کے لیے کون سا پلان کافی ہے؟

$3 ماہانہ والا 1 GB کا Nano پلان کافی گنجائش رکھتا ہے: سسٹم خود تقریباً 55 MB لیتا ہے۔ اگر پورٹ 80 اور 443 انٹرنیٹ کے لیے کھلے ہونے چاہییں تو $8 ماہانہ والا Nano-IP لیں، جس کا اپنا IPv4 ہے۔

تبصرے

ابھی کوئی تبصرہ نہیں۔ پہلے بنیں۔

ایک تبصرہ چھوڑیں

تبصرے ظاہر ہونے سے پہلے moderate کیے جاتے ہیں۔