VS Code Remote SSH va Dev Containers: serverda va konteynerda ishlash
Chuqur3 daqInnovialabs tahririyati
Qisqacha
Remote SSH masofaviy mashinadagi loyihani xuddi lokal kabi ochadi, Dev Containers esa ishlab chiqish muhitini devcontainer.json tavsifi bo‘yicha Docker konteynerida ishga tushiradi — natijada butun jamoada bir xil muhit bo‘ladi.
Ikki rejim haqida qisqacha
Ikkala rejim bir xil tuzilgan: VS Code interfeysi sizning kompyuteringizda qoladi, fayllar, terminal, til serverlari va ko‘pchilik kengaytmalar esa kod joylashgan joyda ishlaydi.
- Remote SSH — kod va jarayonlar masofaviy serverda yoki kuchli ish mashinasida. Ulanish SSH orqali bo‘ladi, serverga VS Code’ning server qismi avtomatik o‘rnatiladi.
- Dev Containers — loyiha Docker konteyneri ichida ochiladi. Unda nima o‘rnatilganini repozitoriydagi
devcontainer.jsonfayli tavsiflaydi.
Rejimlarni birlashtirish mumkin: serverga SSH orqali ulanib, loyihani o‘sha yerda konteynerda ochish.
Qachon qaysi birini tanlash kerak
| Vazifa | Mos keladi |
|---|---|
| Noutbuk kuchsiz, loyiha og‘ir | Kuchli mashinaga Remote SSH |
| Serverdagi ma’lumotlar yoki GPU kerak | Remote SSH |
| Yangi dasturchi bir necha daqiqada ishni boshlashi kerak | Dev Containers |
| Turli loyihalarga tillar va vositalarning turli versiyalari kerak | Dev Containers |
| Butun jamoa va CI’da bir xil muhit muhim | Dev Containers |
Remote SSH’ni sozlash
- Microsoft’ning Remote - SSH kengaytmasini o‘rnating.
- Serverga oddiy terminaldan kalit orqali ulanish mumkinligiga ishonch hosil qiling.
- Xostni
~/.ssh/configfayliga qo‘shing:
Host staging
HostName 203.0.113.10
User deploy
IdentityFile ~/.ssh/id_ed25519
- Buyruqlar palitrasida Remote-SSH: Connect to Host... ni tanlang va
stagingni ko‘rsating. - Serverdagi loyiha papkasini oching.
Ilova serverda tinglayotgan portlarni Ports paneli orqali lokal mashinaga uzatish va saytni brauzerda localhost orqali ochish mumkin.
E’tibor bering: kod bilan ishlaydigan kengaytmalarni (linterlar, debaggerlar, til plaginlari) serverga qayta o‘rnatish kerak — muharrir buni o‘zi taklif qiladi.
Dev Containers’ni sozlash
Dev Containers kengaytmasi va o‘rnatilgan Docker (Docker Desktop yoki Docker Engine) kerak bo‘ladi. Loyiha ildizida .devcontainer/devcontainer.json yarating:
{
"name": "web-app",
"image": "mcr.microsoft.com/devcontainers/base:ubuntu",
"features": {
"ghcr.io/devcontainers/features/node:1": { "version": "lts" }
},
"forwardPorts": [3000],
"postCreateCommand": "npm ci",
"customizations": {
"vscode": {
"extensions": ["dbaeumer.vscode-eslint", "esbenp.prettier-vscode"]
}
}
}
Bu yerda nima bo‘lyapti:
- image — bazaviy obraz. Uning o‘rniga
buildmaydoni orqali o‘zDockerfilefaylingizni ko‘rsatishingiz mumkin. - features — vositalarni qo‘shimcha o‘rnatadigan tayyor bloklar: til, CLI, ma’lumotlar bazasi klientlari.
- forwardPorts — mashinangizdan ochiladigan portlar.
- postCreateCommand — konteyner yaratilgandan keyingi buyruq, odatda bog‘liqliklarni o‘rnatish.
- customizations.vscode.extensions — har bir ishtirokchida konteyner ichiga o‘rnatiladigan kengaytmalar.
So‘ng Dev Containers: Reopen in Container ni bajaring. Konfiguratsiya o‘zgargandan keyin — Rebuild Container.
Agar loyihaga ma’lumotlar bazasi va kesh kerak bo‘lsa, image o‘rniga dockerComposeFile va service dan foydalaning: VS Code Docker Compose’dagi barcha servislarni ko‘taradi va keraklisiga ulanadi.
Tezlik
- Remote SSH tarmoqqa bog‘liq. Matn kiritish lokal va sekinlashmaydi, lekin fayl amallari va terminal ulanish orqali ishlaydi. Sizga yaxshi aloqasi bor serverni tanlang.
- macOS va Windows’da Dev Containers virtual mashina orqali ishlaydi, xostdagi umumiy papkalar esa fayllari ko‘p loyihalarda (masalan,
node_modules) sekin bo‘lishi mumkin. Clone Repository in Container Volume buyrug‘i yordam beradi — kod darhol Docker tomida saqlanadi. - Windows’da loyihani
C:diskda emas, WSL 2 fayl tizimi ichida saqlang. - Og‘ir qadamlarni (tizim paketlarini o‘rnatish) obraz yoki features’ga chiqaring — shunda ular har safar bajarilmay, keshlanadi.
Jamoa uchun foydasi
- Bir necha daqiqada onbording: repozitoriyni klonlash, konteynerda ochish — va hammasi ishlaydi.
- «Menda ishlayapti» muammosi yo‘q: til, utilitalar va kengaytmalar versiyalari repozitoriyda qayd etilgan.
- Muhitdagi o‘zgarishlar oddiy kod kabi review’dan o‘tadi.
- Xuddi shu
devcontainer.jsonni GitHub Codespaces kabi bulutli muhitlar va CI uchundevcontainerkonsol vositasi ham tushunadi. Spetsifikatsiya ochiq: containers.dev.
Ko‘p uchraydigan xatolar
- Maxfiy ma’lumotlarni to‘g‘ridan-to‘g‘ri
devcontainer.jsonga yozish — u Git’ga tushadi. Ularni muhit o‘zgaruvchilari yoki repozitoriydan tashqaridagi lokal fayllar orqali uzating. latestkabi o‘zgaruvchan tegli obrazni ko‘rsatish — muhit sizdan bexabar o‘zgara boshlaydi.- Fayl huquqlarini unutish: konteynerda root sifatida ishlasangiz, xostda sudo’siz o‘zgartirib bo‘lmaydigan fayllar paydo bo‘lishi mumkin.
remoteUserdan foydalaning.