Với tư cách là một người dùng Windows lâu năm, tôi đã tin dùng hệ điều hành này cho hầu hết các công việc của mình, từ chơi game, thử nghiệm phần cứng mới, cho đến viết các bài báo như thế này. Tuy nhiên, tôi không muốn máy tính chính của mình phải gánh quá nhiều ứng dụng, đặc biệt là những ứng dụng liên quan đến lập trình. Các gói phần mềm xung đột phức tạp hơn gấp trăm lần khi xử lý trên Windows so với Linux, và tôi thà không “làm ô nhiễm” hệ thống của mình bằng một loạt các gói và thư viện phụ thuộc.
Máy ảo (VM) chính là giải pháp hoàn hảo cho những vấn đề này, vì tôi có thể chuyển tất cả công cụ của mình vào một môi trường biệt lập và kết nối với nó thông qua giao thức Remote Desktop Protocol (RDP). Thực tế, Microsoft từng cung cấp các máy ảo được cài đặt sẵn tất cả tiện ích bạn cần trong một môi trường phát triển. Từ khóa ở đây là “từng”, bởi vì, giống như nhiều sản phẩm hữu ích khác có tiềm năng lớn, Microsoft đã gần như loại bỏ dự án này – với các liên kết tải xuống file máy ảo bị “tạm thời không khả dụng” từ tháng 10 năm 2024.
Vì tôi sử dụng home lab của mình cho hầu hết các dự án khác, tôi quyết định tự xây dựng phiên bản môi trường phát triển Windows 11 của riêng mình bên trong một máy ảo. Và tôi rất vui vì đã làm điều đó, vì “quái vật” VM này có thể xử lý mọi thứ tôi giao phó cho nó.
Proxmox – Nền Tảng Ảo Hóa Vượt Trội Cho Home Lab
Nếu bạn đã theo dõi các bài viết của tôi tại blogthuthuat.net, bạn chắc chắn đã biết rằng Proxmox là nền tảng ảo hóa chính trong home lab của tôi. Dĩ nhiên, tôi có thể chọn Hyper-V và triển khai máy ảo trên máy tính chính của mình, nhưng workstation Xeon dual-CPU của tôi cực kỳ phù hợp với hypervisor KVM của Proxmox.
Thách Thức Khi Cài Đặt Máy Ảo Windows 11 Trên Proxmox
Mặc dù Proxmox mạnh mẽ, nhưng việc triển khai một máy ảo Windows đòi hỏi một vài điều chỉnh. Đầu tiên, tôi phải tải xuống VirtIO drivers và gán chúng cho máy ảo sau khi chọn Windows làm hệ điều hành khách. Sau đó, tôi đã bật EFI và TPM Storage trước khi gán ổ cứng local-lvm của mình cho chúng. Đối với số lượng lõi CPU và bộ nhớ, tôi quyết định “phóng tay” một chút với 16 v-cores và 32.768 MB (tức là 32 GB) RAM. Vì Windows 11 không tương thích tốt với VirtIO Ethernet drivers, tôi đã chuyển sang Intel E1000E và khởi động máy ảo.
Ngay sau đó, trình hướng dẫn cài đặt Windows quen thuộc xuất hiện, và tôi đã chọn phiên bản Pro của hệ điều hành. Vì trình hướng dẫn không tự động phát hiện các ổ đĩa lưu trữ của tôi, tôi phải sử dụng VirtIO disk để cài đặt SCSI Passthrough Controller. Phần còn lại của quá trình diễn ra suôn sẻ. Không lâu sau, tôi đã có một bản cài đặt Windows mới tinh.
Tối Ưu Trải Nghiệm Điều Khiển: Từ noVNC Đến RDP và Ứng Dụng Windows
Giao diện truy cập máy ảo Windows 11 qua Remote Desktop Protocol (RDP) trên máy tính chính, thể hiện sự mượt mà và đầy đủ tính năng.
Proxmox hỗ trợ noVNC làm giao diện console mặc định cho máy ảo. Mặc dù nó hoạt động tốt cho hầu hết các dự án, nhưng độ trễ của nó khá đáng chú ý. Hơn nữa, tôi không có quyền truy cập vào clipboard hay các chức năng cần thiết khác với noVNC. Spice là một giải pháp thay thế khá tốt, nhưng tôi đã chọn Remote Desktop Protocol (RDP) thay thế, đây cũng là lý do chính tôi chọn Windows 11 Pro thay vì Home.
Hầu hết các ảnh chụp màn hình này được chụp trên máy tính chính của tôi, nhưng tôi cũng đã chuyển sang sử dụng macOS trong tuần qua. Do đó, tôi cần một ứng dụng để truy cập môi trường phát triển của mình từ MacBook. May mắn thay, App Store có ứng dụng “Windows App” với cái tên khá lạ, cho phép tôi kết nối với máy ảo Windows 11 của mình. Tôi nhanh chóng cài đặt các bản cập nhật phần mềm đang chờ xử lý, tạo một snapshot của máy ảo sạch, và kích hoạt tính năng ảo hóa lồng nhau (nested virtualization) từ shell của Proxmox.
Bộ Công Cụ Phát Triển Cốt Lõi: Visual Studio và Visual Studio Code
Với các bước chuẩn bị ban đầu đã hoàn tất, đã đến lúc trang bị cho môi trường phát triển của tôi những ứng dụng và công cụ thiết yếu. Vì tôi thực sự muốn đi sâu vào lập trình C++ chuyên nghiệp, tôi quyết định bắt đầu với Visual Studio. Chắc chắn, có rất nhiều IDE ngoài kia, nhưng tôi đã sử dụng nó khá nhiều trong quá khứ, vì vậy đây là công cụ tôi quen thuộc nhất.
Visual Studio: Nền Tảng Mạnh Mẽ Cho Lập Trình Chuyên Sâu
Giao diện tích hợp môi trường phát triển (IDE) Visual Studio đang hoạt động trên máy ảo Windows 11, truy cập từ xa qua RDP, sẵn sàng cho lập trình C++.
Sau khi Visual Studio đã được cài đặt và chạy, tôi tiếp tục cài đặt VS Code. Mặc dù tên của chúng tương tự nhau, Visual Studio và Visual Studio Code là hai ứng dụng hoàn toàn khác biệt. Visual Studio “nặng ký” hơn là một IDE bao gồm mọi thứ từ trình gỡ lỗi (debugger) đến trình biên dịch (compiler), trong khi VS Code là một trình soạn thảo code nhẹ hơn. Tôi thích sử dụng VS Code cho các dự án phát triển web và dựa vào nó bất cứ khi nào tôi cần thực hiện các chỉnh sửa nhanh cho code của mình. Trong khi đó, tôi dự định sử dụng Visual Studio cho việc phát triển ứng dụng “hardcore”.
Visual Studio Code: Trình Soạn Thảo Code Linh Hoạt Cùng Hệ Sinh Thái Mở Rộng
Giao diện trình soạn thảo code Visual Studio Code với các tiện ích mở rộng đang được sử dụng, minh họa khả năng tùy biến và hỗ trợ đa dạng ngôn ngữ lập trình cho môi trường phát triển.
Tôi cũng đã trang bị cho VS Code một loạt các tiện ích mở rộng, từ thư viện Python và Prettier đến Git Graphs và bộ sưu tập Remote Development. VS Code là ứng dụng lập trình duy nhất tôi đã cài đặt trên thực tế mọi máy tính trong nhà, vì vậy tôi có thể sử dụng các tiện ích mở rộng Remote Tunnels và Remote SSH để nhanh chóng chỉnh sửa các file code của mình mà không cần dùng đến RDP.
Quản Lý Container Và Phát Triển Linux Với Podman Desktop & WSL2
Bạn còn nhớ tôi đã đề cập đến ảo hóa lồng nhau (nested virtualization) trước đó chứ? Podman Desktop không thể hoạt động nếu không kích hoạt ảo hóa trong BIOS. May mắn thay, ảo hóa lồng nhau là một giải pháp thay thế hiệu quả. Mặc dù tôi có các máy ảo riêng biệt dành riêng cho việc chạy container, nhưng tôi thường sử dụng môi trường containerized để kiểm tra các dự án lập trình của mình, đó là lý do tại sao Podman là một phần thiết yếu trong thiết lập của tôi.
Podman Desktop: Giải Pháp Container Hàng Đầu
Bạn có thể thay thế Podman Desktop bằng Docker, nhưng tôi khuyên bạn nên gắn bó với Podman. Thứ nhất, Podman Desktop cũng hỗ trợ Docker, vì vậy bạn có thể dễ dàng chuyển đổi giữa hai tùy thuộc vào nhu cầu của mình. Khả năng nhóm nhiều ứng dụng vào cùng một “pod” là một tiện ích khác, và Podman Desktop cũng tích hợp tốt với Quadlets và Kubernetes.
WSL2: Cầu Nối Giữa Windows Và Thế Giới Linux
Giao diện terminal của Windows Subsystem for Linux 2 (WSL2) hiển thị quá trình cài đặt ứng dụng Gigolo, minh họa khả năng chạy các công cụ Linux bên trong môi trường Windows 11 VM.
Tôi chạy Podman Desktop trên WSL2, đây là một bổ sung tuyệt vời khác cho bộ công cụ lập trình của tôi. Điều này là do tôi cuối cùng sẽ phải làm việc với Linux ở một thời điểm nào đó trong hành trình lập trình của mình. Mặc dù tôi có nhiều máy ảo chạy các bản phân phối Linux trên máy chủ Proxmox, WSL2 cho phép tôi thử nghiệm với bất kỳ bản phân phối nào trong môi trường phát triển Windows 11 của mình.
Tối Ưu Hóa Quy Trình Với PowerShell Modules Và Trình Quản Lý Gói
Tôi chủ yếu sử dụng VS Code để tạo các script PowerShell, mặc dù có những lúc tôi cần truy cập shell của nó thông qua ứng dụng Terminal. Theo mặc định, giao diện PowerShell rất cơ bản – đặc biệt là vì tôi đã trang bị cho PowerShell trên máy tính chính của mình một số module thú vị. Tôi cũng đã trang bị cho máy ảo Git Bash, vì nó sẽ rất hữu ích khi tôi cần kiểm soát phiên bản cho các dự án lập trình của mình.
Các Trình Quản Lý Gói Hiệu Quả Trên Windows
Cuối cùng, tôi muốn đề cập đến các trình quản lý gói. Mặc dù chúng không chức năng hay đầy đủ gói như các đối tác Linux, nhưng các trình quản lý gói đã tiến bộ rất nhiều trên Windows. Tôi thích Chocolatey vì nó có một thư viện ứng dụng rộng lớn, mặc dù WinGet tích hợp tốt hơn với các ứng dụng Windows. Scoop cũng khá hữu ích nếu bạn muốn một thư mục cài đặt riêng biệt cho các gói của mình, nhưng có thể mất một thời gian để làm quen với những đặc điểm riêng của nó.
Tương Lai Của Môi Trường Phát Triển: Những Nâng Cấp Kế Tiếp
Giao diện quản lý web của Proxmox VE được truy cập từ máy tính xách tay, thể hiện sự tiện lợi trong việc quản lý các máy ảo và toàn bộ hệ thống home lab.
Cho đến nay, tôi đã thêm các dịch vụ lập trình yêu thích của mình vào máy ảo, nhưng tôi còn một số công cụ khác mà tôi dự định tích hợp vào workstation lập trình của mình. Tôi chưa thử sức với phát triển ứng dụng Android, nhưng tôi khá chắc chắn mình sẽ cài đặt Android Studio sau này. Hiện tại, trung tâm lập trình của tôi không bao gồm card đồ họa. Nhưng nếu tôi tham gia vào lĩnh vực AI, tôi sẽ phải trang bị cho nó một GPU chuyên dụng (cùng với một instance Jupyter Notebook tự host), vì các v-cores Xeon của tôi sẽ không chịu nổi sức nặng của các thuật toán phức tạp.
Tôi cũng đã nghe nhiều điều tốt đẹp về Laragon và có lẽ tôi sẽ thử nghiệm nó trong những tháng tới. Với việc Rust được tối ưu hóa tốt như vậy, tôi dự định cài đặt một số công cụ và tiện ích mở rộng dành riêng cho ngôn ngữ lập trình hiệu quả cao này.
Tóm lại, việc tự xây dựng một môi trường phát triển Windows 11 trên máy ảo Proxmox đã mang lại cho tôi sự linh hoạt và kiểm soát tối đa, giúp tôi duy trì một hệ điều hành chính sạch sẽ và hiệu quả. Đây không chỉ là một giải pháp kỹ thuật mà còn là một trải nghiệm tối ưu hóa quy trình làm việc, từ cài đặt hệ điều hành đến tích hợp các công cụ lập trình chuyên sâu và quản lý container. Với những kế hoạch nâng cấp trong tương lai, môi trường này hứa hẹn sẽ trở thành một trung tâm phát triển mạnh mẽ, đáp ứng mọi nhu cầu của một lập trình viên hiện đại. Hãy cùng đón chờ những cập nhật và chia sẻ kinh nghiệm tiếp theo về hành trình tối ưu hóa home lab và môi trường phát triển của tôi tại blogthuthuat.net!