Tự dựng code-server tại nhà
Simple
Sau một thời gian làm việc từ xa với nhiều thiết lập khác nhau, mình quyết định tự dựng một môi trường lập trình tại nhà bằng code-server. Lý do rất đơn giản: mình có một home server chạy Ubuntu, đang host nhiều dịch vụ (Nginx, Docker, Portainer...) và muốn quản trị + coding ngay trên thiết bị đó mà không phụ thuộc vào nền tảng bên thứ ba như code.dev hay GitHub Codespaces.
Bài viết này chia sẻ quá trình thiết lập code-server, cách mình dùng Cloudflare để proxy, cũng như hai lỗi "khó chịu" đã gặp (WebSocket + GitHub Copilot) cùng cách xử lý.
🧩 Vì sao chọn code-server?
Cho phép chạy VS Code trên trình duyệt từ bất kỳ đâu.
Toàn quyền tự quản, không gửi mã nguồn qua bên thứ ba.
Tích hợp tốt vào home server đang chạy 24/7.
Nhẹ, dễ setup, chạy tốt trên Linux.
Việc tự host giúp mình chủ động hoàn toàn: tài nguyên tự kiểm soát, không lo giới hạn thời gian hay yêu cầu nâng cấp dịch vụ.
1. Dùng Cloudflare để quản lý DNS và Proxy ẩn IP
Mình sử dụng Cloudflare làm DNS manager, đồng thời bật chế độ Proxy (đám mây màu cam) để giấu IP thật của server tại nhà. Dòng chảy kết nối sẽ là:
Client → Cloudflare → (Proxy) → Nginx (home server) → code-server
Lợi ích:
Ẩn IP thật của máy chủ.
Tích hợp SSL miễn phí.
Có thể dùng firewall rules hoặc Cloudflare Access để tăng bảo mật.
Trên máy chủ, traffic sẽ đi qua Nginx Reverse Proxy, rồi Nginx chuyển tiếp đến code-server đang chạy local (thường tại port 8080).
2. Các lỗi gặp phải trong quá trình triển khai
Dưới đây là hai lỗi mình gặp và cách khắc phục chi tiết.
❗ Lỗi 1: WebSocket của code-server không hoạt động qua Nginx
Triệu chứng
code-server load được nhưng không hiển thị đầy đủ giao diện.
Console báo lỗi WebSocket connection failed.
Một số extension không hoạt động.
Nguyên nhân
code-server sử dụng WebSocket cho nhiều tác vụ nội bộ, nhưng Nginx mặc định không tự chuyển tiếp các header liên quan đến WebSocket. Khi traffic đi qua Cloudflare → Nginx, kết nối WebSocket bị "downgrade" thành HTTP thường, dẫn tới lỗi.
Cách khắc phục
Thêm bộ header WebSocket bắt buộc vào block location:
proxy_set_header Upgrade $http_upgrade;
proxy_set_header Connection "upgrade";
proxy_http_version 1.1;
Sau khi thêm vào cấu hình và reload Nginx, WebSocket hoạt động trở lại.
❗ Lỗi 2: Không cài được GitHub Copilot trên code-server
Triệu chứng
Khi cài Copilot từ Extension Marketplace sẽ báo:
Failed to install extension...
Hoặc lỗi tải về từ gallery.
Nguyên nhân
code-server không sử dụng Marketplace gốc của VSCode do giấy phép.
Thay vào đó nó dùng Open VSX Registry, mà GitHub Copilot không được phát hành trên Open VSX.
Vì vậy, code-server không thể tìm thấy extension Copilot → cài đặt thất bại.
Cách khắc phục
Cần "chuyển" marketplace để code-server trỏ về marketplace chính thức của Microsoft bằng cách thêm biến môi trường.
- Mở file systemd service của code-server:
sudo nano /etc/systemd/system/code-server.service
- Thêm vào block
[Service]:
Environment=EXTENSIONS_GALLERY='{"serviceUrl": "https://marketplace.visualstudio.com/_apis/public/gallery", "itemUrl": "https://marketplace.visualstudio.com/items"}'
- Reload và restart:
sudo systemctl daemon-reload
sudo systemctl restart code-server
Sau đó, bạn có thể cài được GitHub Copilot bình thường.
Lưu ý
Đây là phương thức unofficial, nhưng hầu như ai chạy code-server cũng sử dụng để có đủ extension.
Marketplace Microsoft đôi khi rate limit, nhưng đa số hoạt động ổn định.
🎉 Kết luận
Tự dựng code-server tại nhà mang lại sự chủ động và linh hoạt rất lớn, đặc biệt nếu bạn có home server chạy 24/7. Việc kết hợp Cloudflare + Nginx giúp bảo mật và ẩn IP hiệu quả.
Dù gặp một số lỗi như WebSocket hoặc GitHub Copilot, chúng hoàn toàn có thể khắc phục bằng vài cấu hình nhỏ.
Nếu bạn cũng muốn tự triển khai workspace remote, code-server chắc chắn là lựa chọn rất đáng thử!