0

[Series VS Code Mastery] Bài 7: Kỷ nguyên Remote Development - Chấm dứt thảm cảnh "It works on my machine"

Tối ưu hóa môi trường dev với VS Code Remote Development

Chào anh em, làm hệ thống backend phức tạp đòi hỏi chúng ta phải tương tác với đủ thứ công nghệ: từ Node.js, Golang, cho đến các hệ thống cache như Redis hay message broker. Cài đặt toàn bộ đống này lên máy thật (nhất là Windows) vừa rác máy, vừa tiềm ẩn nguy cơ xung đột phiên bản, dẫn đến việc code chạy ở máy mình thì mượt nhưng deploy lên môi trường staging lại lỗi tùm lum.

Microsoft đã tung ra bộ ba extension Remote Development (WSL, SSH, và Dev Containers) để định nghĩa lại hoàn toàn cách chúng ta setup môi trường. Hôm nay chúng ta sẽ cùng bóc tách chúng.

1. Remote - SSH: Code thẳng trên Server như code ở Local

Nếu anh em từng phải SSH vào một con VPS Linux, dùng vim hay nano để hì hục sửa từng dòng code hoặc đọc file log dài ngoằng, thì extension Remote - SSH sẽ là một sự cứu rỗi.

  • Cách hoạt động: VS Code sẽ cài một server ẩn cực nhẹ lên máy chủ từ xa của anh em qua giao thức SSH. Sau đó, nó kết nối VS Code trên máy thật của anh em với server đó.
  • Trải nghiệm: Anh em vẫn dùng giao diện VS Code quen thuộc, phím tắt quen thuộc, theme yêu thích... nhưng toàn bộ mã nguồn, các lệnh Terminal, và tiến trình build đều được thực thi 100% bằng sức mạnh CPU/RAM của con VPS.
  • Port Forwarding tự động: Đây là tính năng ăn tiền nhất. Nếu anh em start một server Golang ở port 8080 trên VPS, VS Code sẽ tự động forward port đó về localhost:8080 trên máy tính của anh em. Anh em có thể mở trình duyệt hoặc dùng REST Client gọi API mượt mà như thể server đang chạy trên chính máy mình.

2. WSL (Windows Subsystem for Linux): Sức mạnh Linux trong lòng Windows

Với anh em dùng hệ điều hành Windows, việc chạy các script backend, quản lý quyền file (chmod), hay chạy Docker đôi khi gặp rất nhiều rào cản. Cài máy ảo thì quá nặng nề.

WSL 2 ra đời cho phép anh em chạy một nhân Linux thật (thường là Ubuntu) ngay bên trong Windows với hiệu năng gần như native. Khi kết hợp với extension WSL của VS Code:

  • Anh em mở trực tiếp thư mục code nằm bên trong phân vùng Linux.
  • Terminal mặc định của VS Code sẽ là Zsh/Bash của Ubuntu.
  • Các thao tác thao tác với hệ thống file, chạy Docker compose (như spin up nhanh một cụm PostgreSQL + Redis để test) sẽ mượt và nhanh hơn gấp nhiều lần so với chạy Docker Desktop thuần trên Windows.

3. Dev Containers: Môi trường Dev "Đóng Hộp" cho cả Team

Đây là đỉnh cao của quản lý môi trường phát triển. Giả sử team có người mới onboard (nhận việc), thay vì bắt họ dành cả buổi sáng đọc file README dài dằng dặc, cài đặt đúng phiên bản Node 18, đúng version Go 1.21, rồi cài extension này nọ... Dev Containers sẽ lo hết.

Cách làm: Anh em tạo một thư mục .devcontainer chứa file devcontainer.json và Dockerfile định nghĩa toàn bộ môi trường:

{
	"name": "Backend Microservice Env",
	"image": "mcr.microsoft.com/devcontainers/go:1.21",
	"features": {
		"ghcr.io/devcontainers/features/node:1": {
			"version": "18"
		}
	},
	"customizations": {
		"vscode": {
			"extensions": [
				"golang.go",
				"humao.rest-client",
				"cweijan.vscode-redis-client"
			]
		}
	}
}

Điều kỳ diệu xảy ra: Khi bất kỳ ai trong team mở project này, VS Code sẽ hỏi: "Bạn có muốn Reopen in Container không?".

Nếu chọn Yes, VS Code sẽ tự động build một Docker container dựa trên file cấu hình trên, nhét toàn bộ source code vào đó, cài đặt sẵn các extension bắt buộc (như Go, REST Client), và kết nối Editor vào. Môi trường của toàn bộ thành viên trong team sẽ giống hệt nhau đến từng bit, từ hệ điều hành, biến môi trường cho đến các thư viện hệ thống.

Lời kết

Việc làm chủ Remote Development giúp anh em giải phóng hoàn toàn máy tính cá nhân khỏi những phần mềm rác, đồng thời tự tin 100% rằng code mình viết ra sẽ chạy hoàn hảo trên production. Hãy dùng thử Dev Containers ở project tiếp theo, anh em sẽ không bao giờ muốn quay lại cách setup truyền thống nữa đâu!


All rights reserved

Viblo
Hãy đăng ký một tài khoản Viblo để nhận được nhiều bài viết thú vị hơn.
Đăng kí