عملی رہنمائی / Ubuntu VPS سیٹ اپ

پہلی ویب سائٹ کے لیے Ubuntu VPS سیٹ اپ کریں

نئے Ubuntu 24.04 LTS VPS پر الگ administrator اور SSH key کے ساتھ Nginx کی چھوٹی static HTTPS ویب سائٹ بنائیں۔ ہر مرحلے کا نتیجہ جانچیں، certificate renewal دیکھیں اور reboot کے بعد ویب سائٹ دوبارہ چلنے کی تصدیق کریں۔

· تازہ کاری · تقریباً 7 منٹ

اس مضمون میں

نیا server، domain اور recovery access تیار کریں

نیا Ubuntu 24.04 VPS، public IPv4، port 22 پر SSH، sudo والا ابتدائی account اور اپنا domain چاہیے۔ Client commands اپنے Linux/macOS/WSL Bash میں، server commands SSH کے اندر چلیں گی۔ مثال کے paths کسی موجودہ deployment کے ہوں تو پہلے اس کی ترتیب دیکھیں۔

ہر 203.0.113.10 کو اپنے server IP اور app.example.com کو اپنے hostname سے بدلیں۔ ابتدائی user یہاں ubuntu ہے؛ provider کا اصل account لگائیں۔ Access یا firewall بدلنے سے پہلے recovery console کھولیں۔ Oracle Cloud Ubuntu پر نیچے والا UFW block نہیں چلانا۔

Provisioning سے پہلے key بنائیں یا موجودہ رسائی سے شامل کریں

اپنے کمپیوٹر پر dedicated key بنائیں اور passphrase دیں۔ Filename موجود ہو تو پورے طریقے میں دوسرا نام استعمال کریں۔ .pub public file ہے؛ private file اپنے کمپیوٹر پر رہے۔

mkdir -p ~/.ssh
ssh-keygen -t ed25519 -f ~/.ssh/ubuntu_vps
cat ~/.ssh/ubuntu_vps.pub

نیا VPS بنانا ہے: Ubuntu 24.04 create کرتے وقت public key provider کے SSH-key field میں دیں۔ Initial username معلوم کریں، پھر host fingerprint کی تصدیق پر جائیں۔ Existing-server commands چھوڑ دیں۔

خالی VPS پہلے بن چکا ہے: چلتا SSH session کھلا رکھیں۔ دوسرے client terminal سے کام کرنے والی authentication کے ذریعے نئی public key بھیجیں۔ existing_vps_key اپنی موجودہ private key سے بدلیں۔ Existing access password یا agent سے ہو تو -i ~/.ssh/existing_vps_key چھوڑیں؛ server کی authentication policy نہ بدلیں۔

scp -i ~/.ssh/existing_vps_key ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pub

موجودہ server session میں uploaded key جانچ کر اپنے initial account کی authorized_keys میں append کریں۔ پرانی entries محفوظ رہتی ہیں اور اضافی newline آخری نامکمل سطر سنبھالتی ہے۔ کوئی working access نہیں تو پہلے provider recovery استعمال کریں۔

if ssh-keygen -lf ~/ubuntu-vps-admin.pub; then
    mkdir -p ~/.ssh
    chmod 700 ~/.ssh
    printf '\n' >> ~/.ssh/authorized_keys
    cat ~/ubuntu-vps-admin.pub >> ~/.ssh/authorized_keys
    chmod 600 ~/.ssh/authorized_keys
fi

دونوں راستوں میں پہلی نئی connection قبول کرنے سے پہلے trusted recovery console میں matching host public key کی fingerprint لیں۔ Ed25519 کے لیے:

sudo ssh-keygen -lf /etc/ssh/ssh_host_ed25519_key.pub

اپنے کمپیوٹر سے نئی key کے ساتھ fresh connection کھولیں۔ کامیابی تک پرانی رسائی کھلی رکھیں۔

ssh -i ~/.ssh/ubuntu_vps ubuntu@203.0.113.10

اگلے الگ administrator کے لیے دوسرے client terminal سے public key بھیجیں۔ Existing-server راستے میں temporary file پہلے آ چکی ہو تو اسے دوبارہ copy کرنا درست ہے۔

scp -i ~/.ssh/ubuntu_vps ~/.ssh/ubuntu_vps.pub ubuntu@203.0.113.10:ubuntu-vps-admin.pub

الگ administrator بنائیں اور نئی login آزمائیں

Server پر پہلے getent passwd deploy دیکھیں۔ کوئی account نہ ملے۔ deploy پہلے موجود ہو تو پورے طریقے، home paths اور groups میں نیا نام استعمال کریں؛ دوسرے user کی key file نہ بدلیں۔

Image/resources دیکھیں، upgrades پڑھیں اور administrator بنائیں۔ sudo prompts کے لیے مضبوط password رکھیں۔ install commands key file کی ملکیت اور محدود permissions مقرر کرتی ہیں۔

cat /etc/os-release
free -h
df -h /
sudo apt update
sudo apt upgrade
sudo adduser deploy
sudo usermod -aG sudo deploy
sudo install -d -m 700 -o deploy -g deploy /home/deploy/.ssh
sudo install -m 600 -o deploy -g deploy ~/ubuntu-vps-admin.pub /home/deploy/.ssh/authorized_keys

اپنے کمپیوٹر کے دوسرے terminal سے نئے administrator کے طور پر رابطہ کریں۔

ssh -i ~/.ssh/ubuntu_vps deploy@203.0.113.10

اسی نئے server session میں sudo جانچیں۔ deploy کا password قبول ہونے پر root آنا چاہیے۔ دونوں checks کے بعد اسی session میں آگے بڑھیں اور پرانا access برقرار رکھیں۔

sudo whoami

Nginx اور image کے موافق firewall

Server پر Nginx install کریں۔ Provider network firewall اور guest firewall دونوں رسائی کو متاثر کرتے ہیں؛ console اور working SSH دستیاب رکھیں۔

sudo apt install nginx
sudo systemctl enable --now nginx

Provider firewall میں TCP 22 اپنی administration location سے، اور TCP 80/443 ویب visitors کے لیے کھولیں۔ SSH کا port مختلف ہو تو اسی کی اجازت بچائیں۔ Network rule guest firewall کی رکاوٹ نہیں ہٹاتا۔

Oracle Cloud Ubuntu: اگلا پورا UFW block چھوڑ دیں۔ Image کے موجودہ iptables اور iSCSI boot/block-volume rules محفوظ رکھیں۔ HTTP/HTTPS کے لیے OCI security lists/NSGs اور documented guest rules اپنائیں۔ Rules flush یا firewall packages تبدیل نہ کریں۔

دوسری نئی Ubuntu images: UFW صرف تب استعمال کریں جب provider اسے support کرے اور image کو دوسرا managed firewall درکار نہ ہو۔ Enable کرنے سے پہلے صحیح SSH port کی اجازت دیں؛ یہاں 22 فرض ہے۔

sudo apt install ufw
sudo ufw allow 22/tcp
sudo ufw allow 80/tcp
sudo ufw allow 443/tcp
sudo ufw enable
sudo ufw status verbose

چنے ہوئے firewall راستے کے بعد fresh SSH login جانچیں۔ پرانے session کا چلنا نئی connection کا test نہیں۔ Certificate مانگنے سے پہلے اگلے حصے کا بیرونی HTTP check بھی کامیاب ہونا چاہیے۔

اپنی Nginx site میں صفحہ رکھیں

Server پر نیا document root اور configuration بنائیں۔ Block میں hostname بدلیں۔ Quoted EOF markers برقرار رکھیں تاکہ shell، Nginx کے $uri کو expand نہ کرے۔

sudo install -d -m 755 /var/www/first-site
printf '%s\n' '<!doctype html><html lang="en"><title>First deployment</title><h1>Ubuntu VPS is serving this page</h1></html>' | sudo tee /var/www/first-site/index.html
sudo tee /etc/nginx/sites-available/first-site >/dev/null <<'EOF'
server {
    listen 80;
    listen [::]:80;
    server_name app.example.com;
    root /var/www/first-site;
    index index.html;
    location / {
        try_files $uri $uri/ =404;
    }
}
EOF
sudo ln -s /etc/nginx/sites-available/first-site /etc/nginx/sites-enabled/first-site
sudo nginx -t

Configuration test کامیاب ہو تبھی reload کریں۔

sudo systemctl reload nginx

DNS بدلنے سے پہلے اپنے کمپیوٹر سے یہی hostname، server address پر request کریں۔ Default Nginx page کے بجائے اپنا heading آنا چاہیے۔

curl --resolve app.example.com:80:203.0.113.10 http://app.example.com/

DNS اور HTTPS certificate جوڑیں

Hostname کا A record VPS کے IPv4 پر رکھیں۔ AAAA صرف اسی server پر IPv6 کام کرے تو دیں؛ stale AAAA visitors اور validation کو دوسری جگہ بھیج سکتا ہے۔ مثال میں DNS براہ راست VPS پر جاتا ہے، proxy سے نہیں۔

اپنے کمپیوٹر سے http://app.example.com/ بغیر --resolve مانگیں۔ اپنا page آئے تب server پر Ubuntu archive کا Certbot اور Nginx plugin install کریں۔ Universe repository چاہیے؛ package-not-found کو پہلے حل کریں۔

sudo apt install certbot python3-certbot-nginx
sudo certbot --nginx -d app.example.com --redirect
sudo nginx -t
sudo certbot renew --dry-run
systemctl list-timers --all certbot.timer

Email اور terms prompts پڑھیں۔ Certbot اسی site میں HTTPS اور redirect شامل کرتا ہے۔ Renewal timer scheduled ہونا چاہیے؛ inactive ہو تو sudo systemctl enable --now certbot.timer کریں۔ HTTP certificate validation/renewal کے لیے port 80 قابل رسائی رکھیں۔

باہر سے اور reboot کے بعد تصدیق

Client پر redirect، certificate اور content دیکھیں۔ HTTP سے HTTPS redirect ہو اور درست certificate کے ساتھ اپنا heading ملے۔ curl میں -k نہ لگائیں، وہ certificate failures چھپاتا ہے۔

curl -I http://app.example.com/
curl -I https://app.example.com/
curl -fsS https://app.example.com/

ابھی test deployment پر server میں sudo reboot کریں۔ واپس آنے پر deploy سے login، systemctl is-active nginx اور بیرونی HTTPS دوبارہ جانچیں۔ Reboot، SSH بند کرتا ہے؛ مشین واپس نہ آئے تو console استعمال کریں۔

ناکام check کی وجہ اور recovery record

چھوٹی اسکرین پر باقی کالم دیکھنے کے لیے جدول کو پہلو میں اسکرول کریں۔

علامتپہلی جانچ
SSH timeoutAddress، provider/guest firewalls، recovery console
Permission denied (publickey)User، private key، authorized_keys permissions
Default Nginx pageDNS destination، server_name، enabled site
Certificate validation failurePublic A/AAAA اور port 80
Nginx تبدیلی کے بعد ناکامsudo nginx -t اور service logs

Login کے لیے SSH error diagnosis کریں۔ Site files، Nginx config، DNS records اور rebuild steps VPS سے باہر رکھیں۔ Backed-up certificate private keys کو محفوظ storage چاہیے۔

Availability اور certificate expiry alerts رکھیں۔ ایک کامیاب request اگلے renewal کی نگرانی نہیں کرتی۔ الگ directory میں file restore جانچیں؛ پورے site کو باقی assets اور certificates بھی چاہیے۔ Database/runtime کے لیے اپنا service اور consistent backup طریقہ درکار ہے۔ پورے stack کا بوجھ الگ ناپیں۔

سوال جواب

کیا یہ commands چلتی ویب سائٹ پر استعمال کروں؟

پہلے الگ test VPS پر آزمائیں۔ مثال files بناتی، firewall enable کر سکتی اور Certbot سے Nginx بدلتی ہے۔ Existing server کی sites، access اور recovery پہلے دیکھنی ہوگی۔

کیا اس میں WordPress یا database نصب ہوتا ہے؟

نہیں۔ پہلے static HTTPS ویب سائٹ تیار ہوتی ہے۔ پھر runtime شامل کرکے startup، health checks اور data recovery الگ جانچیں۔

یہ نئی Ubuntu 24.04 machine، direct DNS اور SSH port 22 کی documented مثال ہے۔ Oracle Cloud Ubuntu پر UFW چھوڑیں۔ ہر provider image پر پوری procedure چلانے کا دعویٰ نہیں۔

اصل تکنیکی دستاویزات

متعلقہ رہنما مضامین