Python

Django loyihani GitHub dan VPS serverga deploy qilish (HTTPS bilan)

10 February, 2026 30 daqiqa o'qish 125 marta ko'rilgan
Django loyihani GitHub dan VPS serverga deploy qilish (HTTPS bilan)

 

Ko'pchilik yangi dasturchilar loyihani yozishni biladi, lekin uni serverga joylash qismida qiynaladi. Ushbu qo'llanma aynan shu muammoni hal qiladi — har bir buyruqni nima uchun ishlatayotganimizni tushuntirib boraman.
 

Keling, ishni boshlaymiz! 🚀
 

 


 

Nimalar kerak bo'ladi?

Boshlamasdan oldin, quyidagilar tayyor bo'lishi kerak:

🔹 GitHub dagi tayyor Django loyiha — loyihangiz GitHub repositoriyasida bo'lishi kerak.

🔹 VPS server — Eskiz.uz dan Ubuntu 22.04 yoki 24.04 operatsion tizimli server sotib oling.

🔹 Domen nomi — masalan: mydomain.uz (Ahost, Webhost yoki boshqa provayderdan).

🔹 Kompyuteringizda terminal — Windows da PowerShell, macOS/Linux da Terminal.

🔹 requirements.txt — loyihangizda kerakli kutubxonalar ro'yxati bo'lishi kerak.

 


 

Umumiy arxitektura — nima qanday ishlaydi?

Deploy qilishdan oldin, saytimiz qanday ishlashini tushunib olaylik:

Foydalanuvchi (Brauzer)
        ↓
   HTTPS (443-port) — ma'lumotlar shifrlangan
        ↓
   Nginx (Reverse Proxy) — tashqi so'rovlarni qabul qiladi
        ↓
   Gunicorn (WSGI Server) — Python kodini ishga tushiradi
        ↓
   Django Application — bizning loyihamiz

Oddiy qilib aytsak:

🔹 Nginx — eshik qo'riqchisi. Tashqaridan kelgan har bir so'rovni qabul qiladi.

🔹 Gunicorn — tarjimon. Nginx dan kelgan so'rovni Django tushunadigan tilga o'giradi.

🔹 Django — asl ishchi. So'rovga javob tayyorlaydi.

 

Nega Django ning o'z runserver buyrug'i bilan ishlamaymiz?

Chunki u faqat dasturlash paytida ishlatiladi. Haqiqiy serverda sekin, xavfsiz emas va bir vaqtda ko'p foydalanuvchini ko'tara olmaydi.

 


 

1. VPS serverga ulanish (SSH)

VPS sotib olganingizda sizga 3 ta narsa beriladi: IP manzil, login (odatda root) va parol. Endi serverga ulanamiz.

Terminalni oching va quyidagi buyruqni yozing:

ssh root@185.217.131.xx

🔹 ssh — Secure Shell, serverga xavfsiz ulanish protokoli. Barcha ma'lumotlar shifrlangan holda uzatiladi.

🔹 root — serverdagi eng yuqori darajali foydalanuvchi (administrator).

🔹 @ — ajratuvchi belgi ("kimda" degan ma'noda).

🔹 185.217.131.xx — serveringizning IP manzili (o'zingiznikini yozing).

Birinchi marta ulanganda Are you sure you want to continue connecting? deb so'raydi — yes yozing va Enter bosing. Keyin parolni kiriting.

 

Eslatma: Parolni yozayotganda ekranda hech narsa ko'rinmaydi — bu normal. Yozib bo'lib Enter bosing.

 


 

2. Serverni yangilash va kerakli dasturlarni o'rnatish

 

Serverga ulangandan keyin, birinchi ish — tizimni yangilash. Bu xavfsizlik uchun juda muhim.

Tizimni yangilash

apt update

🔹 apt — Ubuntu ning paket menejeri (dasturlarni o'rnatish/yangilash vositasi).

🔹 update — mavjud dasturlar ro'yxatini yangilaydi. Bu hali hech narsani o'rnatmaydi, faqat "bozordagi narxlar"ni tekshiradi.

apt upgrade -y

🔹 upgrade — eski dasturlarni yangi versiyaga ko'taradi.

🔹 -y — "Hamma savolga ha de" degani. Har bir paket uchun tasdiq so'ramasdan o'rnatadi.

 

Kerakli dasturlarni o'rnatish

apt install python3 python3-pip python3-venv nginx certbot python3-certbot-nginx git -y

Har bir paketni tushuntiray:

python3 -> Python dasturlash tili — Django Python da yozilgan
python3-pip -> pip — Python kutubxonalarini o'rnatish vositasi
python3-venv -> Virtual muhit yaratish uchun — loyihalar bir-biriga aralashmasligi uchun
nginx -> Web server — tashqi so'rovlarni qabul qilib Django ga yo'naltiradi
certbot -> Bepul SSL sertifikat olish vositasi (Let's Encrypt)
python3-certbot-nginx -> Certbot ning Nginx bilan ishlash plagini
git -> GitHub dan loyihani yuklab olish (clone) uchun

 

 


 

3. Yangi foydalanuvchi yaratish (xavfsizlik)

 

root bilan doimiy ishlash xavfli — bitta noto'g'ri buyruq butun serverni buzishi mumkin. Shuning uchun alohida foydalanuvchi yaratamiz.

adduser deploy

🔹 adduser — yangi foydalanuvchi yaratish buyrug'i.

🔹 deploy — foydalanuvchi nomi (xohlagan nomingizni yozing).

Parol va ma'lumotlarni so'raydi — parolni kiriting, qolganini Enter bosib o'tkazib yuboring.

usermod -aG sudo deploy

🔹 usermod — foydalanuvchi sozlamalarini o'zgartirish.

🔹 -aG sudodeploy foydalanuvchini sudo guruhiga qo'shish.

🔹 sudo guruhi — administrator buyruqlarini bajarish huquqini beradi.

su - deploy

🔹 su — foydalanuvchini almashtirish (switch user).

🔹 - — yangi foydalanuvchining muhitini to'liq yuklaydi.

Endi siz deploy foydalanuvchi sifatida ishlaysiz. Bundan keyin administrator buyruqlari uchun oldiga sudo qo'shamiz.

 


 

4. GitHub dan loyihani klonlash

 

Endi GitHub dagi tayyor loyihamizni serverga yuklab olamiz.

cd ~

🔹 cd ~ — uy papkasiga (/home/deploy) o'tish.

git clone https://github.com/username/myproject.git

🔹 git clone — GitHub dagi repositoriyani serverga nusxalab olish.

🔹 https://github.com/username/myproject.git — loyihangizning GitHub manzili.

O'zingiznikini yozing!

Agar repositoriya private (yopiq) bo'lsa, GitHub username va Personal Access Token so'raydi. Token ni GitHub → Settings → Developer settings → Personal access tokens dan olishingiz mumkin.

cd myproject

🔹 Loyiha papkasiga kirish.

 


 

5. Virtual environment yaratish

 

Virtual environment (venv) — bu izolyatsiya qilingan Python muhiti. Har bir loyiha o'zining kutubxonalarini alohida saqlaydi. Masalan, bitta loyihada Django 4.2, boshqasida Django 5.0 ishlatishingiz mumkin — ular bir-biriga xalaqit bermaydi.

python3 -m venv venv

🔹 python3 — Python interpretatori.

🔹 -m venv — venv modulini ishga tushirish.

🔹 venv (oxirgi) — yaratilayotgan muhit papkasining nomi.

Bu buyruq venv/ papkasini yaratadi, ichida alohida Python va pip bo'ladi.

source venv/bin/activate

🔹 source — skriptni joriy terminalda ishga tushirish.

🔹 venv/bin/activate — virtual muhitni faollashtirish skripti.

Aktivlashtirgandan keyin terminal boshida (venv) yozuvi paydo bo'ladi. Endi pip install qilgan kutubxonalar faqat shu muhitga o'rnatiladi.

 

⚠️ Muhim: Har safar serverga qayta ulanganda, loyiha ustida ishlash uchun avval cd ~/myproject && source venv/bin/activate buyrug'ini bajarishni unutmang!

 

 


 

6. Kutubxonalarni o'rnatish (requirements.txt)

 

Loyihangizda requirements.txt fayli bo'lishi kerak — unda barcha kerakli kutubxonalar ro'yxati yozilgan.

pip install -r requirements.txt

🔹 pip install — Python kutubxonalarini o'rnatish.

🔹 -r requirements.txt — ro'yxatdagi barcha kutubxonalarni birdan o'rnatish.

Agar requirements.txt da gunicorn yo'q bo'lsa, alohida o'rnatamiz:

pip install gunicorn

🔹 gunicorn — production WSGI server. Django ning runserver o'rniga ishlatiladi.

 

Maslahat: Lokalda pip freeze > requirements.txt buyrug'i bilan requirements faylni yangilashni unutmang. Unda gunicorn ham bo'lishi kerak.

 


 

7. .env faylni serverda yaratish

 

.env fayl — loyihadagi maxfiy ma'lumotlarni (parollar, API kalitlar, secret key) saqlash uchun ishlatiladi. Bu fayl hech qachon GitHub ga yuklanmaydi (.gitignore da bo'ladi). Shuning uchun serverda qo'lda yaratamiz.

nano .env

🔹 nano — terminal ichidagi matn muharriri.

🔹 .env — yaratilayotgan fayl nomi (nuqta bilan boshlanadi — yashirin fayl).

Fayl ichiga loyihangizga kerakli o'zgaruvchilarni yozing. Masalan:

SECRET_KEY=your-super-secret-key-here
DEBUG=False
ALLOWED_HOSTS=your_domain.uz,www.your_domain.uz,server_IP_manzili

DATABASE_URL=sqlite:///db.sqlite3

Saqlash: Ctrl+OEnter → Chiqish: Ctrl+X

 

Har bir o'zgaruvchini tushuntiray:

 

SECRET_KEY -> Django ning maxfiy kaliti — shifrlash uchun ishlatiladi. Uni GitHub ga hech qachon yuklamang
DEBUG -> False — production da albatta o'chiriladi. True bo'lsa xatolikda maxfiy ma'lumotlar ko'rinadi
ALLOWED_HOSTS -> Qaysi domen/IP orqali saytga kirish mumkinligini belgilaydi
DATABASE_URL -> Ma'lumotlar bazasi manzili. PostgreSQL ishlatayotgan bo'lsangiz: postgres://user:pass@localhost:5432/dbname

 

⚠️ Muhim: .env fayldagi qiymatlarni tirnoqsiz yozing. Qiymatlar orasida bo'sh joy bo'lmasin (= belgisi atrofida).

 

settings.py da .env ni o'qish

 

Loyihangizning settings.py faylida .env dan o'qish sozlangan bo'lishi kerak. Eng mashhur 2 ta usul:

 

1-usul: python-decouple kutubxonasi bilan:

# settings.py
from decouple import config

SECRET_KEY = config('SECRET_KEY')
DEBUG = config('DEBUG', default=False, cast=bool)
ALLOWED_HOSTS = config('ALLOWED_HOSTS', cast=lambda v: [s.strip() for s in v.split(',')])

2-usul: django-environ kutubxonasi bilan:

# settings.py
import environ

env = environ.Env()
environ.Env.read_env()  # .env faylni o'qiydi

SECRET_KEY = env('SECRET_KEY')
DEBUG = env.bool('DEBUG', default=False)
ALLOWED_HOSTS = env.list('ALLOWED_HOSTS')

Eslatma: Bu kutubxonalardan biri requirements.txt da bo'lishi kerak. Agar yo'q bo'lsa: pip install python-decouple yoki pip install django-environ

 


 

8. Django sozlamalarini tekshirish

 

.env faylni yaratgandan keyin, Django buyruqlarini bajaramiz:

python manage.py migrate

🔹 migrate — ma'lumotlar bazasi jadvallarini yaratish/yangilash. Django modellaridagi o'zgarishlarni bazaga qo'llaydi.

python manage.py collectstatic --noinput

🔹 collectstatic — barcha static fayllarni (CSS, JS, rasmlar) bitta papkaga yig'adi.

🔹 --noinput — tasdiqlash so'ramasdan bajaradi.

🔹 Bu Nginx uchun kerak — u static fayllarni shu papkadan tez uzatadi.

Endi sinab ko'ramiz:

python manage.py runserver 0.0.0.0:8000

 

Brauzerda http://SERVER_IP:8000 oching — saytingiz ko'rinishi kerak. To'xtatish: Ctrl+C.

 


 

9. Gunicorn ni sinab ko'rish

 

Django ning runserver buyrug'i faqat dasturlash paytida ishlatiladi. Haqiqiy serverda Gunicorn ishlatamiz.

gunicorn config.wsgi:application --bind 0.0.0.0:8000

🔹 gunicorn — Gunicorn serverni ishga tushirish.

🔹 config.wsgi — Django loyihamizdagi wsgi.py faylga yo'l. Muhim: config o'rniga sizning loyihangiz nomini yozing. Masalan, loyihangiz mysite bo'lsa: mysite.wsgi:application.

🔹 application — Django ilovasi obyekti (wsgi.py ichida aniqlangan).

🔹 --bind 0.0.0.0:8000 — barcha IP lardan 8000-portda so'rovlarni qabul qilish.

 

Brauzerda http://SERVER_IP:8000 tekshiring. Ishlayaptimi? Ajoyib! Ctrl+C bosib to'xtating.

 

Eslatma: Agar config.wsgi ishlamasa, loyiha papkangizda wsgi.py faylni qidiring: find . -name wsgi.py — u qaysi papkada bo'lsa, o'sha nomni yozing.

 


 

10. Gunicorn ni systemd service qilish

 

Hozir Gunicorn ni qo'lda ishga tushiryapmiz. Lekin server qayta yoqilganda nima bo'ladi? Gunicorn o'zi ishga tushmaydi. Shuning uchun systemd service yaratamiz — u Gunicorn ni avtomatik boshqaradi.

sudo nano /etc/systemd/system/gunicorn.service

🔹 sudo — administrator huquqi bilan bajarish.

🔹 /etc/systemd/system/ — tizim servislari saqlanadigan papka.

 

Quyidagi mazmunni yozing:

[Unit]
Description=Gunicorn daemon for Django
After=network.target

[Service]
User=deploy
Group=www-data
WorkingDirectory=/home/deploy/myproject
ExecStart=/home/deploy/myproject/venv/bin/gunicorn \
    --access-logfile - \
    --workers 3 \
    --bind unix:/home/deploy/myproject/gunicorn.sock \
    config.wsgi:application

[Install]
WantedBy=multi-user.target

 

⚠️ Muhim: config.wsgi:application qismida config o'rniga o'z loyihangiz nomini yozing! WorkingDirectory va yo'llarni ham loyihangiz papkasiga moslashtiring.

 

Har bir qatorni tushuntiray:

[Unit] -> Service haqida umumiy ma'lumot bo'limi
Description -> Service tavsifi — systemctl status da ko'rinadi
After=network.target -> Internet tayyor bo'lgandan keyin ishga tushadi
[Service] -> Service qanday ishlashi haqida
User=deploy -> Qaysi foydalanuvchi nomidan ishlaydi
Group=www-data -> Nginx guruhi — fayllarni o'qiy olishi uchun
WorkingDirectory -> Loyiha papkasi — buyruqlar shu papkadan bajariladi
ExecStart -> Ishga tushirish buyrug'i — venv ichidagi gunicorn
--workers 3 -> 3 ta ishchi jarayon — bir vaqtda 3 ta so'rovni qayta ishlaydi
--bind unix:...sock -> TCP port o'rniga Unix socket ishlatadi (tezroq va xavfsizroq)
[Install] -> Service qachon ishga tushishini belgilash
WantedBy=multi-user.target -> Server yuklanganda avtomatik ishga tushadi

 

Service ni ishga tushirish

sudo systemctl daemon-reload

🔹 systemd ga "yangi service fayl qo'shildi" deb xabar berish. Har safar service faylini o'zgartirganda shu buyruqni bajarish kerak.

sudo systemctl start gunicorn

🔹 Gunicorn servisini hozir ishga tushirish.

sudo systemctl enable gunicorn

🔹 Server qayta yoqilganda Gunicorn avtomatik ishga tushishini ta'minlash.

sudo systemctl status gunicorn

🔹 Service holatini tekshirish. active (running) yozuvi ko'rinishi kerak. Chiqish uchun q tugmasini bosing.

 


 

11. Nginx ni sozlash

 

Nginx — bu reverse proxy. U tashqi so'rovlarni qabul qilib, Gunicorn ga yo'naltiradi. Bundan tashqari, static fayllarni tez uzatadi va SSL/HTTPS ni boshqaradi.

 

Konfiguratsiya faylini yaratish

sudo nano /etc/nginx/sites-available/myproject

Quyidagi mazmunni yozing:

server {
    listen 80;
    server_name your_domain.uz www.your_domain.uz;

    location = /favicon.ico {
        access_log off;
        log_not_found off;
    }

    location /static/ {
        root /home/deploy/myproject;
    }

    location /media/ {
        root /home/deploy/myproject;
    }

    location / {
        include proxy_params;
        proxy_pass http://unix:/home/deploy/myproject/gunicorn.sock;
    }
}

Har bir qismni tushuntiray:

 

listen 80 80-portni tinglash (HTTP). Keyinchalik certbot buni 443 ga o'zgartiradi
server_name Qaysi domen uchun ishlashini belgilaydi
location /favicon.ico Brauzer tab ikonkasini so'raganda xatolik logga yozilmasin
location /static/ Static fayllarni (CSS, JS) Nginx o'zi tez uzatadi
location /media/ Foydalanuvchi yuklagan fayllar (rasmlar va h.k.) uchun
location / Boshqa barcha so'rovlarni Gunicorn ga yo'naltiradi
proxy_pass unix:...sock So'rovni Gunicorn ning Unix socket iga yo'naltiradi

 

Konfiguratsiyani faollashtirish

sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/

🔹 ln -s — symbolic link (yorliq) yaratish. Nginx faqat sites-enabled papkadagi konfiguratsiyalarni o'qiydi, shuning uchun sites-available dan havola qilamiz.

sudo nginx -t

🔹 Konfiguratsiyada xato bor-yo'qligini tekshirish. syntax is ok va test is successful deb chiqishi kerak.

sudo systemctl restart nginx

🔹 Nginx ni qayta ishga tushirish — yangi konfiguratsiya kuchga kiradi.

 

Endi brauzerda http://your_domain.uz oching — saytingiz ko'rinishi kerak!

 


 

12. Domen ulash (DNS sozlash)

 

Agar domeningiz hali serverga ulanmagan bo'lsa, domen provayderingiz (Ahost, Webhost, Reg.uz) boshqaruv paneliga kiring va DNS bo'limida quyidagi yozuvlarni qo'shing:

 

Turi       Nom              Qiymat                    TTL
A        @           185.217.131.xx                    3600
A       www           185.217.131.xx                    3600

 

Tushuntirish:

🔹 A yozuvi — domen nomini IP manzilga bog'laydi. Brauzer "mydomain.uz" desa, internet "185.217.131.xx ga bor" deydi.

🔹 @ — asosiy domen (mydomain.uz) ni bildiradi.

🔹 wwwwww.mydomain.uz uchun alohida yozuv.

🔹 TTL 3600 — Time To Live, DNS keshning amal qilish muddati (3600 soniya = 1 soat).

 

⚠️ DNS o'zgarishlari 5 daqiqadan 48 soatgacha kuchga kirishi mumkin. Odatda 10–30 daqiqada tayyor bo'ladi. Tekshirish uchun: ping mydomain.uz

 


 

13. SSL sertifikat o'rnatish (HTTPS)

 

Bu eng muhim qadamlardan biri! HTTPS ma'lumotlarni shifrlaydi. HTTPS siz:

🔹 Brauzerlar "Xavfsiz emas" deb ogohlantirish ko'rsatadi.

🔹 Foydalanuvchilar ma'lumotlari ochiq uzatiladi.

🔹 Google SEO reytingi pastlaydi.

 

Biz Let's Encrypt — bepul SSL sertifikat beruvchi tashkilotdan foydalanamiz.

sudo certbot --nginx -d your_domain.uz -d www.your_domain.uz

🔹 certbot — SSL sertifikat olish vositasi.

🔹 --nginx — Nginx konfiguratsiyasini avtomatik o'zgartiradi (443-port, SSL sozlamalari, HTTP→HTTPS yo'naltirish).

🔹 -d — qaysi domenlar uchun sertifikat olish.

Certbot sizdan email so'raydi va shartlarni qabul qilishni taklif qiladi. Email ni kiriting va Y bosing.

 

Certbot avtomatik ravishda:

 

1. Domeningiz haqiqatan ham shu serverga tegishli ekanini tekshiradi.

2. SSL sertifikat yaratib /etc/letsencrypt/ papkasiga saqlaydi.

3. Nginx konfiguratsiyasiga HTTPS sozlamalarini qo'shadi.

4. HTTP dan HTTPS ga avtomatik yo'naltirish (redirect) qo'shadi.

 

Avtomatik yangilanishni tekshirish

Let's Encrypt sertifikatlari 90 kunga amal qiladi. Lekin tashvishlanmang — certbot avtomatik yangilaydi:

sudo certbot renew --dry-run

🔹 --dry-run — haqiqiy yangilamasdan, faqat sinab ko'rish. 

 

Congratulations yozuvi chiqsa — hammasi ishlaydi! Certbot har kuni avtomatik tekshiradi va muddati yaqinlashganda yangilaydi.

 


 

14. Firewall (UFW) sozlash

 

Firewall — serverga kirish trafigini nazorat qilish vositasi. Faqat kerakli portlarni ochamiz, qolganini yopamiz.

sudo ufw allow OpenSSH

🔹 Bu birinchi qilinadi! SSH ulanishiga ruxsat berish (22-port). Aks holda serverdan uzilasiz va qayta ulana olmaysiz!

sudo ufw allow 'Nginx Full'

🔹 Nginx uchun 80 (HTTP) va 443 (HTTPS) portlarni ochish.

sudo ufw enable

🔹 Firewall ni yoqish. Command may disrupt existing ssh connections deb ogohlantiradi — y bosing.

sudo ufw status

🔹 Firewall holatini ko'rish — qaysi portlar ochiq ekanini ko'rsatadi. 

 

⚠️ Eslatma: OpenSSH ni ruxsat bermasdan UFW ni yoqsangiz, serverdan butunlay uzilasiz! Har doim avval SSH ga ruxsat bering.

 


 

15. Yakuniy tekshirish

 

Barcha qadamlar tugadi! Endi tekshiramiz:

Tekshirish        Kutilgan natija
https://your_domain.uz oching          Saytingiz ko'rinishi kerak
Brauzer manzil satri          Qulf 🔒 belgisi ko'rinishi kerak (HTTPS ishlayapti)
http://your_domain.uz oching          Avtomatik HTTPS ga yo'naltirilishi kerak
sudo reboot qiling         Server qayta yoqilgandan keyin sayt ishlashini tekshiring

 

 


 

Ko'p uchraydigan xatolar va yechimlar

 

❌ 502 Bad Gateway

Sabab: Gunicorn ishlamayapti.

Yechim:

sudo systemctl restart gunicorn
sudo systemctl status gunicorn
sudo journalctl -u gunicorn -n 50   # xatolikni ko'rish

❌ 403 Forbidden

Sabab: Papka huquqlari noto'g'ri.

Yechim:

chmod 755 /home/deploy

❌ ModuleNotFoundError

Sabab: Kutubxonalar o'rnatilmagan yoki venv aktivlanmagan.

Yechim:

cd ~/myproject
source venv/bin/activate
pip install -r requirements.txt
sudo systemctl restart gunicorn

❌ .env o'zgaruvchilari o'qilmayapti

Sabab: .env fayl noto'g'ri joyda yoki formati xato.

Yechim:

# .env faylni tekshiring — manage.py bilan bir papkada bo'lishi kerak
ls -la ~/myproject/.env

# Ichini tekshiring — bo'sh joy va tirnoq bo'lmasligi kerak
cat ~/myproject/.env

❌ "DisallowedHost" xatosi

Sabab: ALLOWED_HOSTS ga domen qo'shilmagan.

Yechim: .env fayldagi ALLOWED_HOSTS ga domenni qo'shing:

nano ~/myproject/.env
# ALLOWED_HOSTS=your_domain.uz,www.your_domain.uz qilib yozing
sudo systemctl restart gunicorn

❌ Static fayllar ko'rinmayapti

Sabab: collectstatic bajarilmagan.

Yechim:

cd ~/myproject
source venv/bin/activate
python manage.py collectstatic --noinput
sudo systemctl restart nginx

Foydali log buyruqlari

Xatolikni topishda loglar eng yaxshi do'stingiz:

# Gunicorn loglari (Python xatoliklar shu yerda)
sudo journalctl -u gunicorn -n 50

# Nginx xatolik logi
sudo tail -f /var/log/nginx/error.log

# Nginx kirish logi (kim, qachon, qaysi sahifani ochgan)
sudo tail -f /var/log/nginx/access.log

 

 


 

Loyihani yangilash (keyinchalik)

Kelajakda kodni yangilaganingizda, serverga quyidagicha yuklaysiz:

cd ~/myproject
source venv/bin/activate
git pull origin main

🔹 git pull — GitHub dagi yangi o'zgarishlarni serverga yuklab olish.

pip install -r requirements.txt

🔹 Yangi kutubxonalar qo'shilgan bo'lsa, ularni o'rnatish.

python manage.py migrate
python manage.py collectstatic --noinput

🔹 Ma'lumotlar bazasi va static fayllarni yangilash.

sudo systemctl restart gunicorn

🔹 Gunicorn ni qayta ishga tushirish — yangi kod kuchga kiradi.

 


 

Qisqacha buyruqlar jadvali

 

Barcha buyruqlar ketma-ketligi bir joyda:

# Qadam Buyruq
1 Ulanish ssh root@IP_MANZIL
2 Yangilash apt update && apt upgrade -y
3 Paketlar apt install python3 python3-pip python3-venv nginx certbot python3-certbot-nginx git -y
4 User yaratish adduser deploy && usermod -aG sudo deploy
5 User ga o'tish su - deploy
6 Loyihani klonlash cd ~ && git clone https://github.com/user/repo.git
7 Papkaga kirish cd myproject
8 Venv yaratish python3 -m venv venv && source venv/bin/activate
9 Kutubxonalar pip install -r requirements.txt && pip install gunicorn
10 .env yaratish nano .env
11 Migrate python manage.py migrate
12 Static yig'ish python manage.py collectstatic --noinput
13 Gunicorn test gunicorn config.wsgi:application --bind 0.0.0.0:8000
14 Service yaratish sudo nano /etc/systemd/system/gunicorn.service
15 Service boshlash sudo systemctl daemon-reload && start && enable gunicorn
16 Nginx sozlash sudo nano /etc/nginx/sites-available/myproject
17 Link yaratish sudo ln -s /etc/nginx/sites-available/myproject /etc/nginx/sites-enabled/
18 Nginx tekshirish sudo nginx -t && sudo systemctl restart nginx
19 DNS sozlash Domen provayderda A yozuvi qo'shish
20 SSL o'rnatish sudo certbot --nginx -d domain.uz -d www.domain.uz
21 Firewall sudo ufw allow OpenSSH && sudo ufw allow 'Nginx Full' && sudo ufw enable

 

 


 

 

Xulosa

Tabriklayman! 🎉 Siz GitHub dagi Django loyihangizni VPS serverga muvaffaqiyatli joylashtirgansiz. Endi sizda:

🔹 HTTPS bilan himoyalangan professional sayt bor.

🔹 .env orqali maxfiy ma'lumotlar xavfsiz saqlangan.

🔹 Server qayta yoqilganda ham sayt avtomatik ishlaydi.

🔹 SSL sertifikat avtomatik yangilanadi.

🔹 git pull bilan loyihani osongina yangilash mumkin.

Savollar bo'lsa, bemalol yozing! 😊

// Teglar

#django #python